Se o DOS é monotarefa, como a multitarefa era possível na versão antiga do Windows?

Se o DOS é monotarefa, como a multitarefa era possível na versão antiga do Windows?

Eu li que o DOS é um sistema operacional de tarefa única.

Mas se as versões antigas do Windows (incluindo também o Windows 95?) fossem apenas wrappers do DOS, como o Windows poderia funcionar como um sistema operacional multitarefa?

Responder1

Janelas 95

Janelas 95foi muito mais do que "apenas um wrapper" para MS-DOS. Citando Raymond Chen:

O MS-DOS serviu a dois propósitos no Windows 95.

  • Ele serviu como carregador de boot.
  • Ele atuou como a camada de driver de dispositivo legado de 16 bits.

Na verdade, o Windows 95 conectou/substituiu quase todo o MS-DOS, mantendo-o como uma camada de compatibilidade enquanto fazia todo o trabalho pesado. Também implementou multitarefa preemptiva para programas de 32 bits.


Pré-Windows 95

O Windows 3.xe anteriores eram em sua maioria de 16 bits (com exceção do Win32s, uma espécie de camada de compatibilidade que faz a ponte entre 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 desativação de um programa em execução; eles esperam que o programa em execução ceda o controle (basicamente, diga "Terminei" informando 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 diferente do multitarefa DOS 4.x, que apresentava multitarefa preemptiva). Uma tarefa teve que ceder ao sistema operacional para agendar uma tarefa diferente. Os rendimentos foram incorporados em certas chamadas de API, principalmente no processamento de mensagens. Contanto que uma tarefa processasse as mensagens em tempo hábil, tudo estava ótimo. Se uma tarefa parasse de processar mensagens e estivesse ocupada executando algum loop de processamento, a multitarefa não existiria mais.

Arquitetura do Windows 3.x

Quanto à forma como os primeiros programas do Windows renderiam controle:

O Windows 3.1 usa multitarefa cooperativa - o que significa que cada aplicativo 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, ceder o controle a esse aplicativo . No entanto, muitos aplicativos do Windows 3.1 verificavam a fila de mensagens com pouca frequência ou nunca verificavam e monopolizavam o controle da CPU pelo tempo necessário. Um sistema multitarefa preventivo como o Windows 95 retirará o controle da CPU de um aplicativo em execução e o distribuirá para aqueles que têm prioridade mais alta com base nas necessidades do sistema.

fonte

Tudo o que o DOS veria seria 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. ComoTony comenta, na verdade isso foi feito por alguns sistemas operacionais executados em cima do DOS.

386 modo avançado?

Nota: houve alguns comentários sobre386 modo aprimoradodo Windows 3.x ser de 32 bits e oferecer suporte a multitarefa preemptiva.

Este é um caso interessante. Para resumir o linkpostagem no blog, o modo aprimorado 386 era basicamente um hipervisor de 32 bits, que executava máquinas virtuais. Dentro de uma dessas máquinas virtuais rodava 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 multitarefa preventivamente - então parece que o hipervisor de modo aprimorado 386 compartilhará intervalos de tempo de CPU entre as máquinas virtuais (uma das quais rodava 3.xe normal e outras que rodavam MS -DOS), e cada VM fará sua própria coisa - 3.x seria multitarefa cooperativamente, enquanto o MS-DOS seria de tarefa única.


MS DOS

O próprio DOS era monotarefa no papel, mas tinha suporte paraTSRprogramas, que permaneceriam em segundo plano até serem acionados por uma interrupção de hardware. Longe de ser uma verdadeira multitarefa, mas também não totalmente monotarefa.


Toda essa conversa sobre bits? Eu perguntei sobre multitarefa!

Bem, estritamente falando, o bitness e a multitarefa não dependem um do outro. Deve ser possível implementar qualquer modo multitarefa em qualquer bit. No entanto, a mudança de processadores de 16 bits para processadores de 32 bits também introduziu outras funcionalidades de hardware que poderiam ter facilitado 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 desligados à força - o que pode ter quebrado alguns programas legados de 16 bits.

Claro, tudo isso é especulação. Se você realmente quer saber por que a MS não implementou multitarefa preemptiva no Windows 3.x (apesar do modo avançado 386), você terá que perguntar a alguém que trabalhou lá.

Além disso, gostaria de corrigir sua suposição de que o Windows 95 era apenas um wrapper para DOS;)

