Если DOS однозадачен, как в старой версии Windows была возможна многозадачность?

Если DOS однозадачен, как в старой версии Windows была возможна многозадачность?

Я читал, что DOS — это однозадачная ОС.

Но если старые версии Windows (включая Windows 95?) были просто оболочками DOS, как Windows могла работать как многозадачная ОС?

решение1

Виндовс 95

Виндовс 95была гораздо больше, чем просто «оболочка» для MS-DOS. Цитата Рэймонда Чена:

MS-DOS служил двум целям в Windows 95.

  • Он служил загрузчиком.
  • Он действовал как 16-битный драйвер устаревшего устройства.

Windows 95 фактически перехватила/переопределила почти весь MS-DOS, оставив его в качестве уровня совместимости, выполняя всю тяжелую работу самостоятельно. Она также реализовала вытесняющую многозадачность для 32-битных программ.


До Windows 95

Windows 3.x и более ранние версии были в основном 16-разрядными (за исключением Win32s, своего рода слоя совместимости, который связывает 16 и 32, но мы проигнорируем его здесь), были более зависимы от DOS и использовали только кооперативную многозадачность — то есть ту, при которой они не заставляют работающую программу отключаться; они ждут, пока работающая программа передаст управление (по сути, говорят «я закончил», сообщая ОС запустить следующую ожидающую программу).

Многозадачность была кооперативной, как и в старых версиях MacOS (хотя в отличие от многозадачности DOS 4.x, которая щеголяла вытесняющей многозадачностью). Задача должна была уступить ОС, чтобы запланировать другую задачу. Уступки были встроены в определенные вызовы API, в частности, в обработку сообщений. Пока задача обрабатывала сообщения своевременно, все было замечательно. Если задача прекращала обработку сообщений и была занята выполнением некоторого цикла обработки, многозадачность прекращалась.

Архитектура Windows 3.x

Что касается того, как ранние программы Windows передавали управление:

Windows 3.1 использует кооперативную многозадачность — это означает, что каждое приложение, находящееся в процессе выполнения, получает указание периодически проверять очередь сообщений, чтобы узнать, запрашивает ли какое-либо другое приложение использование ЦП, и, если да, уступать управление этому приложению. Однако многие приложения Windows 3.1 проверяют очередь сообщений лишь изредка или вообще не проверяют и монополизируют управление ЦП на столько времени, сколько им требуется. Система вытесняющей многозадачности, такая как Windows 95, отнимет управление ЦП у работающего приложения и распределит его между теми, которые имеют более высокий приоритет в зависимости от потребностей системы.

источник

Все, что увидит DOS, это это единственное запущенное приложение (Windows или другое), которое будет передавать управление без выхода. Теоретически, вытесняющая многозадачность может быть реализована поверх DOS в любом случае с использованием часов реального времени и аппаратных прерываний, чтобы принудительно передать управление планировщику. КакТонни комментирует, на самом деле это было сделано некоторыми ОС, работающими поверх DOS.

386 улучшенный режим?

Примечание: были некоторые комментарии по386 улучшенный режимWindows 3.x является 32-разрядной и поддерживает вытесняющую многозадачность.

Это интересный случай. Подводя итоги, можно сказать, чтоСообщение блога, 386 расширенный режим был по сути 32-битным гипервизором, который запускал виртуальные машины. Внутри одной из этих виртуальных машин запускался стандартный режим Windows 3.x, который делал все, что перечислено выше.

MS-DOS также будет работать внутри этих виртуальных машин, и, по-видимому, они будут выполнять многозадачность с упреждением, поэтому, по-видимому, гипервизор 386 расширенного режима будет разделять кванты процессорного времени между виртуальными машинами (на одной из которых будет работать обычная 3.x, а на других — MS-DOS), и каждая виртуальная машина будет выполнять свою собственную задачу — 3.x будет выполнять многозадачность совместно, в то время как MS-DOS будет выполнять только одну задачу.


MS-DOS

Сама DOS на бумаге была однозадачной, но она поддерживалаТСРпрограммы, которые будут оставаться в фоновом режиме, пока не будут вызваны аппаратным прерыванием. Далеко от настоящей многозадачности, но и не полностью однозадачность.


Все эти разговоры о битности? Я спрашивал о многозадачности!

Ну, строго говоря, разрядность и многозадачность не зависят друг от друга. Должно быть возможно реализовать любой режим многозадачности в любой разрядности. Однако переход от 16-битных процессоров к 32-битным также ввел другие аппаратные функции, которые могли бы упростить реализацию вытесняющей многозадачности.

