- •Призначення ядра Linux і його особливості
- •Модулі ядра
- •Виконавча система
- •Наперед визначені системні процеси
- •Застосування користувача
- •Висновки до розділу 2.
- •Контрольні запитання та завдання
- •Паралелізм взаємодії з користувачем
- •Паралелізм розподілених застосувань
- •Ієрархія процесів
- •Особливості створення потоків
- •Особливості завершення потоків
- •Методи розподілюваної пам'яті
- •Методи передавання повідомлень
- •Технологія відображуваної пам'яті
- •Особливості міжпроцесової взаємодії
- •Черги повідомлень
- •20 Найбільш значущих бітів, які задають початкову адресу фрейму, кратну 4 Кбайт (може бути задано 1 Мбайт різних початкових адрес);
- •Перетворення адрес в архітектурі іа-32
- •Типи файлів
- •Імена файлів
- •Каталоги
- •Абсолютний і відносний шляхи
- •Єдине дерево каталогів. Монтування файлових систем
- •Літерні позначення розділів
- •Символічні зв'язки
- •Підтримка символічних зв'язків на рівні системних викликів
- •Фізична організація розділів на диску
- •Основні вимоги до фізичної організації файлових систем
- •Прості зв'язні списки.
- •Зв'язні списки з таблицею розміщення файлів
- •Розріджені файли
- •Елементи каталогу.
- •Спочатку інформацію зберігають у журналі (у ньому створюють новий запис). Таку операцію називають випереджувальним записуванням (write-ahead) або веденням журналу (journaling).
- •Необхідність реалізації буферизації
- •Способи реалізації буферизації
- •Буферизація і кешування
- •Використання спеціальних файлів
- •Передавання даних між рівнями підсистеми
- •Категорії драйверів пристроїв
- •Структура драйвера пристрою
- •Обслуговування переривань
- •Завершення запиту введення-виведення
- •Обробка даних багаторівневими драйверами
- •Поняття термінала
- •Емуляція термінала
- •Віддалені термінали і консоль
- •Термінальне введення
- •Термінальне виведення
- •Програмне керування терміналом
- •Наперед визначені дескриптори у Win32
- •Програмне керування консоллю
- •Протокол iPv4
- •Підтримка транспортного рівня
- •Однорідний доступ до пам'яті
- •Неоднорідний доступ до пам'яті
- •Асиметрична багатопроцесорність
- •Симетрична багатопроцесорність
- •Підтримка numa-архітектур
- •Масштабування навантаження
- •Продуктивність окремих застосувань
- •Криптографічні алгоритми
- •Обмін повідомленнями із використанням криптографії із секретним ключем
- •Криптографічні алгоритми з відкритим ключем
- •Обмін повідомленнями з використанням криптографії із відкритим ключем
- •Односторонні хеш-функції
- •Підписи із відкритим ключем і односторонніми хеш-функціями
- •Облікові записи
- •Словникові атаки і сіль
- •Аутентифікація за принципом «виклик-відповідь»
- •Списки контролю доступу
- •Можливості
Структура драйвера пристрою
Розглянемо структуру драйвера пристрою . Вона багато в чому подібна до структури, прийнятої в Linux. Можна виділити основні процедури драйвера.
Процедура ініціалізації. Звичайно називається DriverEntry, її виконує менеджер введення-виведення під час завантаження драйвера у систему, і зазвичай вона здійснює глобальну ініціалізацію структур даних драйвера.
Процедура додавання пристрою (add-device routine). Вона має бути реалізована будь-яким драйвером, що підтримує специфікацію Plug and Play. Менеджер Plug and Play викликає цю процедуру, якщо знаходить пристрій, за який відповідає драйвер. У ній звичайно створюють структуру даних, відображувану пристроєм (об'єкт пристрою).
Набір процедур диспетчеризації (dispatch routines), аналогічних функціям файлових операцій у Linux. Ці процедури реалізують дії, допустимі для пристрою (відкриття, закриття, читання, записування тощо). Саме їх викликає менеджер введення-виведення під час виконання запиту.
Процедура обробки переривання (interrupt service routine, ISR) аналогічна коду верхньої половини оброблювача переривання для Linux. Вона є оброблювачем переривання від пристрою, виконується із високим пріоритетом; основне її завдання - запланувати для виконання нижню половину оброблювача (DPC-процедуру).
Процедура відкладеної обробки переривання, DPC-процедура (DPC routine), відповідає коду нижньої половини оброблювача переривання в Linux. Вона виконує більшу частину роботи, пов'язаної з обробкою переривання, після чого сигналізує про необхідність переходу до коду завершення введення-виведення. Особливості виклику цих процедур під час виконання операції введення-виведення наведено нижче.
5.
У Windows ХР на внутрішньому рівні всі операції введення-виведення, відображені пакетами IRP, є асинхронними. Будь-яку операцію синхронного введення-виведення відображають у вигляді сукупності асинхронної операції й операції очікування.
Обробка запиту синхронного введення-виведення до однорівневого драйвера зводиться до такого:
Запит введення-виведення перехоплює динамічна бібліотека підсистеми (наприклад, підсистема Win32 перехоплює виклик функції WriteFile9 ( )).
Динамічна бібліотека підсистеми викликає внутрішню функцію NtWriteFilе( ), що звертається до менеджера введення-виведення.
Менеджер введення-виведення розмішує у пам'яті пакет IRP, що описує запит, і відсилає його відповідному драйверу пристрою викликом функції IoCallDriver ( ).
Подальші кроки аналогічні до описаних для Linux.
Драйвер витягає дані із пакета IRP, передає їх контролеру пристрою і дає йому команду почати введення-виведення.
Драйвер викликає функцію очікування, поточний потік при цьому призупиняють. Для асинхронного введення-виведення цей етап не виконують.
Коли пристрій завершує операцію, контролер генерує переривання, яке обслуговує драйвер.
Драйвер викликає функцію IoCompleteRequest( ) для тoгo щоб повідомити менеджерові введення-виведення про завершення ним обробки запиту, заданого пакетом IRP, після чого виконують код завершення операції.
На двох останніх етапах зупинимося окремо.