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

23258
Arkonix

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

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

114
Это называется упреждающей многозадачностью - http://support.microsoft.com/kb/117567 joeqwerty 10 лет назад 8
Вы должны будете определить «старый» намного лучше, чем это. DOS + Windows 9x и DOS + Windows 3.x в «386 расширенном режиме» в этом отношении сильно отличались от DOS + Windows 3.x / 2.x в «Стандартном режиме» и «Реальном режиме». И, как намекает joeqwerty, было многозадачность, а также упреждающая кооперация. Об этом написаны целые книги, поэтому конкретный вопрос лучше. JdeBP 10 лет назад 20
@joeqwerty Самое удивительное ИМО в том, что Microsoft хранит документацию онлайн о столь старинном программном обеспечении. Есть даже статьи на расширенные темы о старых версиях MS-DOS ... Очень мило с их стороны, чтобы сохранить это. NothingsImpossible 10 лет назад 5
@NothingsImpossible Ты саркастичен? (Я не могу сказать.) Если нет, не могли бы вы предоставить ссылку (даже если это поиск в Google)? Я был бы очень благодарен. Agi Hammerthief 10 лет назад 0
@NigelNquande Он говорит о первом комментарии от joeqwerty. Bob 10 лет назад 0
DOS не дает вам многозадачности. Вы все еще можете писать полностью многозадачные программы без помощи DOS, как это делали ранние версии Windows. Windows 95, безусловно, не просто «обертка» для DOS. Boann 10 лет назад 6
@NigelNquande Привет! Я не был саркастичным, извините, если это звучало так. Например, вот статья о разбиении дисков в MS-DOS http://support.microsoft.com/kb/69912/en-us NothingsImpossible 10 лет назад 2
Не беспокойся, @NothingsImpossible; Просто, по моему опыту, у Microsoft есть досадная тенденция удалять любую документацию о любой их ОС (DOS-2000), которая не является одной из последних версий (XP и далее), поэтому я был удивлен, что любая документация об античном Программное обеспечение существует на их сайте. Спасибо, что ответили мне на этот вопрос. Agi Hammerthief 10 лет назад 0
@NigelNquande Я действительно обнаружил, что MS неплохо справляется со старой документацией. Большинство их статей в КБ, вышедших на пенсию, находятся в сети (например, случайная [Windows 3.1 KB] (http://support.microsoft.com/kb/93363) или документы по [утилите `` печати`] (http: // support.microsoft.com/kb/58143) для Windows 2.1-3.0 или [ansi.sys] (http://support.microsoft.com/kb/74578/en-us) из MS-DOS 5.0), даже после их заявленный 12-месячный льготный период окончания срока службы. Это просто не так легко просматривать, как активная документация по продукту, вы должны быть конкретны в своих поисках. Jason C 10 лет назад 3
Связанный: http://superuser.com/questions/496099/was-windows-95-an-operating-system shantnu 10 лет назад 0
На самом деле Microsoft утверждала, что MS-DOS является многозадачной, поскольку она может выполнять задание печати в фоновом режиме. liftarn 10 лет назад 0
@SVilcans MS DOS была многозадачной, но задачи не могли выполняться параллельно. Операционная система может планировать задачи, предоставляя каждому временный интервал, но не может контролировать несколько процессоров одновременно. jwenting 10 лет назад 0
@jwenting - я почти уверен, что стандартная MS-DOS не была * многозадачной в обычном смысле этого слова. Я не знаю ни одного случая, когда MS-DOS чередовал временные интервалы нескольких задач, если только вы не подсчитали трюки с помощью программ TSR (Terminate and Stay Resident), использующих прерывание по таймеру (а те в основном реализовывали бы многозадачность поверх DOS, а не используя любую поддержку многозадачности, встроенную в DOS). antinome 10 лет назад 3
@joeqwerty DOS (и Windows, по крайней мере до Win95) наиболее определенно были * не * [превентивно многозадачными] (https://en.wikipedia.org/wiki/Preemptive_multitasking#Preemptive_multitasking) сред. Сама DOS не была многозадачной, хотя, как указывает Антином, можно было сделать некоторую хитрость, чтобы создать впечатление, что вы выполняете многозадачность. a CVn 10 лет назад 2
@ MichaelKjörling - ОП спросил, как `Windows`, включая` Windows 95`, справляются с многозадачностью. Я связался со статьей TechNet, которая объяснила это. Статья прямо из уст лошадей, если хотите, поэтому я склонен сказать, что Windows 95 «действительно» использовала упреждающую многозадачность. joeqwerty 10 лет назад 0
@joeqwerty Я думаю, это зависит от вашего определения «старых версий Windows». Я начал всерьез использовать компьютеры в конце 1980-х годов, еще до того, как появилась Windows 3.0, и в то время, когда i386 стал доступен, а в статье, которую вы связали, только говорится, что Windows 95 использует вытесняющую многозадачность для 32-битных процессов. ** Смысл моего комментария ** заключался в том, что "как Windows может работать как многозадачная ОС?" не отвечает ваш первоначальный комментарий "Это называется вытесняющей многозадачностью". a CVn 10 лет назад 0

8 ответов на вопрос

161
Bob

Windows 95

Windows 95 was far more than "just a wrapper" for MS-DOS. Quoting Raymond Chen:

MS-DOS served two purposes in Windows 95.

  • It served as the boot loader.
  • It acted as the 16-bit legacy device driver layer.

Windows 95 actually hooked/overrode just about all of MS-DOS, keeping it as a compatibility layer while doing all the heavy lifting itself. It also implemented preemptive multitasking for 32-bit programs.


Pre-Windows 95

Windows 3.x and older were mostly 16-bit (with the exception of Win32s, a kinda compatibility layer that bridges 16 and 32, but we'll ignore that here), were more dependent on DOS, and used only cooperative multitasking - that's the one where they don't force a running program to switch out; they wait for the running program to yield control (basically, say "I'm done" by telling the OS to run the next program that's waiting).

Multitasking was cooperative, just like in old versions of MacOS (though unlike Multitasking DOS 4.x, which sported preemptive multitasking). A task had to yield to the OS in order to schedule a different task. The yields were built into certain API calls, notably message processing. As long as a task processed messages in a timely manner, everything was great. If a task stopped processing messages and was busy executing some processing loop, multitasking was no more.

Windows 3.x architecture

As for how early Windows programs would yield control:

Windows 3.1 uses cooperative multitasking - meaning that each application that is in the process of running is instructed to periodically check a message queue to find out if any other application is asking for use of the CPU and, if so, to yield control to that application. However, many Windows 3.1 applications would check the message queue only infrequently, or not at all, and monopolize control of the CPU for as much time as they required. A preemptive multitasking system like Windows 95 will take CPU control away from a running application and distribute it to those that have a higher priority based on the system's needs.

source

All DOS would see is this single application (Windows or other) running, which would pass control around without exiting. In theory, preemptive multitasking can possibly be implemented on top of DOS anyway with the use of a real-time clock and hardware interrupts to forcibly give control to the scheduler. As Tonny comments, this was actually done by some OSes running on top of DOS.

386 enhanced mode?

Note: there have been some comments on 386 enhanced mode of Windows 3.x being 32-bit, and supporting preemptive multitasking.

This is an interesting case. To summarise the linked blog post, 386 enhanced mode was basically a 32-bit hypervisor, which ran virtual machines. Inside one of those virtual machines ran Windows 3.x standard mode, which does all the stuff listed above.

MS-DOS would also run inside those virtual machines, and apparently they were preemptively multitasked - so it seems that the 386 enhanced mode hypervisor will share CPU time slices between the virtual machines (one of which ran normal 3.x and others which ran MS-DOS), and each VM will do its own thing - 3.x would cooperatively multitask, while MS-DOS would be single-tasked.


MS-DOS

DOS itself was single-tasking on paper, but it did have support for TSR programs, that would stay in the background until triggered by a hardware interrupt. Far from true multitasking, but not fully single-tasked either.


All this talk of bit-ness? I asked about multitasking!

Well, strictly speaking the bit-ness and multitasking are not dependent on each other. It should be possible top implement any multitasking mode in any bit-ness. However, the move from 16-bit processors to 32-bit processors also introduced other hardware functionality that could have made preemptive multitasking easier to implement.

Also, since 32-bit programs were new, it was easier to get them to work when they're forcibly switched out - which might have broken some legacy 16-bit programs.

Of course, this is all speculation. If you really want to know why MS didn't implement preemptive multitasking in Windows 3.x (386 enhanced mode notwithstanding), you'll have to ask someone who worked there.

Also, I wanted to correct your assumption that Windows 95 was jsut a wrapper for DOS ;)

Очень хорошая рецензия. Если я правильно помню (класс разработки ОС был для меня много лет назад), Windows 9x перехватила прерывания по таймеру, чтобы задействовать свой собственный планировщик, как вы предложили в своем втором-последнем абзаце. Были и другие ОС поверх DOS, которые делали то же самое. Я хорошо помню это из AMX (ОС реального времени для промышленных приложений) и XINU (образовательная ОС для небольших Unix / Posix-подобных ОС), которые работали поверх DOS. (AMX может запускать «голое железо» прямо из EPROM. Было намного проще тестировать / отлаживать при запуске в DOS. Это избавило вас от повторного запуска EPROMS для каждого теста.) Tonny 10 лет назад 4
@ Тонни Спасибо за подтверждение того, что эта схема возможна (и используется на практике). Можно предположить, что причина того, что Windows 1-3 не использовала вытесняющую многозадачность, заключается не столько в том, что они не смогли этого сделать (она была в MS-DOS 4, хотя и не была выпущена), но скорее всего, это нарушило бы обратную совместимость с DOS. программы. Bob 10 лет назад 0
Mmmmhhh Рассматривая Windows 1-3: тот факт, что это была общая кодовая база для процессоров 8086 и выше, возможно, имел больше общего с этим. Правильная обработка ring0-3 была возможна только с 80286 и выше, и это было то, что Win9x использовал для реализации многозадачности. 4DOS и другие уже предоставили ограниченную многозадачность для DOS (80286 было необходимо, если я правильно помню). Вы даже можете запустить Win3 как отдельный процесс в 4DOS. Tonny 10 лет назад 3
Таким образом, с точки зрения DOS было запущено только 1 приложение - Windows, которая «содержала» другие приложения win 3.x и управляла их параллельным выполнением на основе совместной многозадачности (добровольное получение)? Можно ли сказать, что в этом случае параллелизм был выполнен потоками пользовательского уровня? Arkonix 10 лет назад 0
Xinu действительно ** не ** работал на вершине DOS. В конце концов, все началось с операционной системы LSI-11. Утверждение, что в DOS + Windows 3.x не было приоритетной многозадачности, неверно. В 386 Enhanced Mode было предоставлено VMM. И бессмыслица о 4DOS дает вам часто задаваемый ответ: [4DOS не является операционной системой] (http://homepage.ntlworld.com./jonathan.deboynepollard/FGA/4dos-is-not-an-operating-system. HTML). Заявления о том, что это обеспечило многозадачность, совершенно неверны. JdeBP 10 лет назад 1
@Tonny [MS-DOS 4.0] (http://blogs.msdn.com/b/larryosterman/archive/2004/03/22/94209.aspx) имел многозадачность с упреждающим действием и, очевидно, работал на 8086 (?). Обратите внимание, что MS-DOS 4.0 - это не то же самое, что [4DOS] (http://en.wikipedia.org/wiki/4DOS). Bob 10 лет назад 0
@JdeBP С другой стороны, [MS-DOS 4.0] (http://blogs.msdn.com/b/larryosterman/archive/2004/03/22/94209.aspx) (в отличие от 4DOS) была многозадачной ОПЕРАЦИОННЫЕ СИСТЕМЫ. Не могли бы вы рассказать о преимущественной многозадачности в 3.x? Возможно, предоставьте свой собственный ответ (из источника?) Я признаю, что я не очень знаком с внутренностями этих ОС, и есть большая вероятность, что большая часть моего ответа неверна - если так, пожалуйста, поправьте меня! Bob 10 лет назад 0
* «Windows 3.x и старше были чисто 16-битными» *, там * чисто * неправильно! Проверьте [win32s] (http://en.wikipedia.org/wiki/Win32s), и даже без этого * в расширенном режиме 386 * было около 32-битных компонентов, по крайней мере, драйверы дисков для повышения производительности ввода-вывода. hyde 10 лет назад 0
Кажется, @hyde Win32s - исключение, хотя, по-видимому, оно все равно не было частью основной ОС. Что касается расширенного режима 386, он просто [запустил копию стандартного 3.x] (http://blogs.msdn.com/b/oldnewthing/archive/2010/05/17/10013609.aspx) в виртуальной машине и все приложения все еще работали в 16-битном режиме в 16-битной Windows. Фактически это был 32-битный гипервизор. Впрочем, я отредактирую эту информацию - спасибо, что заставили меня ее найти;) Bob 10 лет назад 0
@Bob Да, но этого достаточно, чтобы ошибочно сказать, что он был * чисто * 16-битным. И эти дополнительные 32-битные части действительно улучшили некоторые вещи, и (глядя на википедию) на самом деле требовались некоторыми известными приложениями. hyde 10 лет назад 0
@hyde Правда, возможно, моя формулировка была немного сильной. Исправлена. Bob 10 лет назад 0
В 286 (16-разрядном процессоре) появился защищенный режим, а вместе с ним - практически все функции, которые делают упреждающую многозадачность полезной. Но защищенный режим был почти полностью несовместим с DOS в то время (многие предположения о сегментах в реальном режиме не сохраняются в защищенном режиме без большого количества хакерских атак), и переключение обратно в реальный режим на 286 требовало перезагрузки ЦП. cHao 10 лет назад 0
PDP-8 поддерживал упреждающую многозадачность, и это был только 12-битный компьютер. david25272 10 лет назад 2
Я бы не назвал это гипервизором, поскольку это подразумевало бы полную виртуализацию машины. Windows 95 могла виртуализировать адресное пространство процессов и некоторые операции ввода-вывода, но виртуализация не была завершена. david25272 10 лет назад 0
@ david25272: Практически любой процессор «поддерживает» вытесняющую многозадачность; все, что требуется, - это возможность хранить и загружать регистры, а также поддержка аппаратных прерываний. Но без возможности защитить процессы друг от друга, это больше проблем, чем стоит - это в основном только наполовину поточность со всеми вытекающими проблемами. Что касается PDP-8, никому нет до этого дела. :) Это совершенно не имеет значения, будучи не машиной DOS или Windows. cHao 10 лет назад 0
@cHao: Проблема не столько в предположениях программиста 8086 о сегментах, сколько в предположениях дизайнеров 80286 о том, как будут использоваться сегменты. Проект 80286 действительно хорошо работает только в том случае, если имеется относительно небольшое количество пулов памяти, каждый размером 64 КБ, из которых выделяются объекты, и объекты могут быть помещены в пулы памяти в зависимости от их назначения, так что все объекты для любой данной цели проживать в одном бассейне. 8086, напротив, может эффективно работать с огромным количеством маленьких сегментов; некоторые приложения могут ... supercat 10 лет назад 0
... использовать более четкие сегменты, чем дескриптор сегмента 80286 (ограничено 16 384 записями). Разрешение каждому объекту находиться в своем собственном сегменте означает, что приложениям не нужно беспокоиться о неловком поведении, которое может иметь место, например, рядом с адресами памяти, кратными 65 536 байтам. Напротив, если приложение создает тридцать два сегмента по 32 КБ, это будет эффективно создавать границу каждые 32 КБ, которую объекты не могут легко перекинуть. supercat 10 лет назад 0
@cHao - я только что прокомментировал, что функции ЦП (например, возможность перехвата инструкций по управлению памятью), которые (как вы указываете), делают упреждающую многозадачность полезной, существовали задолго до 32-битных ЦП. PDP-8 был просто примером раннего процессора, который имел эти функции. david25272 10 лет назад 0
@ david25272: Ааа. По какой-то причине я закончил тем, что читал что-то вроде: «Вы, наркоманы x86, думаете, что все изобрели». :) cHao 10 лет назад 0
@supercat: * проблема * в том, как работает существующий код в реальном режиме с предполагаемыми сегментами. Чтобы уточнить, я не имею в виду «предполагать» как плохую вещь - вполне допустимо предполагать, что сегменты работают так же, как в 8086, когда операционная система, для которой вы пишете, в основном использует процессор как причудливый 8086. Но защищенный режим не может поддержать все эти предположения и все же расширить адресное пространство. Даже сегодня он все еще не может - виртуальный режим 8086 просто эмулирует реальный режим со связанными с ним ограничениями (и еще несколькими, связанными с обоснованием защищенного режима в первую очередь). cHao 10 лет назад 0
@cHao: защищенный режим мог бы расширить адресное пространство при сохранении значительной совместимости, если бы 16-битные регистры сегментов были разделены на ~ 3-битный «селектор» и 13-битное масштабированное смещение. Аппаратный адрес будет вычисляться путем смещения 13-битного «масштабированного смещения» на одну из 8 настраиваемых величин, добавления одного из 8 настраиваемых базовых значений и последующего добавления 16-битного смещения. Режим мог бы быть полностью совместим с большинством кодов реального режима ПК, если бы все сегменты, кроме 0xC000-0xDFFF, были настроены на 4-битное масштабирование и располагались на расстоянии 128 Кбайт. supercat 10 лет назад 0
@cHao: такую ​​архитектуру я бы хотел увидеть на современных компьютерах (хотя, вероятно, использую сегментные регистры 4 + 28 или 5 + 27). Такой дизайн позволил бы такой среде, как JVM или .NET, получить доступ к сотням гигабайт памяти при использовании 32-битных, а не 64-битных ссылок на объекты, что повысило производительность кэша. supercat 10 лет назад 0
26
Hennes

It continuously ran a single program, the one called windows. That one spread the CPU time (and other resources) between different programs.

Consider this analogy:

You have an office which can only have one person at the time (That person is called mister or missus DOS). That person works on one thing at the time. E.g. it phones a single person and starts to chat 24/7 with him/her.

Now you replace that person with Mr. secretary. (windows). It will phone someone and talk all the time with it (still a single task). Then after some time the other person will say "I have talked enough for now. Go talk to someone else and call me back in a bit".

Mr. secretary will call the other person. Chat with that one until that person says the same thing. Then it will call the next person until it is at the end of the list of people to speak with. At that time it will begin again at the top.

  • In technical terms this is called cooperative multitasking. It requires the other person to say that he/she had enough CPU time. If one does not do that then all falls apart.
  • Modern systems are much smarter. Including pre-emptive multitasking. Think of the secretary setting an alarm clock and cutting the other person off after 5 minutes. "That is nice Jane. But I have to talk to Joe now. I'll call you back in a bit. - Click."

If you add multiple processors it gets even more complicated. :)

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

In a modern operating system, the operating system controls all hardware resources, and running applications are kept in sandboxes. An application is not permitted to access memory that the OS has not allocated to that application, and it cannot directly access hardware devices in the computer. If hardware access is required, the application must communicate through device drivers.

The OS can enforce this control, because it forces the CPU to enter protected mode.

DOS, on the other hand, never enters protected mode, but stays in real mode *. In real mode, the running applications can perform anything that it wants to, e.g. access hardware directly. But an application running in real mode can also tell the CPU to enter protected mode.

And this last part allows applications like Windows 95 to start a multi threaded environment even though they were basically launched from DOS.

DOS (Disk Operating System) was, afaik, not much more than file management system. It provided a file system, mechanisms for navigating the file system, a few tools, and the possibility to launch applications. It did also allow for some applications to stay resident, e.g. mouse drivers and EMM emulators. But it did not attempt to control the hardware in the computer the way a modern OS does.

* When DOS was first created in the 70's, protected mode did not exist in the CPU. It wasn't until the 80286 processor in the mid 80's that protected mode became part of the CPU.

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

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

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

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

Спасибо, что напомнили мне о DesqView. Я использовал его все время, но полностью забыл об этом. Emmet 10 лет назад 0
3
Dan Horvat

Multitasking is nothing more than an illusion of running applications simultaneously. It is perceived as simultaneous execution on your end, but in fact processes A, B and C are sharing CPU time in this order: A, B, C, A, B, C, A, B...they just switch on and off very quickly. No two processes are actually running at the same time.

So, it is perfectly possible to make MS-DOS multitask by making it pause one process, run the next for a short period of time, pause that one, jump back to the first one, and so on.

Multitasking is just a clever feature developed when CPUs started being fast enough to keep rotating through these processes and making it seem simultaneous to the end user.

For those who remember, games were still being ran on DOS4GW because Windows was just too slow.

и по большей части, это все еще, как вещи работают в операционных системах и по сей день. Вот почему вы можете запускать 10 вещей "одновременно" на 4-ядерном процессоре, например. jwenting 10 лет назад 1
Дело не в том, что «процессоры стали достаточно быстрыми». На 286 можно было запускать многопользовательские многозадачные операционные системы (такие как «Согласованная» * The Mark Williams Company, прекрасная ОС, представленная на ПК в 1983 году). Версии MS-DOS и Windows (не NT) вплоть до (включая «Миллениум») действительно были ужасны для любого объективного стандарта, даже для технических стандартов того времени, но как только MS-DOS была установлена ​​IBM как стандарт для ПК, Маркетинг и импульс Microsoft (не говоря уже о криминальном злоупотреблении их монопольным влиянием) эффективно исключали лучшую конкуренцию на очень долгое время. Emmet 10 лет назад 2
* «Многозадачность - это просто умная функция, разработанная, когда процессоры стали достаточно быстрыми ...» * Вы имеете в виду, как [Управляющий компьютер Apollo был многозадачным проектом] (https://en.wikipedia.org/wiki/Apollo_Guidance_Computer #Программного обеспечения)? a CVn 10 лет назад 2
Когда я говорил «процессоры», я имел в виду массовые, а когда я говорил «многозадачность», я имел в виду многозадачность приложений для ПК. И, наконец, под «конечным пользователем» я имел в виду ребенка за ПК, а не космонавта. Тем не менее, слава за интересный комментарий. Dan Horvat 10 лет назад 1
0
Thoth

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

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

One thing I didn't see mentioned here that is kind of interesting:

Windows 3.0 was not a pre-emptive multitasking system it was cooperative like all the versions of MacOS up until OS X--One app had to return from a call before any other app could take any action.

As a commenter reminded me however, DOS apps were mult-tasked. This is because they weren't written to "Cooperatively" multi-task (This must always be built into systems that use it).

At the time there were programs called TSRs (Terminate-Stay Resident) that took the place of today's device drivers. These drivers would run independantly--generally on their own thread by inserting themselves in one of the OS's event handlers. Windows didn't generally know about them, they ran at a lower level.

These weren't really windows apps, but they were how all threading activity took place before windows 3.1 such as printer drivers, com drivers, etc.

Although windows 3.1 was multi-tasking, DOS wasn't, but Windows 3.1 just pushed dos out of the way and took over when it started (Back then you often started windows from a DOS prompt).

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

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

-1 Вы предполагаете, что монотонная ОС не может работать в многозадачном режиме - это совершенно неправильно. linux - ЗНАКОМНОЕ монотитное ядро ​​(между Линусом Торвальдсом и Эндрю Таненбаумом были знаменитые дебаты), но linux, очевидно, может быть многозадачным. вот ссылка, чтобы показать вам, что Linux является монолитным http://stackoverflow.com/questions/1806585/why-is-linux-called-a-monolithic-kernel barlop 10 лет назад 11
Монолитный не означает, что вы думаете, что он делает. Thorbjørn Ravn Andersen 10 лет назад 4