Windows 95
O Windows 95 era muito mais do que "apenas um wrapper" para o MS-DOS . Citando Raymond Chen:
MS-DOS served two purposes in Windows 95.
- It served as the boot loader.
- It acted as the 16-bit legacy device driver layer.
O Windows 95 realmente conectou / anulou praticamente todo o MS-DOS, mantendo-o como uma camada de compatibilidade enquanto fazia todo o trabalho pesado propriamente dito. Também implementou multitarefa preemptiva para programas de 32 bits.
Pré-Windows 95
O Windows 3.xe mais antigo eram em sua maioria de 16 bits (com exceção do Win32s, um tipo de camada de compatibilidade que liga 16 e 32, mas vamos ignorar isso aqui), eram mais dependentes do DOS e usavam apenas cooperativas multitarefa - é aquela em que eles não forçam a execução de um programa em execução; eles esperam que o programa em execução gere controle (basicamente, diga "Estou pronto" dizendo ao SO para executar o próximo programa que está aguardando).
Multitasking was cooperative, just like in old versions of MacOS (though unlike Multitasking DOS 4.x, which sported preemptive multitasking). A task had to yield to the OS in order to schedule a different task. The yields were built into certain API calls, notably message processing. As long as a task processed messages in a timely manner, everything was great. If a task stopped processing messages and was busy executing some processing loop, multitasking was no more.
Arquitetura do Windows 3.x
Quanto aos primeiros programas do Windows gerariam controle:
Windows 3.1 uses cooperative multitasking - meaning that each application that is in the process of running is instructed to periodically check a message queue to find out if any other application is asking for use of the CPU and, if so, to yield control to that application. However, many Windows 3.1 applications would check the message queue only infrequently, or not at all, and monopolize control of the CPU for as much time as they required. A preemptive multitasking system like Windows 95 will take CPU control away from a running application and distribute it to those that have a higher priority based on the system's needs.
Tudo o que o DOS veria é este único aplicativo (Windows ou outro) em execução, que passaria o controle sem sair. Em teoria, a multitarefa preemptiva pode possivelmente ser implementada na parte superior do DOS com o uso de um relógio em tempo real e interrupções de hardware para forçar o controle do agendador. Como Tonny comments , isso foi realmente feito por alguns sistemas operacionais rodando em cima do DOS.
386 modo avançado?
Observação: houve alguns comentários sobre o 386 modo avançado do Windows 3.x sendo de 32 bits e suportando multitarefa preemptiva.
Este é um caso interessante. Para resumir a postagem de blog vinculada, o modo 386 avançado foi basicamente um -bit hypervisor, que executava máquinas virtuais. Dentro de uma dessas máquinas virtuais executava o modo padrão do Windows 3.x, que faz todas as coisas listadas acima.
O MS-DOS também rodaria dentro dessas máquinas virtuais e, aparentemente, elas eram multitarefas preventivamente - assim, parece que o hipervisor de modo avançado 386 compartilhará intervalos de tempo da CPU entre as máquinas virtuais (uma das quais executou normal 3.xe outros que executava o MS-DOS), e cada VM faria sua própria tarefa - 3.x cooperaria de forma multitarefa, enquanto o MS-DOS teria uma única tarefa.
MS-DOS
O próprio DOS era único no papel, mas tinha suporte para os programas TSR , que permaneceriam no fundo até ser acionado por uma interrupção de hardware. Longe da verdadeira multitarefa, mas também não é totalmente com uma única tarefa.
Toda essa conversa de bit-ness? Eu perguntei sobre multitarefa!
Bem, falando estritamente, o bit e o multitarefa não dependem um do outro. Deve ser possível implementar qualquer modo de multitarefa em qualquer bit. No entanto, a mudança de processadores de 16 bits para processadores de 32 bits também introduziu outra funcionalidade de hardware que poderia ter facilitado a multitarefa preemptiva.
Além disso, como os programas de 32 bits eram novos, era mais fácil fazê-los funcionar quando eram forçados a sair - o que poderia ter quebrado alguns programas legados de 16 bits.
Claro, isso é tudo especulação. Se você realmente quer saber por que o MS não implementou multitarefa preemptiva no Windows 3.x (apesar do modo 386 avançado), você terá que perguntar a alguém que trabalhou lá.
Além disso, eu queria corrigir sua suposição de que o Windows 95 era um invólucro para o DOS;)