Se o DOS for uma tarefa única, como era possível realizar multitarefas na versão antiga do Windows?

113

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?) Eram apenas invólucros do DOS, como o Windows poderia funcionar como um sistema operacional multitarefa?

Arkonix
fonte
8
É chamado de preferência multitarefa - support.microsoft.com/kb/117567
joeqwerty
20
Você terá que definir "velho" muito melhor que isso. O DOS + Windows 9x e o DOS + Windows 3.x no "Modo Avançado 386" eram bastante diferentes em relação ao DOS + Windows 3.x / 2.x no "Modo Padrão" e no "Modo Real". E como o joeqwerty alude, houve multitarefa cooperativa e preventiva. Livros inteiros foram escritos sobre isso, então uma pergunta específica é melhor.
JdeBP
5
@joeqwerty A IMO mais impressionante é que a Microsoft mantém a documentação on-line sobre software tão antigo. Existem até artigos sobre tópicos avançados em versões mais antigas do MS-DOS ... Realmente gentil da parte deles para manter isso vivo.
NothingsImpossible
6
O DOS não oferece multitarefa. Você ainda pode escrever programas totalmente multitarefa sem precisar da ajuda do DOS, que é o que o Windows faz cedo. O Windows 95 certamente não é apenas um "invólucro" para o DOS.
Boann
3
@NigelNquande Na verdade, eu achei o MS bastante bom em manter a documentação antiga. A maioria dos artigos de KB desativados estão online (por exemplo; um Windows 3.1 KB aleatório ou documentos sobre o printutilitário Windows 2.1-3.0 ou ansi.sys do MS-DOS 5.0), mesmo após o final de 12 meses declarado período de carência. Não é tão fácil de navegar quanto a documentação ativa do produto, você precisa ser específico em suas pesquisas.
Jason C #

Respostas:

160

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;)

Prumo
fonte
4
Muito bom artigo. Se bem me lembro (a classe de design do sistema operacional foi para mim há muitos anos), o Windows 9x ligou as interrupções do timer para impor seu próprio agendador, como você sugeriu no segundo ao último parágrafo. Havia outros SOs no topo do DOS que faziam o mesmo. Lembro-me claramente disso do AMX (SO em tempo real para aplicativos industriais) e XINU (para fins educacionais, pequenos Unix / Posix como OS), ambos executados em cima do DOS. (AMX poderia correr bare-metal em linha reta de EPROM também Era muito mais fácil para testar / debug quando executado em DOS salvou de EPROMS re-queima para cada teste...)
Tonny
@ Tonny Obrigado por confirmar que esse esquema é possível (e usado na prática). De qualquer maneira, o motivo pelo qual o Windows 1-3 não usou multitarefa preemptiva não é tanto que eles não conseguiram (o MS-DOS 4 o fez, embora não tenha sido lançado), mas teria quebrado a compatibilidade com o DOS. programas.
Bob
3
Mmmmhhh Considerando o Windows 1-3: O fato de ser uma base de código comum para as CPUs 8086 e superiores pode ter tido mais a ver com isso. O manuseio adequado do anel 0-3 só foi possível com o 80286 e acima e foi isso que o Win9x usou para implementar a multitarefa. O 4DOS e outros já forneciam uma multitarefa limitada no DOS (80286 era necessário se bem me lembro). Você pode até executar o próprio Win3 como um processo separado no 4DOS.
quer
11
Xinu realmente fez não correr em cima do DOS. Afinal, ele começou como um sistema operacional LSI-11. A afirmação de que não havia multitarefa preventiva no DOS + Windows 3.x é falsa. No modo avançado 386, houve, cortesia do VMM. E o absurdo sobre o 4DOS fornece uma resposta frequente: o 4DOS não é um sistema operacional . As declarações que ele forneceu multitarefa estão totalmente erradas.
9114 JdeBP
2
O PDP-8 suportava multitarefa preventiva e era apenas um computador de 12 bits.
David25272
26

Ele executava continuamente um único programa, o chamado windows. Essa distribuiu o tempo da CPU (e outros recursos) entre diferentes programas.

Considere esta analogia:

Você tem um escritório que pode ter apenas uma pessoa por vez (essa pessoa é chamada de senhor ou senhora DOS). Essa pessoa trabalha em uma coisa de cada vez. Por exemplo, telefona para uma única pessoa e começa a conversar 24/7 com ela.

