Windows 95
O Windows 95 era muito mais do que "apenas um invólucro" para o MS-DOS . Citando Raymond Chen:
O MS-DOS atendeu a dois propósitos no Windows 95.
- Serviu como o carregador de inicialização.
- Ele atuou como a camada de driver de dispositivo herdado de 16 bits.
O Windows 95 realmente ligou / substituiu quase todo o MS-DOS, mantendo-o como uma camada de compatibilidade enquanto fazia todo o trabalho pesado. Também implementou multitarefa preventiva para programas de 32 bits.
Antes do Windows 95
O Windows 3.xe versões mais antigas eram geralmente de 16 bits (com exceção do Win32s, uma camada de compatibilidade que une 16 e 32, mas vamos ignorar isso aqui), eram mais dependentes do DOS e usavam apenas multitarefa cooperativa - isso é aquele 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 "eu terminei" dizendo ao sistema operacional para executar o próximo programa que está aguardando).
A multitarefa era cooperativa, assim como nas versões antigas do MacOS (embora diferentemente do Multitasking DOS 4.x, que exibia multitarefa preventiva). Uma tarefa precisava render ao sistema operacional para agendar uma tarefa diferente. Os rendimentos foram incorporados em determinadas chamadas de API, principalmente no processamento de mensagens. Enquanto uma tarefa processava as mensagens em tempo hábil, tudo era ótimo. Se uma tarefa parava de processar mensagens e estava ocupada executando algum loop de processamento, a multitarefa não existia mais.
Arquitetura do Windows 3.x
Quanto ao quão cedo os programas Windows renderiam controle:
O Windows 3.1 usa multitarefa cooperativa - o que significa que cada aplicativo que está em processo de execução é instruído a verificar periodicamente uma fila de mensagens para descobrir se algum outro aplicativo está solicitando o uso da CPU e, em caso afirmativo, fornecer controle para esse aplicativo . No entanto, muitos aplicativos do Windows 3.1 verificariam a fila de mensagens apenas com pouca ou nenhuma freqüência e monopolizariam o controle da CPU pelo tempo necessário. Um sistema multitarefa preemptivo como o Windows 95 retira o controle da CPU de um aplicativo em execução e o distribui para aqueles que têm maior prioridade com base nas necessidades do sistema.
fonte
Tudo o que o DOS veria é esse único aplicativo (Windows ou outro) em execução, que passaria o controle sem sair. Em teoria, a multitarefa preemptiva pode ser implementada no DOS de qualquer maneira com o uso de um relógio em tempo real e interrupções de hardware para forçar o controle do agendador. Como comenta Tonny , isso foi feito por alguns sistemas operacionais executando o DOS.
386 modo avançado?
Nota: houve alguns comentários no modo avançado 386 do Windows 3.x, sendo de 32 bits e com suporte a multitarefa preventiva.
Este é um caso interessante. Para resumir a postagem do blog vinculado , o modo avançado 386 era basicamente um hipervisor de 32 bits, que executava máquinas virtuais. Dentro de uma dessas máquinas virtuais, executava o modo padrão do Windows 3.x, que faz todo o material listado acima.
O MS-DOS também seria executado dentro dessas máquinas virtuais e, aparentemente, elas eram multitarefas preemptivamente - portanto, parece que o hipervisor de modo avançado 386 compartilhará intervalos de tempo de CPU entre as máquinas virtuais (uma das quais executava o normal 3.xe outras que executavam o MS -DOS), e cada VM fará as suas próprias coisas - o 3.x executaria multitarefas em cooperação, enquanto o MS-DOS seria de tarefa única.
MS-DOS
O próprio DOS era uma tarefa única no papel, mas tinha suporte para programas TSR , que permaneceriam em segundo plano até serem acionados por uma interrupção de hardware. Longe da verdadeira multitarefa, mas também não é uma tarefa única.
Toda essa conversa sobre bit-ness? Eu perguntei sobre multitarefa!
Bem, estritamente falando, o bit-ness e a multitarefa não dependem um do outro. Deveria ser possível implementar qualquer modo multitarefa em qualquer bit-ness. No entanto, a mudança dos processadores de 16 bits para os de 32 bits também introduziu outras funcionalidades de hardware que poderiam facilitar a implementação da 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 mudar - o que poderia ter quebrado alguns programas herdados de 16 bits.
Claro, isso é tudo especulação. Se você realmente deseja saber por que a MS não implementou multitarefa preemptiva no Windows 3.x (apesar do modo 386 aprimorado), será necessário perguntar a alguém que trabalhou lá.
Além disso, eu queria corrigir sua suposição de que o Windows 95 era apenas um invólucro para o DOS;)