Responder2

Ele executou continuamente um único programa, chamado Windows. Aquele distribui o tempo de CPU (e outros recursos) entre diferentes programas.

Considere esta analogia:

Você tem um escritório que só pode ter uma pessoa por vez (essa pessoa se chama senhor ou senhora DOS). Essa pessoa trabalha em uma coisa de cada vez. Por exemplo, ele telefona para uma única pessoa e começa a conversar 24 horas por dia, 7 dias por semana com ela.

Agora você substitui essa pessoa pelo Sr. secretário. (janelas). Ele telefonará para alguém e conversará o tempo todo com ele (ainda é uma tarefa única). Depois de algum tempo a outra pessoa dirá "Já falei o suficiente por enquanto. Vá falar com outra pessoa e me ligue daqui a pouco".

O senhor secretário ligará para a outra pessoa. Converse com aquele até que essa pessoa diga a mesma coisa. Em seguida, ele ligará para a próxima pessoa até que ela esteja no final da lista de pessoas com quem conversar. Nesse momento, começará novamente no topo.

  • Em termos técnicos, isto é chamado de multitarefa cooperativa. Exige que a outra pessoa diga que teve tempo de CPU suficiente. Se não fizermos isso, tudo desmoronará.
  • Os sistemas modernos são muito mais inteligentes. Incluindo multitarefa preventiva. Pense na secretária ajustando um despertador e interrompendo a outra pessoa após 5 minutos. "Isso é legal Jane. Mas eu tenho que falar com Joe agora. Te ligo de volta daqui a pouco. - Clique."

Se você adicionar vários processadores, fica ainda mais complicado. :)

Responder3

Em um sistema operacional moderno, o sistema operacional controla todos os recursos de hardware e os aplicativos em execução são mantidos em sandboxes. Um aplicativo não tem permissão para acessar a memória que o sistema operacional não tenha alocado para esse aplicativo e não pode acessar diretamente os dispositivos de hardware do computador. Se for necessário acesso ao hardware, o aplicativo deverá se comunicar por meio de drivers de dispositivo.

O sistema operacional pode impor esse controle, porque força a CPU a entrarmodo protegido.

O DOS, por outro lado, nunca entra no modo protegido, mas permanece emmodo real*. No modo real, os aplicativos em execução podem realizar qualquer coisa que desejarem, por exemplo, acessar o hardware diretamente. Mas um aplicativo executado em modo real também pode instruir a CPU a entrar no modo protegido.

E esta última parte permite que aplicativos como o Windows 95 iniciem um ambiente multithread, mesmo que tenham sido basicamente iniciados a partir do DOS.

DOS (Disk Operating System) não era, na verdade, muito mais do que um sistema de gerenciamento de arquivos. Fornecia um sistema de arquivos, mecanismos para navegar no sistema de arquivos, algumas ferramentas e a possibilidade de iniciar aplicativos. Também permitiu que alguns aplicativos permanecessem residentes, por exemplo, drivers de mouse e emuladores EMM. Mas não tentou controlar o hardware do computador da mesma forma que um sistema operacional moderno faz.

* Quando o DOS foi criado na década de 70, o modo protegido não existia na CPU. Somente com o processador 80286, em meados dos anos 80, o modo protegido se tornou parte da CPU.

Responder4

Multitarefa nada mais é do que uma ilusão de executar aplicativos simultaneamente. É percebido como uma execução simultânea do seu lado, mas na verdade os processos A, B e C estão compartilhando o tempo da CPU nesta ordem: A, B, C, A, B, C, A, B... eles apenas ligam e desligar muito rapidamente. Na verdade, não há dois processos em execução ao mesmo tempo.

Portanto, é perfeitamente possível tornar o MS-DOS multitarefa fazendo com que ele pause um processo, execute o próximo por um curto período de tempo, pause aquele, volte para o primeiro e assim por diante.

Multitarefa é apenas um recurso inteligente desenvolvido quando as CPUs começaram a ser rápidas o suficiente para continuar girando nesses processos e fazendo com que parecessem simultâneos para o usuário final.

Para quem se lembra, os jogos ainda rodavam no DOS4GW porque o Windows era muito lento.

informação relacionada