
- •1.2.8. Підтримка багатопроцесорного оброблення
- •1.2.10 Інтерфейс між ос і користувальницькими додатками
- •2.3. Дії при зависанні пк
- •2.5. Поняття про каталог. Ієрархічна структура каталогів
- •2.6 Стрічка запрошення в dos та введення команд
- •3.3. Сервісні внутрішні команди в ms-dos
- •3.4. Спеціальні символи, що використовуються в командах ms-dos
- •4.2. Форматування дисків програмою format
- •Invalid media or Track 0 bad - disk unusable. Format terminated. (Пошкоджена системна область, або 0-доріжка погана - диск непридатний. Форматування припинено) Досить часто може виникати повідомлення:
- •Format complete. ( Фопмат V ванн я тяспшрнп )
- •System transferred
- •4.3. Відновлення інформації після форматування. Команда unformat
- •4.4. Створення системного диску
- •System transferred
- •4.5. Копіювання дисків (гмд)
- •Insert target diskette in drive a:
- •Copy another diskette (y/n)?
- •4.6. Команда перегляду та зміни мітки диску
- •4.7. Отримання інформації про диск" з допомогою команди chkdsk
- •4.8. Пошук та виправлення помилок на диску програмою scandisk
- •2.File allocation tables
- •3. Directory Structure
- •4.File System
- •4.9. Встановлення атрибутів файлів командою attrib
- •4.10. Структура оперативної пам'яті пк. Видача інформації про оперативну пам'ять командою mem
- •Mem |ключі]
- •Мал. 2.11. Інформація про резидентні програми
- •4.11. Фоновий друк командою print
- •4.12. Інші зовнішні команди ms-dos
- •Deltree [диск:]шлях [[диск:]шлях[...]] [/y]
- •Tree II I more
- •8. Панель зв'язку по о-модему
- •4.1. Об'єднання файлів в групу
- •4.2. Створення каталогів в nc
- •4.3. Створення та редагування файлів в n0. Внутрішній редактор
- •9. Довідник з використання "гарячих"клавіш в nc
- •4.10. Швидкий пошук каталогів в nc. Робота з деревом каталогів
- •4.11. Встановлення та зміна атрибутів файлів через оболонку Norton Commander V.5.0
- •4.13 Операції split та merge
- •4.14. Синхронізація та порівняння каталогів
- •6.1. Створення та призначення файла сіігіїгїо
- •6.3. Створення та призначення файлу tools.Mnu
- •6.4. Створення та призначення меню користувача
- •7. Встановлення конфігурації Norton Commander у. 5.0
- •2.2. Методологія ядра
- •2.2.1. Монолітне ядро
- •2.3. Абстракції, процеси та ресурси
- •2.2.4. Концепція віртуальних машин
- •2.3. Операційна система та її оточення
- •2.3.1. Взаємодія ос і апаратного забезпечення
- •2.3. Операційна система та її оточення
- •2.3.2. Взаємодія ос і виконуваного програмного коду
- •2.4. Особливості архітектури: unix і Linux 2.4.1. Базова архітектура unix
2.2.1. Монолітне ядро
У системах з монолітною архітектурою все ядро працює на рівні супервізора. Ядро саме такої архітектури наведено на рис. 2.1.
До переваг такої системи належать:
простота розроблення, оскільки не потрібно розробляти додатки для різних рівнів;
висока швидкість роботи за рахунок відсутності необхідності переключення між рівнями для взаємодії модулів ОС між собою, а така взаємодія відбувається досить часто через багатошарову архітектуру ОС.
Недоліки системи з монолітним ядром:
великий обсяг оперативної пам'яті, займаний ядром ОС, через що для програм користувача залишається менший обсяг пам'яті. З огляду на це такі ОС висувають високі вимоги до ресурсів комп'ютера;
оскільки всі модулі працюють в одному адресному просторі, то збій одного модуля ОС може призвести до збою всієї системи. Отже, помилка в ядрі ОС дуже небезпечна, а безпосередня взаємодія між об'єктами ядра може призвести до краху системи в цілому через наявність помилок в окремих модулях.
33
У системах із мікроядерною архітектурою на рівні супервізора працює тільки дуже невелика частина ОС, якій потрібен безпосередній доступ до апаратури. Інші модулі ОС працюють у користувальницькому режимі, вони називаються службами, або сервісами.
Прикладом мікроядерної ОС є система Mach, розроблена в університеті Карнегі — Медлона.
Що ж являє собою мікроядро? Аналогом мікроядра є набір функцій базового класу загального виду, застосовуваних в об'єктно-орієнтованому програмуванні. Мікроядро складається з невеликого (як правило) набору абстракцій, що не є операційною системою самі по собі, але дозволяють реалізувати ОС у вигляді служб, що використовуватимуть надані мікроядром сервіси. Наприклад, мікроядро Mach надає такі абстракції: задачі, потоки, об'єкти пам'яті, порти й повідомлення. Цього досить, щоб побудувати на їх базі повноцінну ОС лише за допомогою тих частин, що працюватимуть у користувальницькому режимі.
Функції ядра зазвичай не залежать від конкретної ОС. Мікроядро можна розглядати як набір необхідних служб і застосовувати їх у будь-якій ОС, як у розроблюваній, так і в існуючій. Зокрема, ці служби використовувалися в ОС з монолітним ядром; наприклад, Apple відобразила LINUX на мікроядро Mach для використання на процесорі PowerMac.
Назва «мікроядро» означає малий розмір ядра, воно надає набагато менше сервісів, ніж монолітне ядро. Існують системи, в яких мікроядро займає всього 32 кбайт.
Різниця між користувальницькими додатками і компонентами ОС, що працюють у користувальницькому режимі, є суто умовною. Вважають, що сервіс ОС відрізняється від додатка тим, що він надає певні послуги додаткам. Саме в цьому розумінні тут використовується термін «сервіс».
Розглянемо переваги і недоліки мікроядерної ОС.
Переваги мікроядерних ОС
Надзвичайно високий ступінь модульності й розширюваності. Використання ядра, що не залежить від конкретної ОС, є, безумовно, перевагою в порівнянні з використанням монолітного ядра. Будь-які можливості ОС визначаються лише додатком ористувальницького режиму. Відповідно, простим запуском гулянкою таких додатків можна зовсім змінити систему.
Стабільність і безпека. Ці дві властивості системи залежать - _тьки від мікроядра. У зв'язку з невеликим розміром код для мік- ^zpa можна ретельно налагодити, виконати його верифікацію гральними, математичними методами. Інші компоненти не готичними, і їх можна легко запустити знов у випадку збою, к ільки в адресному просторі ядра працює лише невелике число гулів, збої в цих модулях не є критичними, вони не впливають н і роботу інших модулів, що працюють у користувальницькому ге жимі.
Простота програмування модулів користувальницького:режиму.Звичайне програмування користувальницьких додатківі програмування компонентів ОС істотно відрізняються. Так, ітялвери для DOS і різних версій WINDOWS мають неоднакову тстуру, для їх налагодження використовуються різні програм- н. середовища. Усередині драйверів використовуються функції знлілення пам'яті, уведення/виведення тощо, відмінні від анало- них функцій у користувальницькому режимі. У випадку ж мі- роядра і драйвер, і звичайний додаток користувача застосовують ті самі програмні засоби.
Недолік мікроядерної структури ядра
Недолік використання мікроядра — зниження швидкодії. Це пов'язано з тим, що взаємодія між окремими компонентами ОС і ядром, а також компонентами, що працюють у користуваль- Ендькому режимі, можлива тільки через ядро ОС. Так, ті дані, що монолітній системі компонент ядра міг просто прочитати із системної ділянки пам'яті, сервер мікроядерної системи змушений одержувати, використовуючи механізми міжпроцесної взаємодії (ІPC — InterProcess Communication). Таким чином, для забезпе- чеяня взаємодії необхідно кілька разів переходити від користу- : ільницького режиму до режиму ядра. Такі переходи між цими знями привілеїв відбирають багато процесорного часу.
2.2.3. Екзоядерна система
Мікроядро у своєму ідеальному прояві складається тільки : з засобів IPC (взаємодія користувальницьких додатків із модуля- чи ОС і модулів ОС між собою здійснюється за допомогою тих же засобів).
Розглянемо застосування концепції мікроядра на прикладі мікроядра операційної системи Tyros [11]. За основу IPC було обрано черги повідомлень. За необхідності взаємодії надсилається запит у вигляді повідомлення, яке вміщується в чергу повідомлень. Якщо черга повідомлень повністю заповнена, то процес, що надіслав повідомлення, зупиняється, доки черга звільниться, і стане можливою передача повідомлення. Ядро містить у собі такі функції: send — надіслати повідомлення, recv — одержати повідомлення і wait — чекати повідомлення. Виклик recv є асинхронним, тобто відразу після запуску примітива recv виконується черговий оператор програми. Для синхронного відправлення повідомлення слід послідовно викликати recv і wait. Одержувачем і відправником повідомлення може бути об'єкт, якому виділяється процесорний час (для сучасних ОС це потоки, процеси або те й інше). Якщо в мікроядрі, крім IPC, повинні бути засоби виділення ресурсів, наприклад, пам'яті, то у випадку квазіядра ці можливості надаються через IPC.
Кожен сервер одержує у своє розпорядження лише ті системні ресурси, на які він має право. Для додержання безпечного режиму роботи в повідомленні задається рівень привілеїв об'єкта, який надіслав це повідомлення (модуль ОС або модуль користувача). Об'єкти користувача мають доступ тільки до IPC, а об'єкти ОС також мають можливість запитати в ядра різні ресурси. Цей простий механізм захисту, подібний до наявних у сучасних процесорах, дозволяє серверам мікроядра створювати будь-які та як завгодно складні системи захисту. Це основна перевага цього типу ядра.
У наш час такі системи активно досліджуються, але повноцінно працюючих ОС на цьому принципі поки що не існує. Це пов'язано з тим, що вони вимагають виділення всіх ресурсів модулями, що працюють у користувальницькому режимі. Зауважимо, що в DOS існувала можливість безконтрольного доступу до пристроїв у користувальницькому режимі, в якому працювали модулі ОС і користувальницькі модулі. Для забезпечення захисту в сучасних процесорах і ОС можливість керування зовнішніми пристроями можна включити тільки в режимі ядра. Наприклад, для процесора 1-32 мінімальний рівень пріоритету програми, що здатна керувати зовнішніми пристроями, визначається вмістом 12-го, 13-го бітів регістра ознаки (це поле називається IOPL, Input- Output Privilege Level). Наведемо фрагмент програми для визначення цього рівня:
Результат «О» відповідає рівню привілею «0», тобто можливість керування зовнішніми пристроями мають тільки модулі, які працюють на рівні привілею «0», що відповідає рівню ядра.
Спроба зміни цього рівня в користувальницькій програмі за допомогою команд і наступна перевірка нового значення показують, що воно не змінюється, хоча код, наведений нижче, виконується без помилок.
Змінити це поле може програма, рівень привілею якої не нижче, ніж той, що заданий у полі ІОРЬ.
Якщо режим ядра використовуватиметься для забезпечення перевірки можливості доступу до зовнішнього пристрою і параметрів доступу, то без обмеження захищеності можна дозволити виконання самого доступу в користувальницькому режимі. Саме цей принцип застосовується в екзоядерних системах.
У більшості сучасних ОС до складу ядра, як правило, входять такі модулі:
модулі керування введенням/виведенням, які використовуються, насамперед, для завантаження самої ОС. У цьому випадку спочатку завантажується програма початкового завантаження під керуванням базисної системи введення/виведення (Basic Input/ Output System — BIOS). Ця програма запускається на виконання і завантажує першу порцію модулів ОС. Інші модулі ОС завантажуються модулями ОС, завантаженими на попередньому кроці. У DOS завантаження виконується у два етапи, у сучасних ОС — у чотири і більше етапів. На кожному етапі можливості ОС з погляду керування введенням/виведенням увесь час розширюються. Найбільш розповсюдженими завантажувачами є NTLDR (NT — LoaDeR) — завантажувач ядра для сучасних WINDOWS, LILO (Linux LOader) — завантажувач ядра LINUX;
модуль керування пам'яттю. Для завантажуваних модулів ОС необхідно виділити пам'ять, куди будуть завантажені код і дані для модуля. Для запуску й виконання будь-якого додатка йому повинна бути виділена пам'ять, тому модуль керування пам'яттю звичайно постійно є присутнім у пам'яті. Якщо оперативної пам'яті для модуля, що завантажується, не вистачає, додаткова пам'ять повинна бути отримана за рахунок звільнення її шляхом скидання невикористовуваних у цей час даних і програми у спеціальний файл завантажування. Якщо програма і дані, що зараз повинні виконуватися, знаходяться в сторінковому файлі, вони повинні бути завантажені в оперативну пам'ять;
модуль керування процесами. Виконанням будь-якого додатка керує ОС. Вона завантажує додаток у пам'ять2, запускає його на виконання, виділяє для нього пам'ять і час процесора, завершує його. Фактично завжди виконується не менше двох процесів — один або більше процесів ОС і користувальницькі процеси. Для забезпечення максимальної продуктивності й узгодження їх роботи, а також виключення небажаного впливу використовується модуль керування процесами;
модуль для міжпроцесних з'єднань IPC. Важливість цього модуля розглянуто вище.
Розглянемо докладніше приклади ядер для сучасних ОС.
Ядро для WINDOWS 2000
Ядро містить такі модулі:
виконавча система (Ntoskrnl.exe), яка здійснює керування ::ам'яттю, введенням/виведенням даних, процесами і потоками, :-:ерує системою безпеки і міжпроцесними з'єднаннями;
драйвери (програми з розширенням sys), зокрема, драйвери пристроїв, драйвери файлових систем, драйвери для керування мережею;
апаратнозалежний рівень (Hardware Abstraction Layer — HAL.dll або hal.dll);
модулі підсистеми Win32 (Kernel32.dll, Advapi32.dll);
функції графічного та віконного інтерфейсу (User32.dll, Gdi32.dll).
Перелік компонентів ядра WINDOWS 2000 показує, що воно не є мікроядром у повному розумінні цього слова. У привілейсва- ному режимі виконуються не тільки основні компоненти системи модулі керування пам'яттю, введенням/виведенням, процесами), але й інші компоненти, такі як файлові системи, системи керування мережами й ін. Це зроблено для збільшення продуктивності системи. Таке ядро називають гібридним.
Для реалізації всіх компонентів застосовується переважно мова Сі. Мова Асемблер використовується тільки у випадку, якщо необхідно реалізувати код, який мовою високого рівня запрограмувати дуже важко, або код мовою Асемблер істотно виграє за продуктивністю. Крім цього, модуль HAL реалізований переважно мовою Асемблер.
Усі компоненти ядра, а також драйвери пристроїв використовують той самий адресний простір ядра. Це означає, що помилка в модулі або драйвері може зруйнувати інші компоненти ОС і драйвери. Компоненти ОС і особливості побудови драйверів будуть розглянуті у наступних розділах.
>вува-
До об'єктів ядра відносяться:
об'єкти керування, наприклад, асинхронні процедурні виклики (Asynchronous procedure calls — АРС), функції відстроченого виклику (Deferred procedure call — DPC3) і деякі об'єкти, що використовуються системою керування введенням/виведенням, такі як об'єкт переривання (interrupt object);
об'єкти диспетчеризації, наприклад, об'єкти синхронізації (подія, м'ютекс та ін.) тощо.
Апаратиозалежні компоненти ОС (Hardware Abstraction Layer — HAL) дозволяють зробити ОС багатоплатформною. Ядро ОС завантажує цей модуль для роботи в режимі ядра. З усіх модулів цього рівня на етапі інсталяції вибирається такий, що відповідає процесору. Цей модуль копіюється в системний каталог WINDOWS під ім'ям HAL.dll. Інші операційні системи, такі як VMS, вибирають необхідну бібліотеку DLL на етапі завантаження.
Ядро для UNIX і LINUX
У більшості версій UNIX і всіх версіях LINUX використовується монолітне ядро. Виняток становить версія UNIX Carnegie- Mellon's Mach 3.0, у якій використовується мікроядро, і DragonFly BSD, у якій використовується гібридне ядро.
Для зменшення обсягу пам'яті, необхідної для ядра, деякі його модулі (драйвери пристроїв) можуть завантажуватися і вивантажуватися з пам'яті в міру потреби. Ядра цих систем гранично мінімізовані й не містять жодної функції, що безпосередньо служить користувачеві. Ядро містить численні системні таблиці, списки, дерева, в яких знаходиться важлива системна інформація, тому UNIX і LINUX називають системами, структура яких визначена даними. Робота систем у більшості випадків полягає в пошуку і модифікації цих даних, тому велика увага приділяється організації даних; так, якщо використовуються таблиці, то це, як правило, хеш-таблиці, якщо списки — то двонапрямлені зв'язані списки; якщо дерева, то збалансовані дерева [12].