Agora você substitui essa pessoa pelo Sr. Secretário. (janelas). Ele ligará para alguém e conversará o tempo todo com ele (ainda uma única tarefa). Depois de algum tempo, a outra pessoa dirá "Eu já falei o suficiente por enquanto. Vá conversar com outra pessoa e me ligue mais tarde".

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

  • Em termos técnicos, isso é chamado de multitarefa cooperativa. Requer que a outra pessoa diga que ele / ela teve tempo de CPU suficiente. Se não se faz isso, tudo desmorona.
  • Os sistemas modernos são muito mais inteligentes. Incluindo multitarefa preventiva. Pense na secretária definindo um despertador e cortando a outra pessoa após 5 minutos. "Isso é legal, Jane. Mas tenho que falar com Joe agora. Ligo para você daqui a pouco. - Clique."

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

Hennes
fonte
11
Você não quer dizer multitarefa cooperativa / não-preemptiva em seu primeiro ponto? Curiosamente, o Windows 95 introduziu multitarefa preventiva para programas de 32 bits. Não era tanto um invólucro para o DOS, como era um sistema operacional que usava o DOS como um gerenciador de inicialização, mas substituiu partes importantes (mantendo o suficiente para suporte ao programa de 16 bits / DOS).
Bob
senhor ou senhorita, por que não 'Dr.' DOS?
gtrak
11
"Ele executava continuamente um único programa ... Esse espalhava o tempo da CPU (e outros recursos) entre diferentes programas". isso não pode ser dito sobre qualquer sistema operacional? Embora a questão implique que o MS-DOS não poderia. Sou totalmente contrário às analogias / metáforas ao desutilizar detalhes técnicos da tecnologia. Ok, agora sabemos como funciona um escritório hipotético? Isso realmente não explica a resposta à pergunta.
Celeritas
13

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

O sistema operacional pode impor esse controle, porque força a CPU a entrar no modo protegido .

O DOS, por outro lado, nunca entra no modo protegido, mas permanece no modo real *. No modo real, os aplicativos em execução podem executar o que quiser, por exemplo, acessar o hardware diretamente. Mas um aplicativo em execução no modo real também pode solicitar à CPU que entre no modo protegido.

E esta última parte permite que aplicativos como o Windows 95 iniciem um ambiente multiencadeado, mesmo que tenham sido basicamente iniciados no DOS.

O DOS (Disk Operating System) não era muito mais que um sistema de gerenciamento de arquivos. Ele forneceu 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 de EMM. Mas não tentou controlar o hardware no computador da maneira que um sistema operacional moderno faz.

* Quando o DOS foi criado nos anos 70, o modo protegido não existia na CPU. Não foi até o processador 80286, em meados dos anos 80, que o modo protegido se tornou parte da CPU.

Pete
fonte
2
Lembre-se de que na época as CPUs não tinham o modo protegido.
jwenting
11
@jwenting - bom ponto, eu adicionei uma nota sobre isso
Pete
6

Antes do Windows 3.x, que era a primeira versão para aplicativos DOS multitarefa, havia programas como o DesqView que podiam fazer o mesmo. Se alguém estivesse, por exemplo, executando três sessões do DOS ao mesmo tempo, o DesqView criaria quatro máquinas virtuais. As três sessões do DOS pensariam que "possuíam" a máquina inteira, exceto que nenhuma delas realmente executaria E / S de arquivo. Em vez disso, a versão do DOS em execução em cada sessão seria corrigida para encaminhar todas as solicitações de E / S de arquivo para uma sessão especial, dedicada a esse objetivo. Como o hardware do modo texto do PC exibia continuamente o conteúdo de uma área da memória como caracteres; O DesqView pode permitir que cada sessão tenha sua própria tela virtual mapeando o intervalo 0xB8000-0xB9FFF de cada sessão para sua própria área de RAM, e copiar periodicamente a área do aplicativo atual para o buffer de tela físico. O suporte gráfico foi muito mais difícil, porque 256K de RAM na placa de vídeo foram controlados usando 64K de espaço de endereço, alguns registros de E / S e algum hardware "interessante" que exigia que as coisas fossem lidas e gravadas em determinadas seqüências específicas. No modo de texto, quando um aplicativo escrevia algo no buffer de texto, o DesqView podia definir um sinalizador indicando que ele deveria ser copiado para a exibição no próximo timer; somente a primeira gravação no buffer de texto em um determinado intervalo de tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick do timer. porque 256K de RAM na placa de vídeo foram controlados usando 64K de espaço de endereço, alguns registros de E / S e algum hardware "interessante" que exigia que as coisas fossem lidas e gravadas em determinadas seqüências específicas. No modo de texto, quando um aplicativo escrevia algo no buffer de texto, o DesqView podia definir um sinalizador indicando que ele deveria ser copiado para a exibição no próximo timer; somente a primeira gravação no buffer de texto em um determinado intervalo de tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick do timer. porque 256K de RAM na placa de vídeo foram controlados usando 64K de espaço de endereço, alguns registros de E / S e algum hardware "interessante" que exigia que as coisas fossem lidas e gravadas em determinadas seqüências específicas. No modo de texto, quando um aplicativo escrevia algo no buffer de texto, o DesqView podia definir um sinalizador indicando que ele deveria ser copiado para a exibição no próximo timer; somente a primeira gravação no buffer de texto em um determinado intervalo de tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick do timer. O DesqView pode definir um sinalizador indicando que ele deve ser copiado para a exibição no próximo tique do timer; somente a primeira gravação no buffer de texto em um determinado intervalo de tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick do timer. O DesqView pode definir um sinalizador indicando que ele deve ser copiado para a exibição no próximo tique do timer; somente a primeira gravação no buffer de texto em um determinado intervalo de tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick do timer.

