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

Модулі ядра, що завантажують, Linux

Одним з найважливіших нововведень у ядрі Linux є завантажують модули, що, ядра ( loadable kernel modules, LKM ), що з'явилися у версії 1.2. Вони забезпечують ядру гнучкість і функціональність.

Частини (секції) коду ядра можуть компілюватися, завантажуватися й вивантажуватися, незалежно від іншої частини ядра.

Модуль ядра може реалізовувати драйвер пристрою, файлову систему або мережний протокол.

Модульний інтерфейс дозволяє стороннім розроблювачам реалізовувати й поширювати на своїх власних умовах драйвери або файлові системи, які не можуть поширюватися на основі GPL.

Модулі ядра дозволяють инсталлировать Linux у вигляді стандартного, мінімального ядра, без використання яких-небудь убудованих пристроїв.

Три компоненти модуля Linux підтримують:

  • Керування модулем

  • Реєстрацію драйвера

  • Дозвіл конфліктів.

Компонента керування модулем управляє завантаженням модуля на згадку і його взаємодію з іншою частиною ядра.

Керування модулем розбито на дві частини:

  • Керування частинами коду модуля в пам'яті ядра

  • Керування символами, на які модуль дозволяє посилатися.

Компонента module requestor управляє завантаженням запитаних, але ще не завантажених модулів. Вона також регулярно опитує ядро, щоб переконатися, що модуль дотепер використається, і вивантажує модуль, якщо він довгий час активно не використався.

Схема вихідного коду модуля ядра, що завантажує, Linux зображена рис. 25.3.

.

Рис. 25.3.  Схема вихідного коду модуля ядра, що завантажує, Linux.

Компонента реєстрація драйверів надає модулю можливість повідомити ядру, що новий драйвер доступний.

Ядро підтримує динамічну таблицю всіх відомих драйверів і забезпечує набір підпрограм для додавання драйверів у ці таблиці або видалення з них у будь-який час.

Таблиці реєстрації включають наступні елементи:

  • Драйвери пристроїв

  • Файлові системи

  • Мережні протоколи

  • Двійкові формати.

Модуль дозволу конфліктів надає механізм, що дозволяє різним драйверам пристроїв резервувати апаратні ресурси й захищати ці ресурси від випадкового використання іншими драйверами.

Цілі модуля дозволу конфліктів:

  • Запобігти конфліктам, пов'язані з використанням апаратур

  • Запобігти автопроверки ( autoprobes) від перетинання із уже існуючими драйверами пристроїв

  • Дозволити конфлікти різних драйверів, що намагаються мати доступ до однієї й тим же апаратурам.

Керування процесами в Linux

У класичній системі UNIX засобу керування процесами розділяють створення процесу й запуск нової програми на дві різні операції:

  • Системний виклик fork створює новий процес

  • Нова програма запускається за допомогою систебагато виклику exec.

В UNIX процес містить всю інформацію, що ОС повинна підтримувати для реалізації концепції окремого виконання окремої програми.

У системі Linux властивості процесу діляться на три групи: ідентифікація процесу, його оточення й контекст.

Ідентифікатор процесу (PID) - унікальний ідентифікатор процесу (число); використається для вказівки процесів в операційній системі, коли додаток виконує системний виклик signal, modify або wait для іншого процесу.

Повноваження (Credentials). Кожен процес повинен мати пов'язаний з ним ідентифікатор користувача й один або більше ідентифікаторів груп, що визначають права процесу для доступу до системних ресурсів і файлів.

Ідентифікація особистості (Personality). Хоча це й нетрадиційно для систем типу UNIX, в Linux кожен процес має унікальний ідентифікатор особистості, за допомогою якого можлива деяка модифікація семантики ряду системних викликів. Він використовується головним чином у бібліотеках емуляції, для запиту про сумісність системних викликів з тим або іншим специфічним діалектом UNIX.

Оточення процесу успадковується від процесу-батька. Складається із двох векторів, що завершуються нулями:

  • Вектор аргументів містить список аргументів командного рядка, використаний при виклику виконує программы, що; традиційно починається з імені самої програми

  • Вектор оточення – список пара "NAME=VALUE", які зв'язують змінні оточення із заданими іменами і їх довільні текстові значення.

Передача змінні оточення між процесами й спадкування цих змінних дочірніми процесами - гнучкі засоби передачі інформації компонентам систебагато програбагато забезпечення, що працює в непривілейованому режимі.

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

Контекст процесу – це що постійно змінюється стан виконує программы, що, у будь-який момент часу.

Контекст планування – найбільш важлива частина контексту процесу; це інформація, що використає планувальник для припинення й запуску процесу.

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

Таблиця файлів – це вектор покажчиків на системні файлові структури. При виконанні системних викликів для вводу-виводу процеси посилаються на ці структури за допомогою індексів у таблиці файлів.

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

Таблиця оброблювачів сигналів визначає підпрограми в адресному просторі процесу, які повинні бути викликані при виникненні відповідних сигналів.

Контекст віртуальної пам'яті процесу визначає весь уміст його персонального адресного простору.

Процеси й потоки.Linux використає те саме внутрішнє подання для процесів і потоків. Потік в Linux – це новий процес, що використає загальний адресний простір із процесом-батьком.

Различие проявляється тільки у випадку, коли новий потік створюється системним викликом clone:

  • класичний системний виклик fork створює новий процес зі своїм повністю новим контекстом;

  • системний виклик clone створює новий процес зі своїм новим ідентифікатором особистості, але такий, котрому дозволено спільно використати структури даних зі своїм батьком.

Використання систебагато виклику clone дає процесам можливість явного контролю над тим, які ресурси спільно використаються потоками.