Я читал, что DOS-однозадачная ОС.
но если старые версии Windows (также включая Windows 95?) были просто оболочками DOS, как Windows могла работать как многозадачная ОС?
Я читал, что DOS-однозадачная ОС.
но если старые версии Windows (также включая Windows 95?) были просто оболочками DOS, как Windows могла работать как многозадачная ОС?
Windows 95 было гораздо больше, чем" просто обертка " для MS-DOS. Цитирую Раймонда Чена:
MS-DOS служил двум целям в Windows 95.
- он служил загрузчиком.
- он действовал как 16-разрядный уровень драйвера устаревших устройств.
Windows 95 на самом деле подключили / перезаписали почти все MS-DOS, сохраняя его как уровень совместимости, делая все сама тяжелая работа. Он также реализована вытесняющая многозадачность для 32-битных программ.
Windows 3.x и старше были в основном 16-битными (за исключением Win32s, своего рода уровня совместимости, который соединяет 16 и 32, но мы проигнорируем это здесь), были более зависимы от DOS и использовали только кооперативную многозадачность - это тот, где они не заставляют запущенную программу переключаться; они ждут, пока запущенная программа даст контроль (в принципе, скажите "Я закончил", сказав ОС запустить следующую программу, которая ждет).
многозадачность была совместной, как и в старых версиях MacOS (хотя в отличие от многозадачности DOS 4.x, который носил вытесняющую многозадачность). Задача должна была уступить ОС, чтобы запланировать другую задачу. Выходы были встроены в определенные вызовы API, особенно обработку сообщений. Пока задача обрабатывала сообщения своевременно, все было замечательно. Если задача остановлена обрабатывал сообщения и был занят выполнением какого-то цикла обработки, многозадачности больше не было.
как в начале программы Windows принесут управления:
Windows 3.1 использует совместную многозадачность-это означает, что каждое приложение, которое находится в процессе работы поручается периодически проверять очередь сообщений, чтобы выяснить, если любое другое приложение запрашивает использование процессора и, если да, чтобы дать контроль этому приложению. Однако многие приложения для Windows 3.1 проверяют очередь сообщений нечасто или вообще не проверяют ее и монополизируют управление ЦП на требуемое время. Вытесняющая многозадачная система, такая как Windows 95, отнимет управление процессором у работающего приложения и распределит его тем, у кого более высокий приоритет в зависимости от потребностей системы.
все DOS увидит это сингл приложение (Windows или другая), что бы пройти контроль без выхода. Теоретически, упреждающая многозадачность может быть реализована поверх DOS в любом случае с использованием часов реального времени и аппаратных прерываний для принудительного управления планировщиком. Как комментарии Тонни на самом деле это делают некоторые ОС, работающий под Дос.
Примечание: были некоторые комментарии к расширенный режим 386 Windows 3.x является 32-разрядным и поддерживает упреждающую многозадачность.
Это интересный случай. Обобщить связаны блоге, 386 расширенный режим был в основном 32-разрядный гипервизор, который запускал виртуальные машины. Внутри одной из этих виртуальных машин работала Windows 3.стандартный режим X, который делает все вещи, перечисленные выше.
MS-DOS также будет работать внутри этих виртуальных машин, и, по-видимому, они были предварительно многозадачны - поэтому кажется, что 386 гипервизор расширенного режима будет совместно использовать временные срезы ЦП между виртуальными машинами (одна из которых работает нормально 3.X и другие, которые запускали MS-DOS), и каждая виртуальная машина будет делать свое дело-3.x будет совместно многозадачным, в то время как MS-DOS будет однозадачным.
сам DOS был однозадачным на бумаге, но у него была поддержка TSR программы, которые остаются в фоновом режиме, пока не будут вызваны аппаратным прерыванием. Вдали от истинная многозадачность, но не полностью однозадачная.
ну, строго говоря, битность и многозадачность не зависят друг от друга. Должна быть возможность реализовать любой многозадачный режим в любой битности. Тем не менее переход от 16-разрядных процессоров к 32-разрядным процессорам также представил другие аппаратные функции, которые могли бы сделать вытесняющую многозадачность проще осуществлять.
кроме того, поскольку 32-битные программы были новыми, было легче заставить их работать, когда они принудительно отключены - что могло сломать некоторые устаревшие 16-битные программы.
конечно, это все домыслы. Если вы действительно хотите знать, почему MS не реализовали вытесняющая многозадачность в Windows 3.x (несмотря на расширенный режим 386), вам придется спросить кого-то, кто там работал.
кроме того, я хотел бы исправить ваше предположение, что Windows 95 была jsut оболочка для DOS ;)
Он постоянно бегал по единой программе, на одной под названием Windows. Это распределяет процессорное время (и другие ресурсы) между различными программами.
рассмотрим такую аналогию:
У вас есть офис, который может иметь только один человек в то время (этот человек называется Мистер или миссис DOS). Что человек работает на одном деле. Е. Г. это телефоны одного человека и начинает чат 24/7 с ним/ней.
теперь вы замените этого человека мистером секретарем. (Windows.) Он будет звонить кому-то и говорить все время с ней (еще одна задача). Затем через некоторое время другой человек скажет: "Я уже достаточно поговорил. Иди поговори с кем-нибудь еще и перезвони мне немного".
господин секретарь позвонит другому человеку. Общайтесь с этим, пока этот человек не скажет то же самое. Затем он позвонит следующему человеку, пока не будет в конце списка людей, с которыми нужно поговорить. В это время он начнет снова на верхний.
Если вы добавляете несколько процессоров, это становится еще сложнее. :)
в современной операционной системе, операционная система контролирует все аппаратные ресурсы, и запуск приложений в изолированной среде. Приложению не разрешен доступ к памяти, которую ОС не выделила этому приложению, и оно не может напрямую обращаться к аппаратным устройствам компьютера. Если требуется доступ к оборудованию, приложение должно взаимодействовать через драйверы устройств.
ОС может обеспечить такой контроль, поскольку она заставляет процессор введите защищенный mode.
DOS, с другой стороны, никогда не переходит в защищенный режим, но остается в реальном режиме *. В реальном режиме запущенные приложения могут выполнять все, что угодно, например, напрямую обращаться к оборудованию. Но приложение, работающее в реальном режиме, также может сообщить процессору о переходе в защищенный режим.
и эта последняя часть позволяет приложениям, таким как Windows 95, запускать многопоточную среду, даже если они были в основном запущены из ДОС.
DOS (дисковая операционная система) был, afaik, не намного больше, чем система управления файлами. Она предоставляла файловую систему, механизмы навигации по файловой системе, несколько инструментов и возможность запуска приложений. Это также позволило некоторым приложениям оставаться резидентами, например, драйверам мыши и эмуляторам эмуляторов. Но он не пытался контролировать аппаратное обеспечение компьютера так, как это делает современная ОС.
* когда DOS был впервые создан в 70-х, защищенный режим не существуют в центральном процессоре. Только в середине 80-х годов защищенный режим стал частью процессора 80286.
до Windows 3.x, который был первой версией для многозадачных приложений DOS, были такие программы, как DesqView, которые могли сделать то же самое. Если один, например, работает сразу три сеанса DOS, то DesqView создаст четыре виртуальные машины. Три сеанса DOS каждый думал бы, что они "владели" всей машиной, за исключением того, что ни один из них фактически не выполнял бы файловый ввод-вывод. Вместо этого версия DOS, работающая в каждом сеансе, была бы исправлена так, чтобы это передало бы любые запросы для файлового ввода-вывода на специальную сессию, которая была посвящена этой цели. Поскольку аппаратное обеспечение текстового режима ПК будет постоянно отображать содержимое области памяти в виде символов; DesqView может позволить каждому сеансу иметь свой собственный виртуальный экран, сопоставляя диапазон 0xB8000-0xB9FFF каждого сеанса в свою собственную область ОЗУ и периодически копируя область текущего приложения в буфер физического экрана. Графическая поддержка была намного сложнее, потому что 256K оперативной памяти на табло контролировалось использование 64K адресного пространства, некоторых регистров ввода / вывода и некоторого "интересного" оборудования, которое требовало чтения и записи в определенных последовательностях. В текстовом режиме, когда приложение записывает что-то в текстовый буфер, DesqView может установить флаг, указывающий, что это должно быть скопировано на дисплей на следующем таймере; только первая запись в текстовый буфер в данный момент времени потребует вмешательства DesqView; все остальные будут объединены в следующий таймер галочка.
в отличие от этого, виртуализация графического режима потребует DeskView для ловушки каждой отдельной записи для отображения памяти или регистров ввода-вывода. Учитывая, что это замедлило бы запись в памяти примерно в 100 раз, а графическим программам приходилось писать намного больше данных, чем текстовым программам, виртуализация большинства графических программ в реальном времени была непрактичной. Вместо этого графики обрабатывались с помощью любого приложения, не имеющего переднего плана, которое пыталось сделать графическую паузу, пока она не стала приложение на переднем плане, а затем дает ему полный контроль над экраном. Когда control переключается на другое приложение, DesqView пытается скопировать состояние всех графических регистров, а затем переключиться. При переключении обратно в графическое приложение DesqView восстановит сохраненное состояние.
в некотором смысле, многозадачность неграфических приложений DOS была проще, чем многозадачность приложений Windows, потому что было очень мало общих ресурсов, а приложения не должны взаимодействовать друг с другом. В Windows, напротив, необходимо, чтобы заниматься такими вещами, как буфер обмена, или вероятность того, что одна программа Windows может двигаться таким образом, чтобы скрывать чужие. Windows 95 была первой версией Windows, которая могла бы преодолеть такие ограничения, в том числе такие вещи, как оконной системой, которая может вместить площадь экрана становятся недоступными, а код, пытался привлечь к нему (при том, что чертеж будет в масках).
многозадачность-это не более чем иллюзия одновременного запуска приложений. Это воспринимается как одновременное выполнение на вашем конце, но на самом деле процессы A, B и C разделяют процессорное время в следующем порядке: A, B, C, A, B, C, A, B...они просто включаются и выключаются очень быстро. Никакие два процесса не выполняются одновременно.
Так, совершенно возможно сделать MS-DOS многозадачным путем делать им перерыв один процесс, бежит следующее на короткий период времени, делает паузу то во-первых, вернуться к первому и так далее.
многозадачность-это просто умная функция, разработанная, когда процессоры начали быть достаточно быстрыми, чтобы продолжать вращаться через эти процессы и делать это одновременно для конечного пользователя.
для тех, кто помнит, игры все еще запускались на DOS4GW, потому что Windows была слишком медленной.
несмотря на то, что он может сосредоточиться только на одной задаче, то, что он будет делать это простой шаг быстрого перехода от одного к другому. Таким образом, оказалось, что это многозадачность, но на самом деле его просто фокусировка на 1, затем на другом, затем на другом и т. д.
одна вещь, которую я не видел, что довольно интересно:
Windows 3.0 не была упреждающей многозадачной системой, она была совместной, как и все версии MacOS до OS X-одно приложение должно было вернуться из вызова, прежде чем любое другое приложение могло предпринять какие-либо действия.
как комментатор напомнил мне, однако, DOS-приложения были многозадачными. Это связано с тем, что они не были написаны "совместно" многозадачностью (это всегда должно быть встроено в системы, которые используют она.)
в то время были программы под названием TSRs (Terminate-Stay Resident), которые заняли место современных драйверов устройств. Эти драйверы будут работать независимо-как правило, в собственном потоке, вставляя себя в один из обработчиков событий ОС. Окна вообще не знали о них, они бежали на более низком уровне.
Это не были на самом деле приложения для windows, но они были, как все потоковое активность имела место до windows 3.1, такие как драйверы принтера, com драйверы, п.
хотя windows 3.1 была многозадачной, DOS не был, но Windows 3.1 просто вытолкнула dos с пути и взяла на себя, когда она началась (тогда вы часто запускали windows из командной строки DOS).
хороший вопрос. В MS-DOS ядро было монолитным, то есть выполняло только одну задачу за раз, по сравнению с новым, современным ядром, реализованным в Windows 9x и текущей версии. Вы можете проверить больше здесь.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]