Операційна система OS/2 Warp
OS/2 – сімейство операційних систем компанії IBM. Вперше OS/2 була розроблена як 16-розрядна операційна система для мікропроцесора i80286. За нею були розроблені 32-розрядна версія, а також останнє покоління цього сімейства – OS/2 Warp.
Архітектура
Для операційних систем OS/2 Warp притаманна витісняюча багатозадачність для 16- та 32-розрядних програм OS/2 а також підтримка виконання DOS та Win16 програм в режимі невитісняючої багатозадачності. Ядро операційної системи побудоване на основі мікроядерного підходу. Воно надає базові сервісні функції API (єдиний інтерфейс прикладного програмування, сумісний з рядом операційних систем), що забезпечують підтримку файлової системи, управління пам’яттю, тощо. Ці функції забезпечуються з допомогою системних бібліотек DLL, до яких можна звертатись без затрат часу для переходу між кільцями захисту (рівнями привілей).
Ядро саме є структуроване як процес з потоками, і більшість системних служб реалізовані як механізми IPC-звертань до ядра, а не як прямі системні виклики. Для підтримки операцій вводу/виводу та доступу до зовнішніх пристроїв ядро забезпечує доступ до ресурсів вводу/виводу, таких як пристрої з відображаючою пам’яттю, порти вводу/виводу та канали прямого доступу до пам'яті (Direct Memory Access, DMA), а також можливість відображати преривання на драйвери пристроїв, використовувані в користувацькому просторі. Ядро дозволяє приоритетним програмам отримувати пристрої в своє розпорядження: такими програмами зазвичай є програми, не пов’язані з процесами, типу серверів драйверів пристроїв, працюючих як додатки.
Поверх ядра операційної системи OS/2, як мікроядерної операційної системи розміщується ряд службових додатків, надаючих системі ряд послуг спільного призначення, серед яких є пейджер замовчення, майстер-сервер, який завантажує інші сервери в пам'ять, служба низькорівневих імен, служба захисту, ініціалізації, набір драйверів пристроїв зі зв’язаним кодом підтримки а також бібліотечні підпрограми для стандартного програмного середовища.
Ядро OS/2 та задачно-нейтральні сервіси дозволяють забезпечити емуляцію середовища для виконання програм, написаних для різних операційних систем, зокрема UNIX, і забезпечити їх одночасне виконання.
В операційній системі повністю реалізована підтримка мережевих технологій Інтернет та Інтранет. Наявні засоби побудови однорангових мереж та клієнтські частини для багатьох операційних систем. Зокрема була спеціально розроблена серверна версія OS/2 WarpServer for e-Business (Aurora).
До комплекту операційної системи входить система програмування високого рівня REXX, а також його версії: Visual REXX, об’єктно-орієнтована версія.
Емуляція DOS та процесора 8086 здійснюється в ядрі віртуальних DOS-машин VDM. Віртуальні машини OS/2 Warp підтримують повноцінний динамічний обмін даними та зв’язки OLE 2.0 для DOS та Win16 програм а також DDE з 32-розрядними програмами OS/2. В системі присутня міжплатформова технологія OpenDoc, що дозволяє об’єднувати функції різних прикладних програм, переміщуючи необхідні фрагменти за допомогою механізму drag-and-drop.
Сумісність файлових систем забезпечує диспетчер IFS, що дозволяє працювати будь-якій прикладній програмі з будь-якою файловою системою.
Розподіл оперативної пам’яті
Модуль реалізації механізмів віртуальної пам’яті в ядрі OS/2 підтримує великі посторінкові розкидані адресні простори, складені з об’єктів пам’яті. Кожний об’єкт пам’яті керується пейджером – задачею поза ядром, яка забезпечує резервне збереження сторінок об’єкта пам’яті. Адресні простори керуються шляхом відображення чи розміщення об’єктів пам’яті всередині них. Усі версії OS/2 Warp крім серверної могли надавати програмісту не більше 512 Мбайт адресного простору. Так як це рахувалося недоліком в серверній версії об’єм віртуального адресного простору був збільшений до 2 Гбайт, більше того за бажанням його можна було збільшити до 3 Гбайт.
Ядро керує захистом пам’яті та її розподілом на основі об’єктів пам’яті абстрактним чином. Ядро інтенсивно використовує режим копіювання при записі для надання програмам можливості ділити об’єкти пам’яті, не копіюючи численну кількість сторінок, коли новий адресний простір отримує доступ до об’єкту пам’яті. Нові копії сторінок створюються лише тоді, коли програма в одному з адресних просторів оновлює їх. Коли ядро приймає сторінковий збій, пейджер повідомляється про об’єкт пам’яті, де відбувся збій і визначає яким чином подати чи зберегти дані. Це дозволяє системі встановити різні семантики для об’єктів пам’яті, основуючись на потребах програм, які їх використовують.Ядро керує засобами виконання програм, забезпечуючи одночасне виконання багатьох процесів та потоків виконання. Кожен процес має свій власний адресів простір, чи відображення. Ядро розподіляє об’єкти пам’яті, які відобразив процес на діапазон адресів в середині адресного простору. Процес також виступає блоком розміщення ресурсів та захисту, при цьому процесам надаються права доступу до засобів IPC системи. Для підтримки паралельного виконання декількох програм в межах одного адресного простору ядро відділяє сферу виконання від реально виконуючогося потоку. Таким чином програма може бути завантажена та виконана в декількох різних місцях коду в один і той же час на мультипроцесорі чи паралельній машині. Це може призвести до підвищення швидкодії додатку.
Система IPC забезпечує базовий механізм, дозволяючий потокам працювати в різних процесах, взаємодіючи одне з одним, та надійну доставку повідомлень в порти. Порти – це захищені канали зв’язку між процесами. Кожному процесу який використовує порт приписується набір прав на цей порт. Права можуть бути різними для різних процесів. Тільки один процес може отримати якийсь порт, хоча будь-який потік всередині процесу може виконувати операцію прийому. Один чи більше процесів можуть мати право відсилати інформацію до порту. Ядро дозволяє процесам використовувати систему IPC для передачі одне одному прав на порт. Воно також забезпечує спосіб передачі великих об'ємів даних в повідомленнях. Замість того, щоб копіювати дані, повідомлення містить вказівник на них, який називається вказівником на дані поза лінією. Коли ядро передає повідомлення від передавача до приймача, воно заставляє пам'ять, яка передається через вказівник, з'явитися в адресному просторі приймача і зникнути з адресного простору передавача.
Файлова система
В перших версіях OS/2 Warp використовувалася файлова система HPFS (High Performance File System), що була спільно розроблена в 1989 році компаніями IBM і Microsoft. Файлова система HPFS забезпечує низький рівень фрагментації. Вона розподіляє простір, базуючись не на кластерах, а на фізичних 512-байтових секторах незалежно від розміру локального диску.
Перші 16 секторів розділу HPFS представляють завантажувальний блок. Ця область містить мітку тому та код початкового завантаження системи. Сектор 16, відомий під назвою «суперблок», містить розмір розділу, вказівник на кореневий каталог, рахівник елементів каталогів, версію HPFS, дату останньої перевірки та виправлення розділу за допомогою команди CHKDSK, а також дату виконання останньої процедури дефрагментації. Він також містить вказівники на список зіпсованих блоків на диску, таблицю дефектних секторів та список доступних секторів. Сектор 17 носить назву SpareBlock (запасний блок). Він містить вказівник на список секторів, які можна використовувати для виправлення помилок, рахівник доступних секторів для виправлення помилок, вказівник на резерв вільних блоків, використовуваних для керування деревами каталогів, та інформацію про мовні набори символів. Цей сектор також містить флаг, який фіксує невірне завершення роботи системи чи закриття файлів. Файлова система HPFS ділить розділ на полоси по 8 Мбайт кожна. Кожна полоса має окрему таблицю в 2 Кбайт, в якій вказується які сектори полоси доступні, а які зайняті. Щоб максимально збільшити неперервність простору для розміщення файлів таблиці почергово розміщуються то на початку, то в кінці полос. Це дозволяє зберігати файли до 16 Мбайт (мінус 4 Кбайта для таблиці) в одній неперервній області. При форматуванні HPFS резервує необхідний простір для каталога в полосі, розміщеній ближче до центру. Місце резервується в середині диску для того, щоб фізичні голівки, що зчитують дані, ніколи не проходили більше половини ширини диску. Для зберігання елементів каталогу HPFS використовує структуру бінарного дерева. Кожний елемент починається з числа, що є довжиною елемента, що змінюється в залежності від довжини імені файлу. Потім іде час і дата створення файлу, розмір і атрибути, а також вказівник на F-вузол файлу. F-вузол файлу займає один сектор та містить вказівник на початок файлу, журнал звертань до файлу, тощо.
HPFS не накладає обмежень на максимальний розмір файлу. Основною ціллю цієї файлової системи було доведення розміру розділу до 2 Тбайт, але по сьогоднішній день стоїть обмеження на 64 Гбайт, оскільки деякі частини HPFS по сьогодні лишаються 16-розрядними.Натомість в серверній версії OS/2 була реалізована нова файлова система з протоколюванням JFS (Journaling File System). Ця файлова система забезпечує високий рівень безпеки в структурах даних завдяки техніці, розробленій для систем управління базами даних. Робота з JFS відбувається в режимі з веденням журналу транзакцій. У випадку збоїв системи є можливість обробки журналу транзакцій з ціллю прийняття чи скасування змін, здійснених під час системного збою. Ця система управління файлами також підвищує швидкість відновлення файлової системи після збою. Як для серверної операційної системи ця файлова система забезпечує високу швидкість обробки файлів.