Как было возможно многозадачность в старых версиях Windows?
Учитывая, что DOS была однозадачной ОС и ее связи с ранними версиями Windows, как ранним версиям Windows удавалось выполнять многозадачность? В сегодняшнем посте SuperUser Q & A рассматриваются ответы на этот вопрос..
Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..
Скриншот Windows 95 предоставлен Wikipedia.
Вопрос
Читатель SuperUser LeNoob хочет знать, как старые версии Windows могли работать как многозадачные системы ?:
Я читал, что DOS - это однозадачная ОС. Но если старые версии Windows (включая Windows 95?) Были просто оболочками для DOS, как они могли бы работать как многозадачная ОС??
Хороший вопрос! Как старые версии Windows смогли работать как многозадачные системы??
Ответ
Авторы SuperUser Боб и Пит имеют ответ для нас. Сначала Боб:
Windows 95 была гораздо больше, чем просто оболочка для MS-DOS. Цитируя Рэймонда Чена:
- MS-DOS служил двум целям в Windows 95: 1.) Он служил загрузчиком. & 2.) Он действовал как 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.
Далее следует ответ от Пита:
В современной операционной системе операционная система контролирует все аппаратные ресурсы, а запущенные приложения хранятся в песочницах. Приложению не разрешен доступ к памяти, которую ОС не выделяла этому приложению, и оно не может напрямую обращаться к аппаратным устройствам на компьютере. Если требуется доступ к оборудованию, приложение должно взаимодействовать через драйверы устройств..
ОС может применить этот контроль, потому что он заставляет ЦП перейти в защищенный режим.
DOS, с другой стороны, никогда не входит в защищенный режим, а остается в реальном режиме (*увидеть ниже). В реальном режиме работающие приложения могут выполнять все, что захотят, то есть напрямую обращаться к оборудованию. Но приложение, работающее в реальном режиме, также может указать ЦП на переход в защищенный режим..
И эта последняя часть позволяет приложениям, таким как Windows 95, запускать многопоточную среду, даже если они были в основном запущены из DOS.
Насколько мне известно, DOS (Disk Operating System) была не чем иным, как системой управления файлами. Он предоставил файловую систему, механизмы навигации по файловой системе, несколько инструментов и возможность запуска приложений. Это также позволило некоторым приложениям оставаться резидентными, например, драйверы мыши и эмуляторы EMM. Но он не пытался контролировать аппаратное обеспечение компьютера, как это делает современная ОС.
*Когда DOS был впервые создан в 1970-х годах, защищенный режим не существовал в CPU. Только в середине 80-х годов процессор 80286 стал защищенным режимом..
Обязательно перейдите к исходной теме и прочитайте оживленную дискуссию по этой теме, используя ссылку ниже!
Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.