Questão Se o DOS é single-tasking, como a multitarefa é possível na versão antiga do Windows?


Eu li que o DOS é um sistema operacional único.

Mas se 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?


114


origem


Chama-se multitarefa preemptiva - support.microsoft.com/kb/117567 - joeqwerty
Você vai ter que definir "old" muito melhor do que isso. O DOS + Windows 9x e o DOS + Windows 3.x em "386 Enhanced Mode" eram bastante diferentes a este respeito para o DOS + Windows 3.x / 2.x em "Standard Mode" e "Real Mode". E, como alude a joeqwerty, havia a multitarefa cooperativa, bem como o preëmptive. Livros inteiros foram escritos sobre isso, então uma questão específica é melhor. - JdeBP
@joeqwerty O mais impressionante é que a Microsoft mantém documentação on-line sobre softwares tão antigos. Há até mesmo artigos sobre tópicos avançados em versões mais antigas do MS-DOS ... Muito bom deles para manter isso vivo. - NothingsImpossible
O DOS não oferece multitarefa. Você ainda pode escrever programas totalmente multitarefa sobre ele sem a ajuda do DOS, que é o que o Windows faz. O Windows 95 certamente não é apenas um "wrapper" para o DOS. - Boann
@NigelNquande Na verdade, descobri que o MS é bastante bom em manter a documentação antiga. A maioria dos artigos da KB aposentados é on-line (por exemplo, um Windows 3.1 KBou docs no print utilitário para o Windows 2.1-3.0 ou ansi.sys MS-DOS 5.0), mesmo após o período de tolerância de 12 meses declarado. Não é tão facilmente navegável quanto a documentação ativa do produto, você tem que ser específico em suas pesquisas. - Jason C


Respostas:


Windows 95

Windows 95 era muito mais do que "apenas um invólucro" para o MS-DOS. Citando Raymond Chen:

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

  • Ele serviu como o gerenciador de inicialização.
  • Ele atuou como a camada de driver de dispositivo legado de 16 bits.

O Windows 95, na verdade, 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, uma camada de compatibilidade que liga o 16 e 32, mas vamos ignorar isso aqui), eram mais dependentes do DOS e usavam apenas multitarefa cooperativa - aquele em que eles não forçam um programa em execução a sair; 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).

A multitarefa era cooperativa, assim como nas versões antigas do MacOS (embora, ao contrário do Multitasking DOS 4.x, que usava multitarefa preventiva). Uma tarefa tinha que ceder ao sistema operacional para agendar uma tarefa diferente. Os rendimentos foram construídos 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 existia mais.

Arquitetura do Windows 3.x

Quanto aos primeiros programas do Windows gerariam controle:

O Windows 3.1 usa multitarefa cooperativa - o que significa que cada aplicativo que está em 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, para fornecer controle a esse aplicativo . No entanto, muitos aplicativos do Windows 3.1 verificariam a fila de mensagens apenas com pouca freqüência, ou não, e monopolizariam o controle da CPU pelo tempo que eles exigissem. Um sistema de multitarefa preemptiva como o Windows 95 retira o controle da CPU de um aplicativo em execução e o distribui para aqueles que têm uma prioridade mais alta com base nas necessidades do sistema.

fonte

Todos os DOS veriam se esta aplicação única (Windows ou outra) rodando, 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?

Nota: tem havido alguns comentários sobre 386 modo avançado do Windows 3.x sendo de 32 bits e suportando multitarefa preemptiva.

Este é um caso interessante. Para resumir o link postagem no blogO 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 todas as coisas listadas acima.

O MS-DOS também rodaria dentro dessas máquinas virtuais, e aparentemente elas eram multitarefas preventivamente - então parece que o hipervisor de modo avançado 386 compartilhará intervalos de tempo de CPU entre as máquinas virtuais (uma das quais executou 3.x normal e outras que executavam MS -DOS), e cada VM fará sua própria coisa - 3.x cooperativamente multitarefa, enquanto o MS-DOS seria único-tarefa.


MS-DOS

