Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метода с_р.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.67 Mб
Скачать

Урок №42

(згідно навчальної робочої програми)

Тема: «Методологія ядра. Концепція віртуальних машин»

Питання:

  1. Методологія ядра.

  2. Монолітне ядро.

  3. Мікроядро.

  4. Екзоядерна система.

  5. Ядра для сучасних ОС.

  6. Концепція віртуальних машин.

Методологія ядра

Сутність методології, що базується на ядрі, полягає втому, що з усіх модулів обираються ті, що є універсальними для більшості ОС — вони складають ядро системи. У цьому випадку розширення і змінаслужб ОС, як правило, не спричиняють зміни ядра. Цей принцип покладено в основу розробки ОС UNIXі найновіших вер­сій WINDOWS. До того ж, деякі модулі ОС потрібні всім додаткам, незалежно від їхнього типу, інші модулі використовуються тільки деякими додатками. Так, модуль керування пам'яттю застосо­вується додатками будь-якого типу, а керування локальною ме­режею не є модулем, необхідним для будь-якого додатка. Модулі операційної системи, відповідно, поділяються на два класи:

  • ядро ОС — модулі, необхідні для роботи будь-якого додат­ка, ці модулі постійно знаходяться в нам'яті;

  • утиліти — модулі ОС, що завантажуються в пам'ять у міру необхідності й вивантажуються з пам'яті після використання.

Основний критерій такого поділу — рівень привілеїв коду. Сучасні процесори підтримують різне число рівнів привілеїв. На­приклад, процесори типу 1-32 використовують чотири рівні приві­леїв, деякі процесори — тільки два. Для забезпечення сумісності більшість ОС використовують два рівні привілеїв, незалежно від архітектури процесора: рівень користувача і рівень супервізора. Залежно від того, які частини ядра на якому рівні привілеїв пра­цюють, усі архітектури поділяються на три типи: архітектура з монолітним ядром, мікроядерна й екзоядерна.

Монолітне ядро

У системах з монолітною архітектурою все ядро працює на рівні супервізора. До переваг такої системи належать:

  • простота розроблення, оскільки не потрібно розробляти до­датки для різних рівнів;

  • висока швидкість роботи за рахунок відсутності необхід­ності переключення між рівнями для взаємодії модулів ОС між собою, а така взаємодія відбувається досить часто через багатоша­рову архітектуру ОС.

Недоліки системи з монолітним ядром:

  • великий обсяг оперативної пам'яті, займаний ядром ОС, через що для програм користувача залишається менший обсяг пам'яті. З огляду на це такі ОС висувають високі вимоги до ресур­сів комп'ютера;

  • оскільки всі модулі працюють в одному адресному просто­рі, то збій одного модуля ОС може призвести до збою всієї системи. Отже, помилка в ядрі ОС дуже небезпечна, а безпосередня взаємо­дія між об'єктами ядра може призвести докраху системи в цілому через наявність помилок в окремих модулях.

Прикладами ОС з монолітним ядром є традиційні ядра UNIX, такі як BSD, LINUX.

У системах із мікроядерною архітектурою на рівні супер­візора працює тільки дуже невелика частина ОС, якій потрібен безпосередній доступ до апаратури. Інші модулі ОС працюють у користувальницькому режимі, вони називаються службами, або сервісами.

Прикладом мікроядерної ОС є система Mach, розроблена в університеті Карнегі — Медлона.

Що ж являє собою мікроядро? Аналогом мікроядра є набір функцій базового класу загального виду, застосовуваних в об'єкт­но-орієнтованому програмуванні. Мікроядро складається з не­великого (як правило) набору абстракцій, що не є операційною системою самі по собі, але дозволяють реалізувати ОС у вигляді служб, що використовуватимуть надані мікроядром сервіси. На­приклад, мікроядро Machнадає такі абстракції: задачі, потоки, об'єкти пам'яті, порти й повідомлення. Цього досить, щоб побуду­вати на їх базі повноцінну ОС лише за допомогою тих частин, що працюватимуть у користувальницькому режимі.

