Ядро Linux в порівнянні з класичними ядрами Unix

Завдяки загальному походженням і однаковому API, сучасні ядра Unix мають деякі загальні характерні риси За невеликими винятками ядра Unix являють собою монолітні статичні бінарні файли Це означає, що вони існують у вигляді великих виконуваних образів, які виконуються один раз і використовують одну копію адресного простору Для роботи операційної системи Unix зазвичай потрібно система з контролером управління сторінкової адресацією памяті (memory management unit) це апаратне забезпечення дозволяє забезпечити захист памяті в системі і надати кожному процесу унікальне віртуальний адресний простір У списку літератури наведено мої улюблені книги з влаштування класичних ядер операційної системи Unix

Порівняння рішень на основі монолітного ядра і мікроядра

Операційні системи, відповідно до особливостей побудови, можна розділити на дві великі групи: з монолітним ядром і з мікроядром (Є ще третій тип – екзоядро, яке поки що використовується, в основному, тільки в дослідницьких операційних системах, але вже починає пробивати дорогу у великий світ)

Монолітне ядро ​​є найпростішим, і до 1980-х років усі ядра будувалися саме таким чином Монолітне ядро ​​реалізовано у вигляді одного великого процесу, який виконується в одному адресному просторі, Такі ядра зазвичай зберігаються на диску у вигляді одного великого статичного бінарного файлу Всі служби ядра існують і виконуються в одному великому адресному просторі ядра Взаємодії в ядрі виконуються дуже просто, тому що все, що виконується в режимі ядра, – виконується в одному адресному просторі Ядро може викликати функції безпосередньо, як це робить користувальницький додаток Прихильники такої моделі зазвичай вказують на простоту і високу продуктивність монолітних ядер

Мікроядра не реалізуються у вигляді одного великого процесу Всі функції ядра розділяються на кілька процесів, які зазвичай називають серверами В ідеалі, в привілейованому режимі працюють тільки ті сервери, яким абсолютно необхідний привілейований режим Решта сервери працюють в просторі користувача Всі сервери, проте, підтримуються незалежними один від одного і виконуються кожен в своєму адресному просторі Отже, прямий виклик функцій, як у випадку монолітного ядра, неможливий Всі взаємодії всередині мікроядра виконуються за допомогою передачі повідомлень Механізм між процесами взаємодії (Inter Process Comrrmnication, IPC) вбудовується в систему, і різні сервери взаємодіють між собою і звертаються до службам один одного шляхом відправки повідомлень через механізм IPC Поділ серверів дозволяє запобігти можливість виходу з ладу одного сервера при виході з ладу іншого

Крім того, модульність системи дозволяє одному серверу витісняти з памяті іншого Оскільки механізм IPC вимагає більше накладних витрат, ніж звичайний виклик функції, і при цьому може знадобитися перемикання контексту з простору користувача в простір ядра і навпаки, то передача повідомлень призводить до падіння продуктивності в порівнянні з монолітними ядрами, в яких використовуються звичайні виклики функцій

У сучасних операційних системах з мікроядром, більшість серверів виконується в просторі ядра, щоб позбутися від накладних витрат, повязаних з перемиканням контексту, крім того, це дає потенційну можливість прямого виклику функцій Ядро операційної системи Windows NT, а також ядро ​​Mach (на якому базується частина операційної системи Mac OS X) це приклади мікроядер В останніх версіях як Windows NT, так і Mac OS X всі сервери виконуються тільки в просторі ядра, що є відходом від початкової концепції мікроядра

Ядро ОС Linux монолітне, тобто воно виконується в одному адресному просторі, в режимі ядра Проте ядро ​​Linux запозичило деякі хороші властивості мікроядерної моделі: у ньому використовується преемптівное ядро, підтримуються потоки простору ядра і можливість динамічного завантаження в ядро ​​зовнішніх бінарних файлів (модулів ядра) Ядро Linux не використовує ніяких функцій мікроядерної моделі, які призводять до зниження продуктивності: все виконується в режимі ядра з безпосереднім викликом функцій, замість передачі повідомлень Отже, операційна система Linux – модульна, багатопотокова, а виконання самого ядра можна планувати

Прагматизм знову переміг

У міру того як Лінус та інші розробники вносили свій внесок в ядро ​​Linux, вони приймали рішення про те, як розвивати ОС Linux без зневаги країнами, повязаними з Unix (і, що більш важливо, без зневаги API ОС Unix) Оскільки операційна система Linux не базується на якої версії ОС Unix, Лінус і компанія мали можливість знайти і вибрати найкраще рішення для будь проблеми і навіть з часом винайти нові рішення Нижче наводиться аналіз характеристик ядра Linux, які відрізняють його від інших різновидів Unix

• Ядро Linux підтримує динамічне завантаження модулів ядра Хоча ядро ​​Linux і є монолітним, воно додатково підтримує динамічн ську завантаження і вивантаження виконуваного коду ядра по необхідності

• Ядро Linux підтримує симетричну многопроцессорную обробку (SMP)

Хоча більшість комерційних варіантів операційної системи Unix зараз підтримує SMP, більшість традиційних реалізацій ОС Unix такої підтримки не має

• Ядро Linux є преемптівним На відміну від традиційних варіантів ОС Unix, ядро ​​Linux в змозі витіснити виконували завдання, навіть якщо це завдання працює в режимі ядра Серед комерційних реалізацій ОС Unix преемптівное ядро ​​мають тільки операційні системи Solaris і IRIX

• У ядрі Linux використовується цікавий підхід для підтримки багатопоточності (threads): потоки ні чим не відрізняються від звичайних процесів З точки зору ядра всі процеси однакові, просто деякі з них мають спільні ресурси

• У ядрі Linux відсутні деякі функції ОС Unix, які вважаються погано реалізованими, як, наприклад, підтримка інтерфейсу STREAMS, або відповідають дурним стандартам

• Ядро Linux є повністю відкритим у всіх сенсах цього слова Набір функцій, реалізованих в ядрі Linux, – це результат вільної і відкритої моделі розробки операційної системи Linux Якщо яка-небудь функція ядра вважається маловажной або неякісної, то розробники ядра

не зобовязані її реалізувати На противагу цьому, внесення змін при розробці ядра Linux займає елітарну позицію: зміни повинні вирішувати певну практичну задачу, повинні бути логічними і мати зрозумілу чітку реалізацію Отже, функції деяких сучасних варіантів ОС Unix, такі як память ядра з сторінкової реалізацією, не були реалізовані Незважаючи на наявні відмінності, Linux є операційною системою з суворим спадкуванням традицій ОС Unix

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*