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


Я прочитал, что DOS - однозадачная ОС.

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


114
2018-03-08 14:28


Источник


Это называется упреждающей многозадачностью - support.microsoft.com/kb/117567 - joeqwerty
Вам нужно будет определить «старый» намного лучше, чем это. DOS + Windows 9x и DOS + Windows 3.x в режиме «386 Enhanced Mode» были совершенно разными в этом отношении для DOS + Windows 3.x / 2.x в «Стандартный режим» и «Реальный режим». И поскольку joeqwerty намекает, была совместная многозадачность, а также прелестная. На этом написаны целые книги, поэтому конкретный вопрос лучше. - JdeBP
@joeqwerty Самая удивительная ИМО - это то, что Microsoft хранит документацию онлайн о таком антикварном программном обеспечении. Есть даже статьи о продвинутых темах в более старых версиях MS-DOS ... Действительно приятно из них, чтобы сохранить это в живых. - NothingsImpossible
DOS не дает вам многозадачности. Вы все еще можете писать полностью многозадачные программы поверх него без помощи DOS, что и делает ранняя Windows. Windows 95 - это не просто «обертка» для DOS. - Boann
@NigelNquande Я действительно нашел MS, который был довольно хорош в сохранении старой документации. Большинство их статей в отставке КБ находятся в сети (например, случайные Windows 3.1 KB, или документы на print утилита для Windows 2.1-3.0 или ANSI.SYS от MS-DOS 5.0), даже после заявленного 12-месячного льготного периода окончания срока службы. Это просто не так легко просматривается, как документация по активному продукту, вы должны быть конкретными в своих поисках. - Jason C


Ответы:


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 (хотя в отличие от Multitasking 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 была jsut оболочкой для DOS;)


161
2018-03-08 15:22



Очень хорошая рецензия. Если я правильно помню (класс проектирования ОС был много лет назад для меня), Windows 9x подключил таймер-прерывания для принудительного использования своего собственного планировщика, как и вы предложили в своем втором-последнем абзаце. Были и другие ОС на вершине DOS, которые делали то же самое. Я отчетливо помню это из AMX (ОС реального времени для промышленных приложений) и XINU (образовательная цель - небольшая Unix / Posix, такая как ОС), которая работала поверх DOS. (AMX также мог запускать bare-metal прямо из EPROM. Гораздо проще было протестировать / отладить при запуске DOS. Сохраняло вас от повторного записи EPROMS для каждого теста.) - Tonny
@Tonny Спасибо за подтверждение того, что эта схема возможна (и используется на практике). По предположению, причина, по которой Windows 1-3 не использовала превентивную многозадачность, заключается не столько в том, что они были не в состоянии сделать это (MS-DOS 4, хотя и не был выпущен), а скорее нарушил бы совместимость с DOS программы. - Bob
Mmmmhhh Учитывая Windows 1-3: Тот факт, что это обычная кодовая база для процессоров 8086 и выше, возможно, имеет больше общего с ней. Правильная обработка ring0-3 возможна только с 80286 и выше, и это то, что Win9x использовал для реализации многозадачности. 4DOS и другие уже предоставили ограниченную многозадачность на DOS (80286 был необходим, если я правильно помню). Вы даже можете запустить Win3 как отдельный процесс в 4DOS. - Tonny
Сину действительно сделал не запускать поверх DOS. В конце концов, это началось как операционная система LSI-11. Утверждение о том, что в DOS + Windows 3.x не было premmptive многозадачности, является ложным. В 386 расширенном режиме, было учтено VMM. И глупость о 4DOS дает вам часто заданный ответ: 4DOS не является операционной системой, Заявления о том, что он предоставил многозадачность, являются совершенно неправильными. - JdeBP
PDP-8 поддерживала упреждающую многозадачность, и это был всего лишь 12-битный компьютер. - david25272


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

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

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

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

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

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

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


26
2018-03-08 14:36



