
- •Системне програмування
- •1. Головний завантажувальний запис диску Master Boot Record.
- •2. Таблиця розділів та логічні диски
- •3. Таблиця розміщення файлів (fat). Загальна схема використання fat
- •4. Файлова система iso9660.
- •5. Файлова система udf
- •6. Таблиця відкритих файлів (sft). Стандартні файлові маніпулятори та їх розташування в sft.
- •7. Таблиця файлів завдань jft та її зв’язок з таблицею відкритих файлів sft.
- •9. Файлова система ntfs
- •10. Використання api функцій для роботи з файлами
- •11. Методи налагоджування драйверів та механізм підготовки їх до виконання
- •12. Команда ініціалізації драйверу. Її зміст, призначення та місце розташування. Визначення адреси точки розриву.
- •13. Об’єкти і їх дескриптори в Windows
- •14. Процедура переривання драйвера, її функція. Таблиця переходів
- •16. Загальний зв’язний список драйверів. Правила для встановлення нового драйверу.
- •19. Процедура стратегії драйвера та її основна задача.
- •20. Заголовок запиту драйверу, його складові частини та їх призначення
- •22.Обслуговування пам’яті в dos
- •23. Буфер попередньої трансляції в сторінковій організації пам’яті
- •Привілеї сегмента задаються полем dpl байта управління доступом.
- •26.Глобальні, локальні таблиці дескрипторів та idt.
- •27. Перетворення логічної адреси на лінійну в реальному та захищеному режимах
- •29.Таблиця дескрипторів переривань (idt).
14. Процедура переривання драйвера, її функція. Таблиця переходів
Переривання (англ. interrupt) — сигнал, що повідомляє процесор про настання якої-небудь події. При цьому виконання поточної послідовності команд призупиняється і керування передається обробнику переривання, який реагує на подію та обслуговує її, після чого повертає управління в перерваний код.
Створення обробника переривання пристрою.
Є декілька типів функцій, які повинен виконувати драйвер пристрою. Коли драйвер викликається функцією DOS то код функції драйвера (не функція DOS!) Поміщається в однобайтное поле по зсуві 2 в заголовку запиту. Потім управління передається процедурі обробки переривання драйвера, адреса якої визначається при перегляді заголовка драйвера. Ця процедура в першу чергу повинна відновити ES: BX, з тим щоб вони вказували на заголовок запиту, а потім прочитати кодовий номер команди.
За цим кодом процедура обробки переривання викликає потрібну процедуру, яка виконає потрібну опцію. Процедура зазвичай шукається за допомогою 13-немов таблиці, яка містить зміщення для 13 типів функцій.
Функції завжди перераховуються в наступному порядку:
0. INITIALIZE (ініціалізація)
1. CHECK_MEDIA (перевірка середовища - повертає інформацію про поточний стан системи)
2. MAKE_BPB (побудувати блок параметрів BPB - викликається при створенні або зміні середовища)
3. IOCTL_IN (читання інформації про стан драйвера і значенні його параметрів)
4. INPUT_DATA (введення даних)
5. NONDESTRUCT_IN (читання без видалення - читається черговий символ, але залишити його у вхідного буфера)
6. INPUT_STATUS (статус введення - перевірка на наявність символів в буфері)
7. CLEAR_INPUT (очищення введення - очищається вхідний буфер)
8. OUTPUT_DATA (висновок даних)
9. OUTPUT_VERIFY (перевірка виводу - вивести символи з подальшим читанням)
A. OUTPUT_STATUS (статус виводу - перевірка наявності символів в буфері)
B. CLEAR_OUTPUT (очищення виводу - очищає вихоной буфер)
C. IOCTL_OUT (изменеие поточного стану драйвера і його параметрів)
D. Відкрити пристрій (тільки для DOS 3.x). Ініціалізувати пристрій.
E. Закрити пристрій (тільки для DOS 3.x). Викликається перед закриттям файлів.
F. Програма обробки переміщуваного середовища (тільки для DOS 3.x). Тільки для блокових пристроїв.
15. Структура заголовку драйверу. Зміст його складових частин та їх призначення.
Драйвери пристроїв повинні створюватися у вигляді COM файлів і мати довжину не більше 64 Кбайт. При їх завантаженні не створюється префікс програмного сегмента.
При написанні драйвера вказується ORG 0, або взагалі нічого. Драйвер повинен бути описаний як далека (far) процедура.
Драйвер пристрою повинен починатися з заголовка драйвера. Він має довжину 18 байтів, розділених на 5 полів:
ПЕРШЕ ПОЛЕ (DD) завжди містить значення -1 (FFFFFFFFh), і коли MS DOS завантажує драйвер, то воно замінюється на стартовий адресу наступного драйвера. Таким чином, система може шукати наступний драйвер по ланцюжку. У останнього завантаженого драйвера в цьому полі залишається значення -1.
ДРУГЕ ПОЛЕ (DW) це область атрибутів драйвера. Призначення деяких бітів цього слова:
15 = 1 символьне пристрій, = 0 блоковий пристрій;
14 = 1 підтримує IOCTL (керуючі послідовності контролю введення / виводу), 0 = не підтримує IOCTL
13 (якщо біт 15 = 0) = 0 формат IBM = 1 формат, відмінний від IBM (якщо біт 15 = 1) = 0 не дозволені режим виведення до сигналу зайнятості (Output-Till-Busy) = 1 режим виведення до сигналу зайнятості підтримується
12 не визначений
11 = 0 використовувати тільки виклики DOS 2.x = 1 для DOS 3.x підтримуються виклики, пов'язані з відкриттям/закриттям пристрої та переміщуваної середовищем (Open / Close / RM), ігнорується для DOS 2.x
10 не визначений
9 не визначено
8 не визначений
7 не визначено
6 не визначений
5 не визначений
4 не визначений
3 = 1 годинник
2 = 1 нульове пристрій | біти показують, які
1 = 1 пристрій стандартного висновку | стандартні пристрої
0 = 1 пристрій стандартного введення - обсл. даний драйвер
Третє і четверте (DW) поля містять зміщення для процедур реалізації стратегії та обробки переривання.
П'ЯТА поле містить ім'я пристрою. Ім'я містить 8 символів і воно повинно бути вирівняні по лівому краю з завершальними пробілами.
Приклад заголовка драйвера:
CSEG SEGMENT PUBLIC 'CODE'; встановлюємо кодовий сегмент
ORG 0; цей рядок необов'язкова
ASSUME CS: CSEG, DS: CSEG, ES: CSEG
DEVICE12 PROC FAR; драйвер це далека процедура
DD 0FFFFFFFFH; адресу наступного драйвера
DW 8000H; байт атрибутів
DW DEV_STATEGY; адреса процедури стратегії
DW DEV_INTERRUPT; адреса процедури переривання
DB 'AUX'; ім'я пристрій (доповнене пробілами)