O próprio DOS era único no papel, mas tinha suporte para TSR programas, que ficariam em segundo plano até serem acionados 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, estritamente falando, o bit-ness e multitarefa não são dependentes uns dos outros. 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 outras funcionalidades de hardware que poderiam ter facilitado a multitarefa preventiva.

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, queria corrigir sua suposição de que o Windows 95 era apenas um wrapper para o DOS;)


161



Muito bom write-up. Se bem me lembro (classe de design do sistema operacional foi há muitos anos atrás para mim) o Windows 9x interceptou as interrupções temporizadas para impor seu próprio agendador, como você sugeriu no seu segundo ao último parágrafo. Havia outros sistemas operacionais no topo do DOS que faziam o mesmo. Lembro-me claramente disso do AMX (sistema operacional em tempo real para aplicações industriais) e XINU (propósito educacional pequeno Unix / Posix como SO) que ambos rodavam em cima do DOS. (O AMX também pode ser executado diretamente da EPROM. Foi muito mais fácil testar / depurar quando executado no DOS. Evitou que você re-grave o EPROMS em cada teste.) - Tonny
@Tonny Obrigado por confirmar que esse esquema é possível (e usado na prática). Em suma, a razão pela qual o Windows 1-3 não usava multitarefa preemptiva não era tanto que eles eram incapazes de fazê-lo (o MS-DOS 4 o possuía, embora não lançado), mas sim que teria quebrado a compatibilidade com DOS programas. - Bob
Mmmmhhh Considerando o Windows 1-3: O fato de que é um código base comum para o 8086 e superior pode ter tido mais a ver com isso. Ring0-3 manipulação adequada só foi possível com 80286 e até que foi o que Win9x utilizado para implementar multi-tasking. 4DOS e outros já forneceram uma multitarefa limitada no DOS (o 80286 foi necessário se bem me lembro). Você pode até executar o próprio Win3 como um processo separado no 4DOS. - Tonny
Xinu realmente fez não executar em cima do DOS. Começou como um sistema operacional LSI-11, afinal. A afirmação de que não havia multitarefa preemptiva no DOS + Windows 3.x é falsa. No 386 Enhanced Mode, houve cortesia do VMM. E o absurdo sobre o 4DOS faz com que você receba uma Resposta Freqüente: 4DOS não é um sistema operacional. As declarações que ele fornece multitarefa estão totalmente erradas. - JdeBP
O PDP-8 suportava multitarefa preventiva, e isso era apenas um computador de 12 bits. - david25272


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

Considere esta analogia:

Você tem um escritório que só pode ter uma pessoa no momento (Essa pessoa é chamada de senhor ou patroa DOS). Essa pessoa trabalha em uma coisa no momento. Por exemplo. Telefona para uma única pessoa e começa a conversar 24/7 com ele / ela.

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

O Sr. secretário ligará para a outra pessoa. Converse com esse 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 falar. Nesse momento, começará novamente no topo.

  • Em termos técnicos, isso é chamado de multitarefa cooperativa. Isso requer que a outra pessoa diga que ele / ela teve tempo de CPU suficiente. Se alguém não fizer isso, tudo desmorona.
  • Os sistemas modernos são muito mais inteligentes. Incluindo multitarefa preventiva. Pense na secretária ajustando um despertador e desligando a outra pessoa após 5 minutos. "Isso é legal, Jane. Mas eu tenho que falar com Joe agora. Vou te ligar de volta daqui a pouco. - Clique."

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


26



Você não quer dizer multitarefa cooperativa / não-preventiva em seu primeiro ponto? Além disso, curiosamente, o Windows 95 introduziu multitarefa preemptiva 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 substituía grandes partes dele (mantendo o suficiente para suporte a programas de 16 bits / DOS). - Bob
senhor ou senhorita, por que não 'Dr.' DOS? - gtrak
"Ele executava continuamente um único programa ... Aquele espalhava o tempo da CPU (e outros recursos) entre diferentes programas." não pode ser dito sobre qualquer sistema operacional? Embora a questão implique que o MS-DOS não conseguiu. Eu me oponho fortemente a analogias / metáforas quando dissocio detalhes técnicos da tecnologia. Ok, agora sabemos como funciona algum escritório hipotético? Isso não explica realmente a resposta à pergunta. - Celeritas


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 alocou a esse aplicativo e não pode acessar diretamente os dispositivos de hardware no computador. Se o acesso ao hardware for necessário, 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 modo protegido.

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

