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?
windows
multitasking
Arkonix
fonte
fonte
print
utilitá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.Respostas:
Windows 95
O Windows 95 era muito mais do que "apenas um invólucro" para o MS-DOS . Citando Raymond Chen:
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).
Arquitetura do Windows 3.x
Quanto ao quão cedo os programas Windows renderiam controle:
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;)
fonte
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.
Se você adicionar vários processadores, fica ainda mais complicado. :)
fonte
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.
fonte
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) )
fonte
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.
fonte
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.
fonte
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).
fonte
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 .
fonte