Разве вы не имеете в виду совместную / неуправляемую многозадачность в своем первом пункте? Кроме того, интересно, что Windows 95 вводила превентивную многозадачность для 32-разрядных программ. Это была не столько обертка для DOS, сколько ОС, которая использовала DOS в качестве загрузчика, но заменила основные ее части (поддерживая достаточную поддержку 16-битной / DOS-программы). - Bob
мистер или промахи, почему бы не «доктор», DOS? - gtrak
«Он постоянно запускал одну программу ... Это позволило распределить процессорное время (и другие ресурсы) между различными программами». не может быть сказано о какой-либо операционной системе? Хотя вопрос подразумевает, что MS-DOS не мог. Я категорически против аналогии / метафоры, когда вы теряете техническую информацию о технологиях. Итак, теперь мы знаем, как работает какой-то гипотетический офис? Это не объясняет ответ на вопрос. - Celeritas


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

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

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

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

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

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


13
2018-03-08 17:11



Помните, что в то время у процессоров не было таких вещей, как защищенный режим. - jwenting
@jwenting - хороший момент, я добавил примечание об этом - Pete


До Windows 3.x, которая была первой версией для многозадачных приложений DOS, существовали такие программы, как DesqView, которые могли бы работать аналогичным образом. Если таковой был, например, одновременно запуская три сеанса DOS, затем DesqView создаст четыре виртуальные машины. Каждые три сеанса DOS считают, что они «владеют» всей машиной, за исключением того, что ни один из них не будет фактически выполнять ввод / вывод файлов. Вместо этого версия DOS, работающая в каждом сеансе, будет исправлена ​​так, что она будет перенаправлять любые запросы на ввод-вывод файлов на специальный сеанс, который был предназначен для этой цели. Поскольку аппаратное обеспечение текстового режима ПК будет непрерывно отображать содержимое области памяти в виде символов; DesqView может позволить каждому сеансу иметь свой собственный виртуальный экран, сопоставляя диапазон 0xB8000-0xB9FFF каждого сеанса с его собственной областью ОЗУ и периодически копируя область текущего приложения в физический буфер экрана. Графическая поддержка была намного сложнее, так как 256 Кбайт ОЗУ на панели дисплея контролировалось с использованием 64 КБ адресного пространства, некоторых регистров ввода-вывода и некоторого «интересного» оборудования, которое требовало чтения и записи некоторых определенных последовательностей. В текстовом режиме, когда приложение написало что-то в текстовом буфере, DesqView мог установить флаг, указывающий, что он должен быть скопирован на дисплей следующего тика таймера; только первая запись в текстовый буфер в заданный момент времени потребует вмешательства DesqView; все остальные будут объединены со следующим тиком таймера.

В отличие от этого, для виртуализации графического режима DeskView должен улавливать каждую отдельную запись для отображения памяти или регистров ввода-вывода. Учитывая, что это замедлит работу памяти примерно в 100 раз, а графическим программам пришлось писать намного больше данных, чем текстовые программы, виртуализация большинства графических программ в режиме реального времени была непрактичной. Вместо этого графику обрабатывали с помощью любого приложения без переднего плана, которое пыталось сделать паузу графики до тех пор, пока оно не станет приоритетным приложением, а затем полностью контролирует экран. Когда управление переключается на другое приложение, DesqView попытается сделать копию состояния всех графических регистров и затем переключиться. После возврата в графическое приложение DesqView восстановит сохраненное состояние.

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


6
2018-03-09 00:33



Спасибо, что напомнили мне о DesqView. Я использовал его все время, но совершенно забыл об этом. - Emmet


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

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

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

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


3
2018-03-10 21:34



