Якщо DOS однозначний, то як було можливо багатозадачність у старій версії Windows?


113

Я читав, що DOS - це одноосібна ОС.

Але якщо старі версії Windows (включаючи Windows 95?) Були лише обгортками DOS, як Windows могла працювати як багатозадачна ОС?


8
Це називається попереджувальним багатозадачністю - support.microsoft.com/kb/117567
joeqwerty

20
Вам доведеться визначити "старе" набагато краще, ніж це. DOS + Windows 9x та DOS + Windows 3.x у "386 Enhanced Mode" були досить різними щодо цього DOS + Windows 3.x / 2.x у "Стандартному режимі" та "Реальному режимі". І як натякає joeqwerty, існувало спільне багатозадачне, а також попереджувальне. Про це написано цілі книги, тому краще конкретизувати питання.
JdeBP

5
@joeqwerty Найдивовижнішим IMO є те, що Microsoft зберігає документацію в Інтернеті про таке антикварне програмне забезпечення. Є навіть статті про розширені теми старіших версій MS-DOS ... Дуже приємно з них, щоб зберегти це в живих.
NothingsImpossible

6
DOS не дає вам багатозадачність. Ви все ще можете писати повністю багатозадачні програми поверх нього без допомоги DOS. Це те, що робить рання Windows. Windows 95, звичайно, не просто «обгортка» для DOS.
Боан

3
@NigelNquande Я насправді виявив, що MS є досить гарним щодо збереження старої документації. Більшість статей, що вийшли у відставку, перебувають в Інтернеті (наприклад, випадкова Windows 3.1 КБ або документи з printутиліти для Windows 2.1-3.0 або ansi.sys з MS-DOS 5.0), навіть після закінчення зазначеного 12-місячного закінчення -життєвий пільговий період. Це не так легко переглядати, як активна документація на продукт, ви, начебто, повинні бути конкретними в пошуку.
Джейсон C

Відповіді:


160

Windows 95

Windows 95 набагато більше, ніж "просто обгортка" для MS-DOS . Цитуючи Реймонда Чена:

MS-DOS виконував дві цілі в Windows 95.

  • Він служив завантажувачем.
  • Він виступав як 16-розрядний застарілий драйвер шару пристрою.

Windows 95 насправді підключив / перекрив майже всі MS-DOS, зберігаючи його як шар сумісності, роблячи весь важкий підйом. Він також реалізував переважне багатозадачність для 32-бітних програм.


Попередній 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 вдосконалений режим?

Примітка. Було кілька коментарів щодо розширеного режиму Windows 3.x 386, який є 32-бітним та підтримує попереджувальну багатозадачність.

Це цікавий випадок. Підсумовуючи пов’язану публікацію блогу , 386 вдосконаленого режиму в основному був 32-розрядним гіпервізором, який керував віртуальними машинами. Всередині однієї з цих віртуальних машин працював стандартний режим Windows 3.x, який виконує всі перераховані вище речі.

MS-DOS також працюватиме у цих віртуальних машинах, і, мабуть, вони були превантивно багатозадачними - тому, схоже, гіпервізор 386 вдосконаленого режиму поділить відрізки часу процесора між віртуальними машинами (одна з яких працює нормально 3.x та інші, на яких працює MS -DOS), і кожен VM зробить свою справу - 3.x буде співпрацювати багатозадачно, тоді як MS-DOS буде однозначним.


MS-DOS

Сам DOS на папері був однозначним, але в ньому була підтримка програм TSR , які залишатимуться у фоновому режимі, доки не призведе апаратне переривання. Далеко від справжнього багатозадачності, але теж не повністю одноосібного.


Все це балакання? Я запитав про багатозадачність!

Ну, строго кажучи, що біт і багатозадачність не залежать один від одного. Повинно бути можливим зверху реалізувати будь-який багатозадачний режим у будь-якій біті. Однак перехід від 16-розрядних процесорів до 32-бітних процесорів також ввів інші функціональні можливості апаратури, які могли б полегшити реалізацію багатозадачності.

