Як багатозадачність можлива у старих версіях Windows?
Враховуючи, що DOS була операційною системою з однозадачею та зв'язками з ранніми версіями Windows, яким чином попередні версії Windows зуміли виконати багатозадачність? Сьогоднішня посада SuperUser Q & A розглядає відповіді на це запитання.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..
Знімок вікна Windows 95 надано Вікіпедією.
Питання
Читач 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-розрядних програм.
Попередньо 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 розширеного режиму буде ділитися відрізками процесорного часу між віртуальними машинами (один з яких працює нормально інші, які керували 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 (дискова операційна система), наскільки мені відомо, не набагато більше, ніж система управління файлами. Він надав файлову систему, механізми навігації файловою системою, кілька інструментів і можливість запускати програми. Це також дозволило деяким програмам залишатися резидентними, тобто драйверами миші та емуляторами EMM. Але він не намагався керувати апаратним забезпеченням комп'ютера так, як це робить сучасний ОС.
*Коли DOS був створений в 1970-х роках, захищений режим не існував у CPU. Це не було до процесора 80286 в середині 1980-х років, що захищений режим став частиною процесора.
Переконайтеся в тому, щоб перейти до початкового потоку та прочитати жваву дискусію на цю тему, використовуючи посилання нижче!
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.