Windows 95
Windows 95 была гораздо больше, чем просто оболочка для MS-DOS . Цитируя Рэймонда Чена:
MS-DOS служил двум целям в Windows 95.
- Он служил загрузчиком.
- Он действовал как 16-битный уровень драйвера устройства.
Windows 95 фактически зацепила / перегрузила практически все MS-DOS, сохранив ее как слой совместимости, одновременно выполняя всю тяжелую работу. Также реализована вытесняющая многозадачность для 32-битных программ.
Pre-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 была однозадачной на бумаге, но она поддерживала программы TSR , которые оставались бы в фоновом режиме, пока не были вызваны аппаратным прерыванием. Далеко от истинной многозадачности, но не полностью однозадачной.
Все эти разговоры о битности? Я спросил о многозадачности!
Ну, строго говоря, битность и многозадачность не зависят друг от друга. Должна быть возможность реализовать любой многозадачный режим в любой битности. Однако переход от 16-разрядных процессоров к 32-разрядным процессорам также представил другие аппаратные функции, которые могли бы упростить реализацию упреждающей многозадачности.
Кроме того, поскольку 32-разрядные программы были новыми, было проще заставить их работать, когда они принудительно отключены - что могло привести к поломке некоторых устаревших 16-разрядных программ.
Конечно, это все домыслы. Если вы действительно хотите знать, почему MS не реализовала вытесняющую многозадачность в Windows 3.x (несмотря на расширенный режим 386), вам нужно будет спросить кого-то, кто там работал.
Кроме того, я хотел бы исправить ваше предположение, что Windows 95 была просто оболочкой для DOS;)