Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Os/2 1.x

Паралельно з розвитком Win 16, в другій половині 80-х Microsoft займалася розробкою ще однієї операційної системи, в даному випадку спільно з фірмою IBM. Os/2 створювалася як ОС для нової серії машин IBM Personal System/2, заснованих на процесорі 80286. Архітектура системи є найповнішою з відомих авторові втілення ідей, які мав на увазі Intel, розробляючи цей процесор. Вельми обмежений успіх цієї системи обумовлений, мабуть, неспроможністю ідей Intel, а не якістю їх втілення.
Система використовує сегментовану віртуальну пам'ять і збірку у момент завантаження. Формат завантажувальних модулів і DLL той же самий, що в Win 16 — NE. Проте система має роздільні адресні простори — завдання не мають доступу до сегментів даних і приватних сегментів DLL інших завдань. Сегменти коди — що розділяються і захищені від запису. На жаль, 80286 не обробляв сегментних відмов, тому віртуальна пам'ять використовувалася лише для захисту завдань один від одного, але не для сегментного підкочування [Коган/роусон 1989, Лафо/нортон 1991].
Os/2 реалізує витісняючу багатозадачність, багатопоточність в межах одного завдання і багатий набір примітивів того, що взаємовиключає (семафори як двійкові, так і лічильники, черги повідомлень). Ядро — кооперативно багатозадачне з керованими повідомленнями асинхронними драйверами. Однією з відмітних особливостей системи є потужний механізм обробки виключень, аналогічний використовуваним в Mvs-os/390-z/os і VMS.
Одному з головних завдань при розробці системи було максимальне полегшення перенесення програмного забезпечення (як прикладного, так і системного, включаючи і драйвери пристроїв) з MS DOS. Ця мета була в основному досягнута: всі системні виклики DOS мали повні функціональні еквіваленти в Os/2, і досить акуратний написані програми для DOS могли бути перенесені в Os/2 1.x простий перекомпіляцією.
Втім, виявилася нерозв'язною інша, важливіше завдання — забезпечення бінарної сумісності. Процесор 80286 в захищеному режимі не мав можливості виконувати програми для реального режиму 8086. Для виконання бінарних модулів DOS була потрібна повноцінна копія DOS і перемикання режиму процесора. Таким чином, в системі могла виконуватися лише одна сесія DOS, а під час її роботи вся активність додатків Os/2 повністю припинялася.
Із-за цього недоліку Os/2 1.x мала успіх лише як сервери файлів і друку в мережах NETBIOS (LAN Manager і серверів додатків: Lotus Notes, Sybase і др).
Бінарна несумісність з DOS могла бути здолана лише з використанням можливостей процесора 80386. Існували і інші свідчення до переходу на цей процесор: наприклад, можливість сторінкового підкочування. Крім того, використовувана в х86 плоска модель пам'яті спрощує програмування, знімає обмеження в 64кбайт на змінну і дає багато інших переваг.
У цей момент між партнерами виникли серйозні розбіжності в питанні про тому, як слід переходити на новий процесор. Запропонована фірмою Microsoft архітектура новою 32-розрядній версії системи, (Os/2 New Technology) виявилася абсолютно неприйнятною для IBM.
Каменем спотикання стало питання про те, як слід організовувати взаємодію 16-розрядним кодом, що використовує сегментовану пам'ять, і 32-розрядним, що використовує лінійний адресний простір.
Насправді, адреси в обох моделях пам'яті мають довжину 32 біта, але в 16-розрядній моделі адреса розбита на селектор сегменту і зсув в нім. Це розбиття накладає серйозні обмеження на вказівну арифметику. Завдання перетворення 16-розрядного покажчика 80286 в 32-розрядний досить проста; завдання ж зворотного перетворення вимагає нетривіальних обчислень і в спільному випадку під час виконання нерозв'язна.
Пропозиція Microsoft полягала в тому, щоб зберегти бінарну сумісність з програмами для Os/2 1.x і дати їм можливість звертатися до нових 32-розрядним DLL і системним модулям, але не надавати можливості 32-розрядних додатків звертатися до старих 16-розрядним DLL. Це рішення вимагало повної переробки всіх сервісних підсистем (включаючи графічну підсистему Presentation Manager), ядра ОС і підсистеми введення-виводу (тобто всіх драйверів) в 32-розрядну модель пам'яті. Переробка драйверів вимагала відмови від сумісності з існуючими драйверами пристроїв, файлових систем і мережевих протоколів для Os/2 1.x.
IBM запропонувала елегантніше рішення, що вимагало, проте, переробки компілятора: пропонувалося навчити компілятор при виклику з 32-розрядного коди 16-бітовій процедури генерувати спеціальний код, що здійснює перетворення "плоского" покажчика в сегментований для всіх параметрів-покажчиків (приклад П.1). Компілятор повинен був приймати рішення про необхідність такого перетворення на основі прототипу функції, що викликається.

Приклад П.1. Код, що породжується компілятором IBM Visual Age C++ при виклику 16-розрядній функції

104 /*
105 * відкрити обробник
106 *для миші
107 */
108 Mouopenfnull,&hmou) ; sub esp,038h
push Oh
mov eax,offset Flat:hmou call _dosflattosel push eax
push 08h
push eax
mov eax,offset FLAT: Mou16open
call _dosflattosel
xchg eax, dword ptr[esp]
push Oh
call __EDC3216
add esp,04ch

Відомостей про хід переговорів історія не зберегла, проте по непрямих ознаках вони були вельми бурхливими. По причинах, викладеним в главі 10рішення про відмову від підтримки існуючих драйверів і DLL було абсолютне неприйнятний для IBM. Чому переробка компілятора не владнувала Microsoft, менш зрозуміло. Автор не має в своєму розпорядженні достовірних відомостей із цього приводу, але є ряд непрямих підстав передбачати, що взаємодія між підрозділами Microsoft залишає бажати багато кращого, так що творці ОС просто не мали можливості (або навіть права) висувати настільки складну вимогу до розробників компілятора. Можливо, що на результат переговорів вплинули і якісь інші, наприклад, суто політичні або навіть психологічні чинники.
Поважно відзначити, втім, що жодних реальних проблем реалізація даної вимоги не представляла: практично все 32-розрядні компілятори для Os/2 2.x — Zortech C++, Watcom C++, IBM C/set (пізніше IBM Visual Age for C++) — з успіхом виконують перетворення покажчиків.
Так або інакше, переговори не лише проходили бурхливо, але і закінчилися розлученням. Подальша доля Os/2 — це зовсім інша історія, або, точніше сказати, дві різні історії.


:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017