Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Сервіси ядра, доступні драйверам

Слід провести відмінність між системними викликами і функціями ядра, доступними для драйверів. Набори системних викликів і драйверних сервісів абсолютно незалежні один від одного. Як правило, системні виклики недоступні для драйверів, а драйверниє сервіси - для призначених для користувача програм.
Системний виклик включає перемикання контексту між призначеною для користувача програмою і ядром. У системах з віртуальною пам'яттю під час такого перемикання процесор переходить з "призначеного" для користувача режиму, в якому заборонені або обмежені доступ до регістрів диспетчера пам'яті, операції введення-виводу і ряд інших дій, в "системний", в якому всі обмеження знімаються. Зазвичай системні виклики реалізуються з використанням спеціальних команд процесора, чаші всього - команди програмного переривання.
Драйвер же виконується в "системному" режимі процесора і, як правило, в контексті ядра, тому для виклику сервісів ядра драйверу не треба робити жодних перемикань контексту. Практично завжди такі виклики реалізуються звичайними командами виклику підпрограми.
Ще одна важлива відмінність полягає в тому, що, виконуючи системний виклик, програмістові не треба піклуватися про його реєнтерабельність: ядро або забезпечує справжню реєнтерабельність, або створює ілюзію рентабельності завдяки тому, що виконується з вищим пріоритетом, ніж всі призначені для користувача програми. Навпаки, доступні драйверам сервіси ядра діляться на дві групи - ті сервіси, які можна викликати з обробників переривань і ті, які не можна.
Сервіси, доступні для обробників переривань, повинні задовольнять двом вимогам: вони мають бути реєнтерабельними і завершуватися за гарантований час. Наприклад, виділення пам'яті може зажадати збірки сміття або навіть пошуку жертви для видалення в адресних просторах призначених для користувача завдань. Крім того, виділення пам'яті вимагає роботи з ресурсом (пулом пам'яті ядра), що розділяється, і його досить складний реалізувати реєнтерабельним чином, тому обробникам переривань дуже рідко дозволяють запрошувати пам'ять.
Копіювання даних між призначеним для користувача і системним адресними просторами може привести до виникнення сторінкової відмови, час обробки якого може бути непередбачуване великим.
Далі, скорочено, ми називатимемо доступні для обробників переривань сервіси реєнтерабельними, хоча для них важлива не лише реєнтерабельність, але і завершення протягом фіксованого часу. У попередніх розділах ми згадували деякі категорії сервісів, що надаються драйверам. Ці сервіси включають (приведений список не є вичерпним) наступні.

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

Деякі з груп цих функцій будуть детальніше описані далі.

 

:: Реклама ::

Центр торгового оборудования

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017