Por outro lado, o modo de virtualização de gráficos exigiria que o DeskView capturasse cada gravação individual para exibir memória ou registros de E / S. Dado que isso reduziria a velocidade de gravação na memória por um fator de cerca de 100 e os programas gráficos precisavam escrever muito mais dados do que os programas de texto, a virtualização em tempo real da maioria dos softwares gráficos não era prática. Em vez disso, os gráficos eram manipulados com qualquer aplicativo que não fosse o primeiro plano, que tentava pausar os gráficos até que se tornasse o aplicativo em primeiro plano e, em seguida, fornecendo controle total sobre a tela. Quando o controle mudava para um aplicativo diferente, o DesqView tentava fazer uma cópia do estado de todos os registros gráficos e depois alternar. Ao retornar ao aplicativo gráfico, o DesqView restauraria o estado salvo.

De certa forma, os aplicativos DOS não gráficos com várias tarefas eram mais fáceis do que os aplicativos Windows com várias tarefas, porque havia muito poucos recursos compartilhados, e os aplicativos não precisavam interagir entre si. No Windows, por outro lado, é necessário lidar com coisas como a área de transferência ou a possibilidade de as janelas de um programa se moverem de maneira a obscurecer as de outro. O Windows 95 foi a primeira versão do Windows que poderia superar essas limitações, incluindo coisas como um sistema de janelas que poderia acomodar a indisponibilidade de uma área da tela enquanto o código tentava atraí-lo (com o efeito de que o desenho fosse mascarado) )

supercat
fonte
Obrigado por me lembrar do DesqView. Eu costumava usá-lo o tempo todo, mas tinha esquecido completamente.
Emmet
3

A multitarefa nada mais é do que uma ilusão de executar aplicativos simultaneamente. É percebido como execução simultânea, mas de fato 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 muito rapidamente. Na verdade, não há dois processos em execução ao mesmo tempo.

Portanto, é perfeitamente possível tornar a multitarefa do MS-DOS pausando um processo, executando o seguinte por um curto período de tempo, pausando aquele, retornando ao primeiro e assim por diante.

A multitarefa é apenas um recurso inteligente desenvolvido quando as CPUs começaram a ser rápidas o suficiente para continuar girando por esses processos e fazendo parecer simultâneo ao usuário final.

Para aqueles que se lembram, os jogos ainda estavam sendo executados no DOS4GW porque o Windows estava muito lento.

