Windows 95
Windows 95 era molto più di "solo un wrapper" per MS-DOS . Citando Raymond Chen:
MS-DOS ha servito due scopi in Windows 95.
- È servito come boot loader.
- Ha funzionato come il livello del driver di dispositivo legacy a 16 bit.
Windows 95 ha effettivamente agganciato / sovrascritto quasi tutto l'MS-DOS, mantenendolo come un livello di compatibilità mentre fa tutto il lavoro pesante stesso. Ha inoltre implementato il multitasking preventivo per i programmi a 32 bit.
Pre-Windows 95
Windows 3.xe precedenti erano per lo più a 16 bit (ad eccezione di Win32s, un livello di compatibilità un pò che collega 16 e 32, ma lo ignoreremo qui), dipendevano maggiormente da DOS e utilizzavano solo il multitasking cooperativo - questo è quello in cui non forzano lo spegnimento di un programma in esecuzione; aspettano che il programma in esecuzione dia il controllo (in pratica, dì "Ho finito" dicendo al sistema operativo di eseguire il programma successivo che è in attesa).
Il multitasking era cooperativo, proprio come nelle vecchie versioni di MacOS (anche se a differenza del Multitasking DOS 4.x, che sfoggiava il multitasking preventivo). Un'attività doveva arrendersi al sistema operativo al fine di pianificare un'attività diversa. I rendimenti sono stati integrati in alcune chiamate API, in particolare l'elaborazione dei messaggi. Finché un'attività ha elaborato i messaggi in modo tempestivo, tutto è stato ottimo. Se un'attività ha interrotto l'elaborazione dei messaggi ed era impegnata nell'esecuzione di alcuni cicli di elaborazione, il multitasking non esisteva più.
Architettura di Windows 3.x.
Quanto a quanto presto i programmi di Windows avrebbero prodotto il controllo:
Windows 3.1 utilizza il multitasking cooperativo, il che significa che ogni applicazione in corso di esecuzione è incaricata di controllare periodicamente una coda di messaggi per scoprire se qualsiasi altra applicazione richiede l'uso della CPU e, in tal caso, per cedere il controllo a tale applicazione . Tuttavia, molte applicazioni di Windows 3.1 controllano la coda dei messaggi solo di rado, o per niente, e monopolizzano il controllo della CPU per tutto il tempo necessario. Un sistema multitasking preventivo come Windows 95 toglierà il controllo della CPU da un'applicazione in esecuzione e la distribuirà a quelli che hanno una priorità più elevata in base alle esigenze del sistema.
fonte
Tutto ciò che DOS vedrebbe è questa singola applicazione (Windows o altro) in esecuzione, che passerebbe il controllo senza uscire. In teoria, il multitasking preventivo può eventualmente essere implementato su DOS in ogni caso con l'uso di un orologio in tempo reale e interruzioni hardware per dare il controllo forzato allo scheduler. Come commenta Tonny , questo è stato effettivamente fatto da alcuni sistemi operativi in esecuzione su DOS.
386 modalità avanzata?
Nota: ci sono stati alcuni commenti su 386 modalità avanzata di Windows 3.x a 32 bit e che supporta il multitasking preventivo.
Questo è un caso interessante. Per riassumere il post sul blog collegato , la modalità avanzata 386 era fondamentalmente un hypervisor a 32 bit, che eseguiva macchine virtuali. All'interno di una di quelle macchine virtuali era in esecuzione la modalità standard di Windows 3.x, che fa tutte le cose sopra elencate.
MS-DOS funzionerebbe anche all'interno di quelle macchine virtuali, e apparentemente erano preventivamente multitasking - quindi sembra che l'hypervisor in modalità avanzata 386 condividerà fasce orarie della CPU tra le macchine virtuali (una delle quali ha funzionato 3.x normale e altre che eseguono MS -DOS), e ogni VM farà la propria cosa - 3.x coopererà multitasking, mentre MS-DOS verrebbe assegnato a un singolo compito.
MS-DOS
Lo stesso DOS era single-tasking su carta, ma aveva il supporto per i programmi TSR , che sarebbero rimasti in background fino a quando non fossero stati innescati da un interrupt di processo. Lungi dall'essere un vero multitasking, ma neanche completamente a singolo compito.
Tutto questo parlare di bit-ness? Ho chiesto informazioni sul multitasking!
Bene, a rigore il bit-ness e il multitasking non dipendono l'uno dall'altro. Dovrebbe essere possibile implementare qualsiasi modalità multitasking in qualsiasi bit-ness. Tuttavia, il passaggio dai processori a 16 bit ai processori a 32 bit ha anche introdotto altre funzionalità hardware che avrebbero potuto rendere più semplice l'implementazione del multitasking preventivo.
Inoltre, poiché i programmi a 32 bit erano nuovi, era più facile farli funzionare quando sono stati forzatamente disattivati, il che potrebbe aver rotto alcuni programmi legacy a 16 bit.
Certo, questa è tutta speculazione. Se vuoi davvero sapere perché MS non ha implementato il multitasking preventivo in Windows 3.x (nonostante la 386 modalità avanzata), dovrai chiedere a qualcuno che ha lavorato lì.
Inoltre, volevo correggere il tuo presupposto che Windows 95 fosse jsut un wrapper per DOS;)