Функції ядра зазвичай не залежать від конкретної ОС. Мікро­ядро можна розглядати як набір необхідних служб і застосовувати їх у будь-якій ОС, як у розроблюваній, так і в існуючій. Зокрема, ці служби використовувалися в ОС з монолітним ядром; наприклад, Appleвідобразила LINUXна мікроядро Machдля використання на процесорі PowerMac.

Назва «мікроядро» означає малий розмір ядра, воно надає набагато менше сервісів, ніж монолітне ядро. Існують системи, в яких мікроядро займає всього 32 кбайт.

Різниця між користувальницькими додатками і компонен­тами ОС, що працюють у користувальницькому режимі, є суто умовною. Вважають, що сервіс ОС відрізняється від додатка тим, що він надає певні послуги додаткам. Саме в цьому розумінні тут використовується термін «сервіс».

Розглянемо переваги і недоліки мікроядерної ОС.

Переваги мікроядерних ОС

Надзвичайно високий ступінь модульності й розширюва­ності. Використання ядра, що не залежить від конкретної ОС, є, безумовно, перевагою в порівнянні з використанням моноліт­ного ядра. Будь-які можливості ОС визначаються лише додаткомористувальницького режиму. Відповідно, простим запуском гулянкоютаких додатків можна зовсім змінити систему.

Стабільність і безпека.Ці дві властивості системи залежать - _тьки від мікроядра. У зв'язку з невеликим розміром код для мік- ^zpaможна ретельно налагодити, виконати його верифікацію гральними, математичними методами. Інші компоненти не готичними, і їх можна легко запустити знов у випадку збою, к ільки в адресному просторі ядра працює лише невелике число гулів, збої в цих модулях не є критичними, вони не впливають н і роботу інших модулів, що працюють укористувальницькому ге жимі.

Простота програмування модулів користувальницького ежиму.Звичайне програмування користувальницьких додатківі програмування компонентів ОС істотно відрізняються. Так, ітялвери для DOSі різних версій WINDOWSмають неоднакову тстуру, для їх налагодження використовуються різні програм- н. середовища. Усередині драйверів використовуються функції знлілення пам'яті, уведення/виведення тощо, відмінні від анало- них функцій у користувальницькому режимі. У випадку ж мі- роядра і драйвер, і звичайний додаток користувача застосовують ті самі програмні засоби.

Недолік мікроядерної структури ядра

Недолік використання мікроядра — зниження швидкодії. Це пов'язано з тим, що взаємодія між окремими компонентами ОС і ядром, а також компонентами, що працюють у користуваль- Ендькому режимі, можлива тільки через ядро ОС. Так, ті дані, що монолітній системі компонент ядра міг просто прочитати із системної ділянки пам'яті, сервер мікроядерної системи змушений одержувати, використовуючимеханізмиміжпроцесноївзаємодії(ІPCInter Process Communication). аким чином, для забезпе- чеяня взаємодії необхідно кілька разів переходити від користувальницького режиму до режиму ядра. Такі переходи між цими знями привілеїв відбирають багато процесорного часу.

Екзоядерна система

Мікроядро у своєму ідеальному прояві складається тільки : з засобів IPC (взаємодія користувальницьких додатків із модуля чи ОС і модулів ОС між собою здійснюється за допомогою тих же засобів).

У більшості сучасних ОС доскладу ядра, як правило, входять такі модулі:

1. модулі керування введенням/виведенням, які використову­ються, насамперед, для завантаження самої ОС. У цьому випадку спочатку завантажується програма початкового завантаження під керуванням базисної системи введення/виведення (Basic Input/Output System— BIOS).Ця програма запускається на виконання і завантажує першу порцію модулів ОС. Інші модулі ОС заванта­жуються модулями ОС, завантаженими на попередньому кроці. У DOSзавантаження виконується у два етапи, у сучасних ОС — у чотири і більше етапів. На кожному етапі можливості ОС з погляду керування введенням/виведенням увесь час розширю­ються. Найбільш розповсюдженими завантажувачами є NTLDR (NT— LoaDeR) — завантажувач ядра для сучасних WINDOWS, LILO (Linux LOader) — завантажувач ядра LINUX;