Кроме того, поскольку 32-битные программы были новинкой, их было легче заставить работать, если их принудительно отключить, что могло привести к поломке некоторых устаревших 16-битных программ.

Конечно, это все домыслы. Если вы действительно хотите узнать, почему MS не реализовала вытесняющую многозадачность в Windows 3.x (не считая 386 расширенного режима), вам придется спросить кого-то, кто там работал.

Также я хотел бы поправить ваше предположение, что Windows 95 была всего лишь оболочкой для DOS ;)

решение2

Он непрерывно запускал одну программу, ту, что называлась windows. Она распределяла процессорное время (и другие ресурсы) между разными программами.

Рассмотрим такую ​​аналогию:

У вас есть офис, в котором может находиться только один человек в одно и то же время (этот человек называется мистер или миссис DOS). Этот человек работает над чем-то одним в одно и то же время. Например, он звонит одному человеку и начинает общаться с ним/ней 24/7.

Теперь вы заменяете этого человека на господина секретаря (windows). Он будет звонить кому-то и все время разговаривать с ним (все еще одна задача). Затем через некоторое время другой человек скажет: «Я уже достаточно поговорил. Иди поговори с кем-нибудь другим и перезвони мне через некоторое время».

Господин секретарь позвонит другому человеку. Пообщайтесь с ним, пока тот не скажет то же самое. Затем он позвонит следующему человеку, пока не окажется в конце списка людей, с которыми можно поговорить. В этот момент он снова начнет сверху.

  • Технически это называется кооперативной многозадачностью. Она требует, чтобы другой человек сказал, что у него/нее достаточно процессорного времени. Если кто-то этого не сделает, то все развалится.
  • Современные системы намного умнее. Включая упреждающую многозадачность. Представьте себе секретаря, который заводит будильник и отключает собеседника через 5 минут. «Это мило, Джейн. Но мне сейчас нужно поговорить с Джо. Я перезвоню вам через некоторое время. — Щелчок».

Если добавить несколько процессоров, все станет еще сложнее. :)

решение3

В современной операционной системе операционная система контролирует все аппаратные ресурсы, а запущенные приложения хранятся в песочницах. Приложению не разрешается получать доступ к памяти, которую ОС не выделила этому приложению, и оно не может напрямую получать доступ к аппаратным устройствам на компьютере. Если требуется доступ к оборудованию, приложение должно взаимодействовать через драйверы устройств.

Операционная система может обеспечить этот контроль, поскольку она заставляет ЦП войтизащищенный режим.

DOS, с другой стороны, никогда не переходит в защищенный режим, а остается в немреальный режим*. В реальном режиме работающие приложения могут выполнять все, что им захочется, например, напрямую обращаться к оборудованию. Но приложение, работающее в реальном режиме, может также приказать процессору перейти в защищенный режим.

И эта последняя часть позволяет таким приложениям, как Windows 95, запускать многопоточную среду, даже если они по сути были запущены из DOS.

DOS (Disk Operating System) была, насколько мне известно, не более чем системой управления файлами. Она предоставляла файловую систему, механизмы навигации по файловой системе, несколько инструментов и возможность запускать приложения. Она также позволяла некоторым приложениям оставаться резидентными, например, драйверам мыши и эмуляторам EMM. Но она не пыталась управлять оборудованием компьютера так, как это делают современные ОС.

* Когда DOS был впервые создан в 70-х, защищенный режим не существовал в ЦП. Только с появлением процессора 80286 в середине 80-х защищенный режим стал частью ЦП.

решение4

Многозадачность — это не более чем иллюзия одновременного запуска приложений. Это воспринимается как одновременное выполнение на вашей стороне, но на самом деле процессы A, B и C делят процессорное время в следующем порядке: A, B, C, A, B, C, A, B... они просто включаются и выключаются очень быстро. На самом деле никакие два процесса не выполняются одновременно.

Таким образом, вполне возможно сделать MS-DOS многозадачной, заставив ее приостановить один процесс, запустить следующий на короткий промежуток времени, приостановить его, вернуться к первому и т. д.

Многозадачность — это всего лишь умная функция, разработанная, когда процессоры стали достаточно быстрыми, чтобы непрерывно выполнять эти процессы и создавать для конечного пользователя впечатление их одновременности.

Для тех, кто помнит, игры все еще запускались на DOS4GW, потому что Windows был слишком медленным.

Связанный контент