Dan Horvat
fonte
11
e, na maior parte, ainda é assim que as coisas funcionam nos sistemas operacionais até hoje. É por isso que você pode executar 10 coisas "ao mesmo tempo" em uma CPU de 4 núcleos, por exemplo.
jwenting
2
Não é realmente que "as CPUs começaram a ser rápidas o suficiente". Era possível executar sistemas operacionais multitarefas para vários usuários em um 286 (como o The Mark Williams Company Coherent , um bom sistema operacional introduzido no PC em 1983). As versões do MS-DOS e Windows (não NT) até (e inclusive) o "Millenium" eram realmente atrozes por qualquer padrão objetivo, mesmo os padrões técnicos da época, mas uma vez que o MS-DOS foi estabelecido como padrão para PCs pela IBM, O marketing e a dinâmica da Microsoft (para não mencionar o abuso criminal de seu poder de monopólio) efetivamente excluíram a melhor concorrência por um período muito longo.
Emmet
2
"A multitarefa é apenas um recurso inteligente desenvolvido quando as CPUs começaram a ser rápidas o suficiente ..." Você quer dizer como o Computador de Orientação Apollo era um projeto multitarefa ?
a CVn 13/03
11
Quando eu disse "CPUs", quis dizer as de produção em massa, e quando disse "multitarefa", quis dizer multitarefa de aplicativos para PC. E, finalmente, por "usuário final", eu quis dizer o garoto por trás do PC, não o astronauta. Ainda assim, parabéns pelo comentário interessante.
Dan Horvat
0

Mesmo que ele possa se concentrar apenas em uma tarefa, o que faria é um simples passo de ir rapidamente de uma para a outra. Desta forma, parecia que era multitarefa, mas na verdade, apenas focando em 1, depois em outro, depois em outro, etc.

Thoth
fonte
Você está confundindo multitarefa com computação multiprocessador lá. Alternar entre várias tarefas muito rapidamente é multitarefa, no mundo dos computadores. A definição usual não exige execução paralela. Várias "versões antigas do Windows" fizeram multitarefa de maneira diferente, dependendo de qual versão do Windows, em que modo ele funcionava e se era baseado no DOS, em primeiro lugar. (O Windows NT 3.1 é mais antigo que o DOS + Windows 95 e pode executar o SMP.) Como apontei em outro comentário, livros inteiros foram escritos sobre isso. Esse realmente não é o melhor resumo de duas frases.
JdeBP
@JdeBP ... Eu sei a diferença entre multitarefa e multiprocessador, pois ainda uso principalmente processadores de núcleo único! Computadores trabalham em série. Paralelo verdadeiro só será visto na computação quântica.
Thoth
0

Uma coisa que eu não vi mencionada aqui é interessante:

O Windows 3.0 não era um sistema multitarefa preventivo; ele era cooperativo, como todas as versões do MacOS, até o aplicativo OS X-One ter que retornar de uma chamada antes que qualquer outro aplicativo pudesse executar qualquer ação.

Como um comentarista me lembrou, no entanto, os aplicativos do DOS eram multitarefas. Isso ocorre porque eles não foram gravados na multitarefa "Cooperativamente" (isso sempre deve ser incorporado aos sistemas que a utilizam).

Na época, havia programas chamados TSRs (Terminate-Stay Resident) que substituíam os drivers de dispositivos atuais. Esses drivers rodavam independentemente - geralmente em seu próprio segmento, inserindo-se em um dos manipuladores de eventos do sistema operacional. O Windows geralmente não sabia sobre eles, eles rodavam em um nível mais baixo.

Na verdade, esses não eram aplicativos do Windows, mas eram como todas as atividades de encadeamento ocorreram antes do Windows 3.1, como drivers de impressora, drivers COM etc.

Embora o Windows 3.1 fosse multitarefa, o DOS não era, mas o Windows 3.1 apenas empurrou o DOS para fora do caminho e assumiu o controle quando foi iniciado (naquela época, você geralmente iniciava o Windows a partir de um prompt do DOS).

Bill K
fonte
O Windows 3.0 suporta multitarefa preemptiva de aplicativos DOS quando executado em um processador 386 ou superior. Somente aplicativos Windows foram multitarefas de forma cooperativa.
Jules
Ah, está correto - eu estava codificando aplicativos do Windows na época e não estava pensando no DOS. Ele tratou os aplicativos do DOS de maneira diferente - obrigado por apontar isso.
Bill K
-8

Boa pergunta. No MS-DOS, o kernel era monolítico, o que significa que apenas lidava com uma tarefa por vez, em comparação com o novo e moderno kernel implementado no Windows 9x e na versão atual. Você pode conferir mais aqui .

javathunderman
fonte
11
-1 você sugere que um sistema operacional monotítico não pode multitarefa - isso é errado. linux é um kernel monotítico FAMOSAMENTE (houve um famoso debate entre linus torvalds e andrew tanenbaum), mas o linux pode obviamente executar várias tarefas. aqui está um link para mostrar-lhe o Linux é monolítico stackoverflow.com/questions/1806585/...
barlop
4
Monolítico não significa o que você pensa que faz.
Thorbjørn Ravn Andersen