Как е възможно Multi-Tasking в по-стари версии на Windows?
Като се има предвид, че DOS е еднозадачна операционна система и връзките, които тя имаше с ранните версии на Windows, точно как по-ранните версии на Windows успяват да постигнат многозадачност? Днешната публикация за въпроси и отговори SuperUser разглежда отговорите на този въпрос.
Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на 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 (макар и за разлика от Multi-tasking 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 е просто обвивка за DOS.
Следван от отговора на Пит:
В модерна операционна система операционната система контролира всички хардуерни ресурси, а стартираните приложения се съхраняват в пясъчници. На приложение не се разрешава достъп до паметта, която операционната система не е присвоила на това приложение, и не може да има пряк достъп до хардуерни устройства в компютъра. Ако се изисква хардуерен достъп, приложението трябва да комуникира чрез драйвери на устройства.
Операционната система може да наложи този контрол, защото принуждава процесора да влезе в защитен режим.
DOS, от друга страна, никога не влиза в защитен режим, а остава в реален режим (*виж отдолу). В реален режим работещите приложения могат да изпълняват всичко, което искат, т.е. да получават достъп до хардуера директно. Но едно приложение, работещо в реален режим, може също да каже на CPU да влезе в защитен режим.
И тази последна част позволява на приложения като Windows 95 да започнат многопоточна среда, въпреки че те са били стартирани основно от DOS.
Доколкото знам, DOS (Disk Operating System) не беше нещо повече от система за управление на файлове. Той предоставяше файлова система, механизми за навигиране на файловата система, няколко инструмента и възможност за стартиране на приложения. Той също така позволява някои приложения да останат пребиваващи, т.е. драйвери на мишки и EMM емулатори. Но той не се опитва да контролира хардуера в компютъра така, както прави една модерна операционна система.
*Когато DOS беше създаден за първи път през 70-те години, защитният режим не съществуваше в CPU. Едва при процесора 80286 в средата на 80-те години този защитен режим стана част от процесора.
Уверете се, че преглеждате оригиналната нишка и прочетете оживената дискусия по тази тема, като използвате линка по-долу!
Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.