и по большей части, это все еще, как все работает в операционных системах и по сей день. Вот почему вы можете запускать 10 вещей «одновременно» на четырехъядерном процессоре, например. - jwenting
На самом деле это не так, что «процессоры стали достаточно быстрыми». Можно было запускать многопользовательские многозадачные операционные системы на «286» (например, The Mark Williams Company Последовательный, прекрасная ОС, представленная на ПК в 1983 году). MS-DOS и Windows (а не NT) версии вплоть до (и в том числе) «Millenium» действительно были ужасными по любому объективному стандарту, даже по техническим стандартам того времени, но как только MS-DOS был установлен как стандарт для ПК IBM, Маркетинг и динамика Microsoft (не говоря уже о преступном злоупотреблении их монопольной властью) фактически исключили лучшую конкуренцию в течение очень долгого времени. - Emmet
«Многозадачность - это просто умная функция, разработанная, когда процессоры начали достаточно быстро ...» Вы имеете в виду, как Apollo Guidance Computer был многозадачным дизайном? - Michael Kjörling
Когда я сказал «CPU», я имел в виду массовые версии, и когда я сказал «многозадачность», я имел в виду многозадачность приложений для ПК. И, наконец, «конечным пользователем» я имел в виду малыша за ПК, а не космонавта. Тем не менее, престиж для интересного комментария. - Dan Horvat


Несмотря на то, что он может сосредоточиться только на одной задаче, что бы он сделал, это простой шаг быстрого перехода от одного к другому. Таким образом, казалось, что это многозадачность, но по правде говоря, она просто фокусируется на 1, затем на другом, потом на другом и т. Д.


0
2018-03-08 19:33



Вы объединяетесь многозадачность с многопроцессорные вычисления там. Переключение между несколькими задачами очень быстро - это многозадачность, в компьютерном мире. Обычное определение не спрос параллельное выполнение. Различные «старые версии Windows» выполняли многозадачность по-разному, в зависимости от какой версии Windows, в каком режиме она работала и была ли она вообще основана на DOS. (Windows NT 3.1 старше DOS + Windows 95 и может выполнять SMP.) Как я уже отмечал в другом комментарии, на этом написаны целые книги. Это действительно не лучшее резюме предложения. - JdeBP
@JdeBP ... Я знаю разницу между многозадачностью и мультипроцессором, поскольку в основном я использую одноядерные процессоры! Компьютеры работают серийно. Истинная параллель будет видна только в квантовых вычислениях. - Thoth


Одна вещь, которую я не упоминал здесь, интересна:

Windows 3.0 не была упреждающей многозадачной системой, она была совместной, как и все версии MacOS, до тех пор, пока приложение OS X-One не должно было вернуться из вызова, прежде чем какое-либо другое приложение сможет предпринять какие-либо действия.

Однако, как заметил мне комментатор, приложения DOS были многозадачны. Это связано с тем, что они не были записаны в «совместную» многозадачность (это всегда должно быть встроено в системы, которые ее используют).

В то время были программы под названием TSR (Terminate-Stay Resident), которые заменили сегодняшние драйверы устройств. Эти драйверы будут работать независимо - как правило, в своем потоке, вставляя себя в один из обработчиков событий ОС. Windows обычно не знали о них, они работали на более низком уровне.

Это были не приложения для Windows, но они были такими, как все процессы потоковой передачи имели место перед окнами 3.1, такими как драйверы принтера, драйверы com и т. Д.

Хотя Windows 3.1 была многозадачной, DOS не была, но Windows 3.1 просто оттолкнула dos от себя и взяла верх, когда она началась (тогда вы часто запускали окна из приглашения DOS).


0
2018-03-10 20:39



Windows 3.0 поддерживала превентивную многозадачность приложений DOS при работе на процессоре 386 или выше. Только приложения Windows были многозадачными. - Jules
О, это правильно - я тогда кодировал окна приложений и не думал о DOS. Он по-разному относился к приложениям DOS - спасибо, что указали это. - Bill K


Хороший вопрос. В MS-DOS ядро ​​было монолитным, то есть оно обрабатывало только одну задачу за раз, по сравнению с новым, современным ядром, которое было реализовано в Windows 9x и текущей версии. Вы можете проверить больше Вот,


-8
2018-03-08 17:43



-1 вы утверждаете, что монотитная ОС не может многозадачно - это неправильно. Linux - это монотонное ядро ​​(была известная дискуссия между linus torvalds и andrew tanenbaum), но Linux, очевидно, может быть многозадачной. вот ссылка, чтобы показать вам, что linux является монолитным stackoverflow.com/questions/1806585/... - barlop
Монолит не означает, что вы думаете. - Thorbjørn Ravn Andersen