E esta última parte permite que aplicativos como o Windows 95 iniciem um ambiente multi-encadeado mesmo que eles tenham sido basicamente lançados do DOS.

DOS (Disk Operating System) era, afaik, não muito mais do que o sistema de gerenciamento de arquivos. Ele forneceu um sistema de arquivos, mecanismos para navegar pelo sistema de arquivos, algumas ferramentas e a possibilidade de iniciar aplicativos. Também permitiu que algumas aplicações permanecessem residentes, por ex. drivers de mouse e emuladores EMM. Mas ele não tentou controlar o hardware no computador como um sistema operacional moderno faz.

* Quando o DOS foi criado pela primeira vez 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.


13



Lembre-se que no momento as CPUs não tinham coisas como modo protegido. - jwenting
@jwenting - bom ponto, eu adicionei uma nota sobre isso - Pete


Antes do Windows 3.x, que era a primeira versão para multitarefa de aplicativos do DOS, havia programas como o DesqView, que poderiam fazer o mesmo. Se um foi, e. executando três sessões do DOS de uma vez, então o DesqView criaria quatro máquinas virtuais. Cada uma das três sessões do DOS pensaria que elas "possuíam" a máquina inteira, exceto que nenhuma delas executaria a E / S de arquivo. Em vez disso, a versão do DOS em execução em cada sessão seria corrigida para que enviasse quaisquer solicitações de E / S de arquivo para uma sessão especial, que era dedicada a essa finalidade. Já que o hardware do modo de 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 copiando periodicamente a área do aplicativo atual para o buffer de tela física. O suporte gráfico era muito mais difícil, porque 256K de RAM na placa de exibição eram controlados usando 64K de espaço de endereço, alguns registradores de E / S e algum hardware "interessante" que exigia que as coisas fossem lidas e escritas em certas seqüências específicas. No modo de texto, quando um aplicativo gravou algo no buffer de texto foi gravado, o DesqView poderia definir um sinalizador indicando que ele deveria ser copiado para a exibição no próximo tick do timer; somente a primeira gravação no buffer de texto em um determinado tempo exigiria a intervenção do DesqView; todos os outros seriam consolidados para o próximo tick timer.

Por outro lado, a virtualização do modo gráfico exigiria que o DeskView interceptasse cada gravação individual para exibir registros de memória ou de E / S. Como isso desaceleraria as gravações de 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 ao se ter qualquer aplicativo não-em primeiro plano que tentasse fazer uma pausa nos gráficos até se tornar o aplicativo em primeiro plano e, em seguida, dar-lhe 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 registradores gráficos e depois alternar. Ao voltar para o aplicativo gráfico, o DesqView restauraria o estado salvo.

De certa forma, os aplicativos DOS multitarefas não-gráficos eram mais fáceis do que os aplicativos multitarefa do Windows porque havia muito poucos recursos compartilhados e os aplicativos não precisavam interagir uns com os outros. No Windows, pelo contrário, é necessário lidar com coisas como a área de transferência, ou a possibilidade de que as janelas de um programa possam se mover de maneira a obscurecer as de outro. Windows 95 era a primeira versão do Windows que poderia superar tais limitações, incluindo coisas como um sistema de janelas que poderia acomodar uma área da tela ficar indisponível enquanto o código estava tentando desenhar para ele (com o efeito de que o desenho seria mascarado ).


6



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


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

Portanto, é perfeitamente possível executar multitarefas do MS-DOS fazendo-o pausar um processo, executar o próximo por um curto período de tempo, pausar esse, pular de volta para o primeiro e assim por diante.

A multitarefa é apenas um recurso inteligente desenvolvido quando os processadores começaram a ser rápidos o suficiente para manter a rotação através desses processos e fazer com que parecesse 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.