2.модуль керування пам'яттю. Для завантажуваних модулів ОС необхідно виділити пам'ять, куди будуть завантажені код і дані для модуля. Для запуску й виконання будь-якого додатка йому повинна бути виділена пам'ять, тому модуль керування пам'ят­тю звичайно постійно є присутнім у пам'яті. Якщо оперативної пам'яті для модуля, що завантажується, не вистачає, додаткова пам'ять повинна бути отримана за рахунок звільнення її шляхом скидання невикористовуваних у цей час даних і програми у спе­ціальний файл завантажування. Якщо програма і дані, що зараз повинні виконуватися, знаходяться в сторінковому файлі, вони повинні бути завантажені в оперативну пам'ять;

3. модуль керування процесами. Виконанням будь-якого до­датка керує ОС. Вона завантажує додаток у пам'ять1, запускає його на виконання, виділяє для нього пам'ять і час процесора, завершує його. Фактично завжди виконується не менше двох про­цесів — один або більше процесів ОС і користувальницькі процеси. Для забезпечення максимальної продуктивності й узгодження їх роботи, а також виключення небажаного впливу використовуєть­ся модуль керування процесами;модуль для міжпроцесних з'єднань IPC.

Ядро для WINDOWS 2000

Ядро містить такі модулі:

        1. виконавча система (Ntoskrnl.exe), яка здійснює керування :пам'яттю, введенням/виведенням даних, процесами і потоками, керує системою безпеки і міжпроцесними з'єднаннями;

        2. драйвери (програми з розширенням sys), зокрема, драйвери пристроїв, драйвери файлових систем, драйвери для керування мережею;

        3. апаратнозалежнийрівень(Hardware Abstraction Layer — HAL.dll абоhal.dll);

        4. модуліпідсистеми Win32 (Kernel32.dll, Advapi32.dll);

        5. функціїграфічноготавіконногоінтерфейсу(User32.dll, Gdi32.dll).

Перелік компонентів ядра WINDOWS2000 показує, що воно не є мікроядром у повному розумінні цього слова. У привілейсва- ному режимі виконуються не тільки основні компоненти системи модулі керування пам'яттю, введенням/виведенням, процесами), але й інші компоненти, такі як файлові системи, системи керуван­ня мережами й ін. Це зроблено для збільшення продуктивності системи. Таке ядро називають гібридним.

Для реалізації всіх компонентів застосовується переважно мова Сі. Мова Асемблер використовується тільки у випадку, якщо необхідно реалізувати код, який мовою високого рівня запрогра­мувати дуже важко, або код мовою Асемблер істотно виграє за про­дуктивністю. Крім цього, модуль HALреалізований переважно мовою Асемблер.

Усі компоненти ядра, а також драйвери пристроїв використо­вують той самий адресний простір ядра. Це означає, що помилка в модулі або драйвері може зруйнувати інші компоненти ОС і драй­вери. Компоненти ОС і особливості побудови драйверів будуть роз­глянуті у наступних розділах.

Зазвичай об'єкти використовують для складання програм, приховуючи їх будову. Саме ця властивість об'єктів використо­вується при застосуванні об'єктів ядра в користувальницьких програмах. Ідентифікатор об'єкта відомий користувальницькій програмі, тому вона може вказати на нього. Приховані властивості цього об'єкта і функції для користувальницьких додатків залиша­ються закритими.

До об'єктів ядра відносяться:

- об'єкти керування, наприклад, асинхронні процедурні ви­клики (Asynchronous procedure calls АРС), функції відстроче­ного виклику (Deferred procedure call— DPC)і деякі об'єкти, що використовуються системою керування введенням/виведенням, такі як об'єкт переривання (interruptobject);