Крім того, оскільки 32-бітні програми були новими, легше було змусити їх працювати, коли вони були насильно вимкнені - що, можливо, порушило деякі застарілі 16-бітні програми.

Звичайно, це все міркування. Якщо ви дійсно хочете знати, чому MS не впроваджує попереджувальну багатозадачність у Windows 3.x (не зважаючи на 386 покращеного режиму), вам доведеться запитати когось, хто там працював.

Крім того, я хотів виправити ваше припущення, що Windows 95 був jsut обгорткою для DOS;)


4
Дуже приємна написання. Якщо я правильно пам’ятаю (клас дизайну ОС був для мене багато років тому) Windows 9x підключив таймери-переривання, щоб застосувати власний планувальник, як ви пропонували у другому та останньому абзаці. Крім DOS, були інші ОС, які зробили те саме. Я чітко пам’ятаю це з AMX (ОС у режимі реального часу для промислових застосувань) та XINU (навчальна ціль, невелика Unix / Posix, як ОС), які обидва працювали на вершині DOS. (AMX також міг би запускати голий метал прямо з EPROM. Це було набагато простіше тестувати / налагоджувати при запуску на DOS. Врятувало вас від повторного спалювання EPROMS для кожного тесту.)
Тонні

@Tonny Дякую за підтвердження, що ця схема можлива (і використовується на практиці). Як здогадуєтесь, причина Windows 1-3 не використовувала попереджувальну багатозадачність не стільки, що вони не змогли цього зробити (MS-DOS 4 мав це, хоч і не вийшов), а навпаки, він би порушив зворотну сумісність з DOS програми.
Боб

3
Mmmmhhh З огляду на Windows 1-3: Факт, який є загальною базою коду для 8086 процесорів і вище, може мати більше спільного з цим. Правильна обробка ring0-3 була можлива лише з 80286 і вище, і саме це Win9x використовував для здійснення багатозадачних завдань. 4DOS та інші вже надавали обмежену багатозадачність на DOS (80286 було потрібно, якщо я правильно пам'ятаю). Ви навіть можете запустити Win3 як окремий процес у 4DOS.
Тонні

1
Xinu справді не працювала на вершині DOS. Зрештою, він стартував як операційна система LSI-11. Заява про те, що в DOS + Windows 3.x не було преекспертної багатозадачності, є помилковим. У 386 Покращеному режимі з'явилася люб’язність VMM. І нісенітниця щодо 4DOS отримує вам часто відповідь: 4DOS не є операційною системою . Заяви про те, що він передбачав багатозадачність, є абсолютно помилковими.
JdeBP

2
PDP-8 підтримував переважне багатозадачність, і це був лише 12-розрядний комп'ютер.
david25272

26

Він безперервно запускав одну програму, ту, яку називали windows. Цей розподіляє час процесора (та інші ресурси) між різними програмами.

Розглянемо цю аналогію:

У вас є офіс, який одночасно може мати лише одна людина (Ця людина називається господарем або місісом DOS). Ця людина працює над однією справою в той час. Наприклад, він телефонує на одну людину і починає спілкуватися з нею 24/7.

Тепер ви замінюєте цю особу на пана секретаря. (вікна). Він телефонуватиме комусь і весь час з ним розмовлятиме (все ще одне завдання). Потім через деякий час інша людина скаже: "Я вже досить розмовляв. Ідіть, поговоріть з кимось іншим і передзвоніть мені трохи".

Пан секретар зателефонує іншій особі. Спілкуйтеся з цим, поки ця людина не скаже те саме. Потім він зателефонує наступній особі, поки вона не буде в кінці списку людей, з якими потрібно поговорити. В цей час воно почнеться знову вгорі.

  • У технічному плані це називається кооперативним багатозадачністю. Інша людина вимагає сказати, що у нього було достатньо часу для процесора. Якщо цього не робити, то все розпадається.
  • Сучасні системи набагато розумніші. Включаючи переважне багатозадачність. Подумайте, як секретар встановить будильник і відрізає іншу людину через 5 хвилин. "Це приємна Джейн. Але я повинен зараз поговорити з Джо. Я передзвоню тобі трохи. - Клацніть".

Якщо додати кілька процесорів, це стає ще складніше. :)