3



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
Não é realmente que "os processadores começaram a ser rápidos o suficiente". Era possível rodar sistemas operacionais multitarefa multi-usuário em um '286' (como o The Mark Williams Company Coerente, um bom sistema operacional apresentado ao PC em 1983). Versões MS-DOS e Windows (não NT) até (e inclusive) “Millenium” realmente foram atrozes com qualquer padrão objetivo, mesmo com os padrões técnicos da época, mas uma vez que o MS-DOS foi estabelecido como o padrão para PCs pela IBM, O marketing e a dinâmica da Microsoft (para não mencionar o abuso criminoso de seu poder de monopólio) efetivamente excluíram a melhor concorrência por muito tempo. - Emmet
"Multitarefa é apenas uma característica inteligente desenvolvida quando os processadores começaram a ser rápidos o suficiente ..." Você quer dizer como o O Apollo Guidance Computer era um design multitarefa? - Michael Kjörling
Quando eu disse "CPUs" eu quis dizer os produzidos em massa, e quando eu disse "multitarefa" eu quis dizer a multitarefa de aplicativos de PC. E, finalmente, pelo "usuário final" eu quis dizer o garoto por trás do PC, não o astronauta. Ainda assim, elogios para o comentário interessante. - Dan Horvat


Mesmo que só possa se concentrar em uma tarefa, o que ela faria seria um simples passo de ir rapidamente de uma para outra. Desta forma, parecia que era multitarefa, mas na verdade apenas se concentra em 1, depois em outro, depois em outro, etc.


0



Você está confundindo multitarefa com computação multiprocessador há. Alternar rapidamente entre múltiplas tarefas é multitarefa, no mundo da informática. A definição usual não exigem execução paralela. Várias "versões antigas do Windows" faziam multitarefas de forma diferente, dependendo de qual versão do Windows, em que modo ele funcionava e se era mesmo baseado em DOS. (O Windows NT 3.1 é mais antigo que o DOS + Windows 95, e poderia fazer o SMP.) Como apontei em outro comentário, livros inteiros foram escritos sobre isso. Isso realmente não é o melhor resumo de duas frases. - JdeBP
@ JdeBP ... Eu sei a diferença entre multitarefa e multiprocessador como eu ainda uso principalmente processadores de núcleo único! Computadores funcionam em série. O verdadeiro paralelo só será visto na computação quântica. - Thoth


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

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

Como um comentarista me lembrou, no entanto, os aplicativos DOS eram multitarefas. Isso ocorre porque eles não foram escritos para "Cooperativamente" multitarefa (isso sempre deve ser construído em sistemas que o utilizam).

Na época, havia programas chamados TSRs (Terminate-Stay Resident) que ocupavam o lugar dos drivers de dispositivos atuais. Esses drivers seriam executados 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 corriam em um nível mais baixo.

Estes não eram realmente aplicativos do Windows, mas eram como todas as atividades de threading ocorreram antes do Windows 3.1, como drivers de impressora, drivers de computador, etc.

Embora o windows 3.1 fosse multitarefa, o DOS não era, mas o Windows 3.1 apenas empurrava o DOS para fora do caminho e assumia quando ele era iniciado (naquela época, você frequentemente iniciava o Windows a partir de um prompt do DOS).


0



O Windows 3.0 oferece suporte à multitarefa preemptiva de aplicativos do DOS quando executado em um processador 386 ou superior. Apenas os aplicativos do Windows eram multitarefas cooperativamente. - Jules
Ah, isso é correto - eu estava codificando aplicativos do windows na época e não estava realmente pensando sobre o DOS. Tratou os aplicativos DOS de maneira diferente - obrigado por apontar isso. - Bill K


Boa pergunta. No MS-DOS, o kernel era monolítico, o que significa que ele lidava apenas com uma tarefa de cada vez, versus o novo e moderno kernel que foi implementado no Windows 9x e na versão atual. Você pode conferir mais Aqui.


-8



-1 você sugere que um sistema operacional monotítico não pode executar multitarefa - isso está completamente errado. linux é FAMOSAMENTE kernel monotímico (houve um famoso debate entre linus torvalds e andrew tanenbaum), mas o linux pode, obviamente, multi-tarefa. aqui está um link para mostrar que o linux é monolítico stackoverflow.com/questions/1806585/… - barlop
Monolítico não significa o que você acha que faz. - Thorbjørn Ravn Andersen