- об'єкти диспетчеризації, наприклад, об'єкти синхронізації (подія, м'ютекс та ін.) тощо.

Апаратиозалежні компоненти ОС (Hardware Abstraction La­yer— HAL) дозволяють зробити ОС багатоплатформною. Ядро ОС завантажує цей модуль для роботи в режимі ядра. З усіх модулів цього рівня на етапі інсталяції вибирається такий, що відповідає процесору. Цей модуль копіюється в системний каталог WIN­DOWSпід ім'ям HAL.dll. Інші операційні системи, такі як VMS, вибирають необхідну бібліотеку DLLна етапі завантаження.

Ядро для UNIXі LINUX

У більшості версій UNIX і всіх версіях LINUX використову­ється монолітне ядро. Виняток становить версія UNIX Carnegie- Mellon's Mach 3.0, у якій використовується мікроядро, і Dragon Fly BSD, у якій використовується гібридне ядро.

Для зменшення обсягу пам'яті, необхідної для ядра, деякі його модулі (драйвери пристроїв) можуть завантажуватися і ви­вантажуватися з пам'яті в міру потреби. Ядра цих систем гра­нично мінімізовані й не містять жодної функції, що безпосередньо служить користувачеві. Ядро містить численні системні таблиці, списки, дерева, в яких знаходиться важлива системна інформа­ція, тому UNIXі LINUXназивають системами, структура яких визначена даними. Робота систем у більшості випадків полягає в пошуку і модифікації цих даних, тому велика увага приділяєть­ся організації даних; так, якщо використовуються таблиці, то це, як правило, хеш-таблиці, якщо списки — то двонапрямлені зв'язані списки; якщо дерева, то збалансовані дерева.

Концепція віртуальних машин

У системах віртуальних машин програмним шляхом створюють копії апаратного забезпечення (відбувається його емуляція). Ці копії (віртуальні машини) працю­ють паралельно, на кожній із них функціонує програмне забезпечення, з яким взаємодіють прикладні програми і користувачі.

Уперше концепція віртуальних машин була реалізована в 70-ті роки в опера­ційній системі VMфірми IBM. У СРСР варіант цієї системи (VM/370) був ши­роко розповсюджений у 80-ті роки і мав назву Система віртуальних машин ЄС ЕОМ (СВМ ЄС). Розглянемо архітектуру цієї ОС , що показана на рис. 23.

Ядро системи, яке називалося монітором віртуальних машин (VMMonitor, МВМ), виконувалося на фізичній машині, безпосередньо взаємодіючи з її апа­ратним забезпеченням. Монітор реалізовував набір віртуальних машин (ВМ). Кожна ВМ була точною копією апаратного забезпечення, на ній могла бути запу­щена будь-яка ОС, розроблена для цієї архітектури. Найчастіше на ВМ встано­влювали спеціальну однокористувацьку ОС CMS(підсистема діалогової оброб­ки, ПДО). На різних ВМ могли одночасно функціонувати різні ОС.

Коли програма, написана для ПДО, виконувала системний виклик, його пере­хоплювала копія ПДО, запущена на відповідній віртуальній машині. Потім ПДО виконувала відповідні апаратні інструкції, наприклад інструкції введення-виве- дення для читання диска. Ці інструкції перехоплював МВМ і перетворював їх на апаратні інструкції фізичної машини.

Рисунок 23 – Архітектура VM/370

Віртуальні машини спільно використовували ресурси реального комп'ютера; наприклад, дисковий простір розподілявся між ними у вигляді віртуальних дис­ків, названих мінідисками. ОС, запущена у ВМ, використовувала мінідиски так само, як фізичні диски.

Сьогодні концепція віртуальних машин застосовується і в прикладному про­грамному забезпеченні; опис відповідних рішень (програмних емуляторів апаратно­го забезпечення, технології керованого коду) можна знайти на сайті супроводу.

Контрольні питання:

1. В чому суть методології ядра?

2. Що таке монолітне ядро, його призначення?

3. Що таке мікроядро, його призначення, недоліки та переваги?

4. Які основні модулі ядра?

5. Які вам відомі ядра для сучасних ОС?

6. В чому суть концепції віртуальних машин?

Література: Бондаренко М.Ф. Операційні системи : навч. посібник / М.Ф. Бондаренко, О.Г. Качко. – Х.: Компанія СМІТ, 2008. – 432 с., стор. 32-41.

Шеховцов В.А. Операційні системи. – К.: Видавнича група BHV, 2005. – 576 с.: іл., стор.29-30.