1
Ви не маєте на увазі кооперативну / непередбачувану багатозадачність у першому пункті? Крім того, що цікаво, Windows 95 запровадила попереджувальну багатозадачність для 32-бітних програм. Це не стільки обгортка для DOS, як ОС, яка використовувала DOS як завантажувач, але замінила основні частини (зберігаючи достатньо для підтримки програм 16-біт / DOS).
Боб

містер або міси, чому б не "Dr." DOS?
gtrak

1
"Він постійно запускав одну програму ... Ця розподіляла час процесора (та інші ресурси) між різними програмами." не можна цього сказати про будь-яку операційну систему? Хоча питання передбачає, що MS-DOS не міг. Я категорично проти аналогій / метафор при використанні технічних деталей технології. Гаразд, тепер ми знаємо, як працює якийсь гіпотетичний офіс? Це насправді не пояснює відповідь на питання.
Селерітас

13

У сучасній операційній системі операційна система контролює всі апаратні ресурси, а запущені програми зберігаються в пісочницях. Додаток не має доступу до пам'яті, яку ОС не виділив цій програмі, і він не може безпосередньо отримати доступ до апаратних пристроїв на комп'ютері. Якщо потрібен апаратний доступ, програма повинна спілкуватися через драйвери пристроїв.

ОС може застосувати цей контроль, оскільки він змушує процесор перейти в захищений режим .

DOS, з іншого боку, ніколи не переходить у захищений режим, а залишається в реальному режимі *. У реальному режимі запущені програми можуть виконувати все, що хочеться, наприклад, безпосередньо отримувати доступ до обладнання. Але програма, що працює в реальному режимі, також може сказати процесору перейти в захищений режим.

І ця остання частина дозволяє таким програмам, як Windows 95, запускати багатопотокове середовище, навіть якщо вони були запущені з DOS.

DOS (дискова операційна система) була, afaik, не набагато більше, ніж система управління файлами. Він надав файлову систему, механізми навігації по файловій системі, кілька інструментів та можливість запуску програм. Це також дозволило деяким програмам залишатися резидентами, наприклад, драйвери миші та емулятори EMM. Але він не намагався керувати обладнанням у комп’ютері так, як це робить сучасна ОС.

* Коли DOS вперше був створений у 70-х, захищений режим не існував у процесорі. Лише процесор 80286 в середині 80-х захищений режим став частиною процесора.


2
Зверніть увагу, що на той час у процесорів не було таких речей, як захищений режим.
jwenting

1
@jwenting - хороший момент, я додав до цього записку
Піт

6

