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

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'; ім'я пристрій (доповнене пробілами)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]