До Windows 3.x, яка була першою версією багатозадачних додатків DOS, існували такі програми, як DesqView, які могли робити те саме. Якби наприклад було запущено три сесії DOS одночасно, DesqView створив би чотири віртуальні машини. Кожні три сесії DOS вважають, що вони "володіють" цілою машиною, за винятком того, що жодна з них насправді не виконує введення / виведення файлів. Натомість версія DOS, що працює в кожному сеансі, буде виправлена, щоб вона пересилала будь-які запити на введення / виведення файлів на спеціальний сеанс, який був призначений для цієї мети. Оскільки апаратне забезпечення в текстовому режимі ПК постійно відображатиме вміст області пам'яті як символи; DesqView може дозволити кожному сеансу мати власний віртуальний екран, зіставляючи діапазон 0xB8000-0xB9FFF кожного сеансу до власної області ОЗУ, і періодично копіювати область поточної програми у фізичний буфер екрану. Графічна підтримка виявилася набагато складніше, тому що 256K оперативної пам’яті на дошці дисплея контролювались за допомогою 64К адресного простору, деяких регістрів вводу / виводу, а також деякого «цікавого» обладнання, яке вимагало прочитати та записати речі у певних певних послідовностях. У текстовому режимі, коли програма записувала щось до текстового буфера, DesqView може встановити прапор із зазначенням, що його слід скопіювати на дисплей наступного галочки таймера; тільки перше записування в текстовий буфер у вказаний момент часу вимагатиме втручання DesqView; всі інші будуть консолідовані до наступної галочки таймера. оскільки 256K оперативної пам’яті на дошці дисплея контролювались за допомогою 64K адресного простору, деяких регістрів вводу-виводу та деякого «цікавого» обладнання, яке вимагало, щоб речі були прочитані та записані у певних певних послідовностях. У текстовому режимі, коли програма записувала щось до текстового буфера, DesqView може встановити прапор із зазначенням, що його слід скопіювати на дисплей наступного галочки таймера; тільки перше записування в текстовий буфер у вказаний момент часу вимагатиме втручання DesqView; всі інші будуть консолідовані до наступної галочки таймера. оскільки 256K оперативної пам’яті на дошці дисплея контролювались за допомогою 64K адресного простору, деяких регістрів вводу-виводу та деякого «цікавого» обладнання, яке вимагало, щоб речі були прочитані та записані у певних певних послідовностях. У текстовому режимі, коли програма записувала щось до текстового буфера, DesqView може встановити прапор із зазначенням, що його слід скопіювати на дисплей наступного галочки таймера; тільки перше записування в текстовий буфер у вказаний момент часу вимагатиме втручання DesqView; всі інші будуть консолідовані до наступної галочки таймера. DesqView може встановити прапор із зазначенням, що його слід скопіювати на дисплей наступного галочки таймера; тільки перше записування в текстовий буфер у вказаний момент часу вимагатиме втручання DesqView; всі інші будуть консолідовані до наступної галочки таймера. DesqView може встановити прапор із зазначенням, що його слід скопіювати на дисплей наступного галочки таймера; тільки перше записування в текстовий буфер у вказаний момент часу вимагатиме втручання DesqView; всі інші будуть консолідовані до наступної галочки таймера.

Навпаки, віртуалізація графічного режиму вимагатиме від DeskView, щоб утримувати кожну окрему запис для відображення пам'яті або регістрів вводу / виводу. Зважаючи на те, що це сповільнить запис пам'яті на коефіцієнт приблизно 100, а графічні програми повинні були записати набагато більше даних, ніж текстові програми, віртуалізація більшості графічних програм в реальному часі не була практичною. Натомість графікою обробляється будь-яка програма, яка не виходить на передній план, яка намагалася робити графіку паузами, поки вона не стала додатком переднього плану, а потім надала їй повний контроль над екраном. Коли управління переключилося на інший додаток, DesqView спробує зробити копію стану всіх графічних регістрів, а потім переключитися. Після повернення до графічного додатку DesqView відновить збережений стан.

Певним чином, багатозадачні не графічні програми DOS були простішими, ніж багатозадачні програми Windows, оскільки спільних ресурсів було дуже мало, і додатки не повинні взаємодіяти один з одним. У Windows, навпаки, потрібно мати справу з такими речами, як буфер обміну, або ймовірність того, що вікна однієї програми можуть рухатися таким чином, щоб затемнювати інші. Windows 95 була першою версією Windows, яка могла подолати такі обмеження, включивши такі речі, як віконна система, яка могла б забезпечити недоступність області екрана, в той час як код намагався залучити до цього (з тим, що малюнок маскується ).


Дякуємо, що нагадали про DesqView. Я використовував його весь час, але зовсім забув про нього.
Еммет

3

Багатозадачність - це не що інше, як ілюзія одночасного запуску програм. Це сприймається як одночасне виконання на вашому кінці, але насправді процеси A, B і C ділять час процесора в такому порядку: A, B, C, A, B, C, A, B ... вони просто включаються і дуже швидко. Жоден процес не працює одночасно.

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

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

Для тих, хто пам’ятає, ігри все ще проводили на DOS4GW, оскільки Windows був занадто повільним.


1
і здебільшого, це все ще працює в операційних системах донині. Ось чому, наприклад, ви можете виконати 10 речей "одночасно" на чотирьох основних ядрах.
jwenting

2
Дійсно, що "процесори почали працювати досить швидко". Можна було запустити багатокористувацькі багатозадачні операційні системи на 286 (наприклад, Когерентна компанія The Mark Williams , чудова ОС, введена в ПК у 1983 році). Версії MS-DOS та Windows (не NT) до "Millenium" справді були жорстокими будь-якими об'єктивними стандартами, навіть технічними стандартами того часу, але як тільки MS-DOS був встановлений як стандарт для персональних комп'ютерів, Маркетинг та імпульс Microsoft (не кажучи вже про злочинні зловживання їх монопольною владою) фактично дуже довго виключали кращу конкуренцію.
Еммет

2
"Багатозадачність - це просто розумна функція, розроблена, коли процесори почали працювати досить швидко ..." Ви маєте на увазі, як комп'ютер керівництва Apollo був багатозадачним дизайном ?
CVn

1
Коли я говорив "процесори", я мав на увазі серійні, а коли "багатозадачний", то мав на увазі багатозадачність програм для ПК. І, нарешті, під кінцевим користувачем я мав на увазі дитину за ПК, а не космонавта. Все-таки, кудо за цікавий коментар.
Дан Хорват

0

Незважаючи на те, що він може зосередитись лише на одному завданні, те, що вона зробить, - це простий крок швидкого переходу від однієї до іншої. Таким чином виявилося, що це багатозадачність, але насправді його просто зосередження на 1, потім на іншому, потім на іншому тощо.


Ви поєднуєте багатозадачність з багатопроцесорними обчисленнями там. В комп'ютерному світі перехід між декількома завданнями відбувається дуже багато завдань. Звичайне визначення не вимагає паралельного виконання. Різні "старі версії Windows" виконували багатозадачність по-різному, залежно від того, в якій версії Windows, в якому режимі він працював і чи в першу чергу це навіть DOS. (Windows NT 3.1 старший за DOS + Windows 95 і міг би зробити SMP.) Як я зазначив в іншому коментарі, про це написано цілі книги. Це насправді не найкращий підсумок 2 речень.
JdeBP

@JdeBP ... Я знаю різницю між багатозадачністю та багатопроцесором, оскільки в основному я все ще використовую одноядерні процесори! Комп'ютери працюють серійно. Справжню паралель ми побачимо лише у квантових обчисленнях.
Thoth

0

Одне, що я не бачив тут, що було цікавим:

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

Як нагадав мені коментатор, додатки DOS були багатозадачними. Це тому, що вони не були написані на багатозадачне завдання "Співпраця" (Це завжди має бути вбудовано в системи, які його використовують).

У той час існували програми під назвою TSR (Terminate-Stay Resident), які займали місце сьогоднішніх драйверів пристроїв. Ці драйвери працюватимуть незалежно - як правило, за власним потоком, вставляючи себе в один із обробників подій ОС. Windows взагалі про них не знала, вони працювали на нижчому рівні.

Це насправді не були програми для Windows, але вони проходили як все потоки дій перед Windows 3.1, такі як драйвери принтера, драйвери ком і т.д.

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


Windows 3.0 підтримує вигідне багатозадачність програм DOS під час роботи на процесорі 386 або вище. Тільки додатки для Windows були багатозадачні.
Жуль

О, це правильно - я тоді кодував програми для Windows і не дуже думав про DOS. Це стосувалося додатків DOS по-різному - дякую, що вказали на це.
Білл К

-8

Гарне питання. У MS-DOS ядро ​​було монолітним, це означає, що він обробляв лише одне завдання за один раз порівняно з новим сучасним ядром, реалізованим у Windows 9x та поточній версії. Дізнатися більше можна тут .


11
-1 ви припускаєте, що монотитна ОС не може багатозадачність - це мертво неправильно. linux - НАЙЧАСНЕ монотитне ядро ​​(була відома дискусія між linus torvalds та andrew tanenbaum), але Linux, очевидно, може бути багатозадачним. ось посилання , щоб показати вам Linux є монолітною stackoverflow.com/questions/1806585 / ...
barlop

4
Моноліт не означає те, що ви думаєте, що це робить.
Thorbjørn Ravn Andersen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.