Процедури обслуговування переривань 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Процедури обслуговування переривань



Не дивлячись на те, що Турбо Паскаль має великий набір інструментальних засобів для використання можливостей MS-DOS, в багатьох випадках виникає необхідність прямого звертання до функцій MS-DOS для використання деяких специфічних засобів операційної системи, для організації обміну інформацією в оперативній пам'яті. Для більш повного використання можливостей MS-DOS в модулі DOS знаходиться дві процедури: Intr і MsDos.

В процедурі

Intr (IntNo: BYTE; VAR Regs: REGISTERS);

яка виконує задане програмне переривання, IntNo – номер програмного переривання; REGISTERS являється типом запису, визначеним в модулі DOS наступним чином:

TYPE

REGISTERS = RECORD

CASE INTEGER OF

0: (AX, BX, CX, DX, BP, SI, SI, DS, ES, Flags: WORD);

1: (AL, AH, BL, BH, CL, CH, DL, DH: BYTE);

END;

Поля запису відповідають регістрам процесора.

Процедура

MsDos (VAR Regs: REGISTERS);

Виконує виклик функції DOS.

Запис REGISTERS представляє собою набір регістрів процесора, а варіант в цьому записі дозволяє працювати з першими чотирма регістрами чи послідовно, чи з їх старшими і молодшими байтами окремо. Коли виконується процедура Intr, значення полів AX, BX, CX, DX, BP, SI, SI, DS, ES завантажуються у відповідні регістри процесора. Після того як переривання обірвано, склад регістрів процесора завантажується в запис Regs, а склад регістрів прапорів копіюється в поле Flags. Таким чином, можна отримати доступ до результату роботи процедури переривань.

Для застосування процедури Intr необхідно знати деякі тонкості роботи операційної системи і добре знати семантику, параметрів і результатів викликаного переривання.

Переривання номер $21 називається перериванням DOS і об’єднує в собі велику кількість різних функцій.

Результат звернення до процедури MsDos буде той же, що і при зверненні до процедури Intr з номером переривання $21.

Для встановлення нової адреси обробника переривань використовується процедура

SetIntVec (IntNo: BYTE; Vector: POINTER);

Де IntNo – номер переривання, яке необхідно перевизначити; Vector – адреса нової процедури обробки переривань. Для того щоб змінити реакцію системи на переривання і визначити обробник користувача, SetIntVec просто змінює запис в системній області Dos, яка називається областю векторів переривань, але при цьому старий вектор, тобто адреса старої процедури обробки переривань, не зберігається. Вона може бути необхідною, щоб через деякий час відновити стару реакцію на переривання чи щоб при виклику переривання спочатку спрацьовував новий обробник, який потім передавав би управління оригінальному (старому) обробнику. Цей принцип використовує більшість резидент них програм. Таким чином, працездатність системи не порушується, коли декілька програм перехвачують одне переривання. Резидентна програма спочатку відпрацьовує сама, потім передає управління іншій програмі і так далі, а в кінці управління передається операційній системі. Тому дуже важливо зберігати адресу старого обробника переривань. Для цього можна використовувати процедуру

GetIntVec (IntNo: BYTE; VAR Vector: POINTER);

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

ПРОГРАМИ, РЕЗИДЕНТНІ В ПАМ'ЯТІ

Існує іще одна процедура, яка відноситься до процедур управління процесами. Це процедура Keep. Її форма така:

Keep (ExitCode: WORD);

Виклик цієї процедури призводить до завершення роботи програми, але при цьому залишає її в пам'яті. Такі програми носять назву програм, резидентних в пам'яті, чи просто резидентних програм. На цьому принципі побудовані драйвери пристроїв і різноманітні сервісні програми. Зробити резидентною можна як програму типу COM, так і програму типу EXE, однак так як із-за відмінностей у внутрішній структурі програми типу COM займають в пам'яті менше місця, то резидентні програми частіше всього реалізують в цій формі. Після того як програма залишилась резидентною в пам'яті, вона передає управління командному процесору, а сама якби „ завмирає”. Для того щоб активізуватися в потрібний момент, програма обов’язково повинна перехватити яке-небудь переривання, наприклад, переривання від клавіатури. Після натиснення потрібної комбінації клавіш програма перехвачує управління і виконує свою задачу.

ПРОЦЕДУРИ РОБОТИ З ДАТОЮ І ЧАСОМ

Модуль DOS представляє програмісту можливість доступу до системних часів і календаря, а також дає можливість змінити дату і час створення файлу. Для доступу до системної дати використовують процедури GetDate і SetDate.

Процедура

GetDate (year, month, day, day_of_week: WORD);

Повертає поточну дату, встановлену в системі.

Процедура

SetDate (year, month, day: WORD);

Встановлює поточну дату в системі.

Для доступу до системних часів використовуються процедури SetTime і GetTime. Так як і процедури GetDate і SetDate, процедури роботи з системним часом дозволяють просто отримувати і змінювати значення системного часу і можуть використовуватися, наприклад, для визначення тривалості виконання частин програми і програми в цілому.

Процедура

GetTime (VAR hour, minute, second, hund: WORD);

Повертає поточний час, встановлений в системі.

Процедура

SetTime (hour, minute, second, hund: WORD);

Встановлює поточний час в операційній системі.

Для роботи з датою створення файлу використовується процедура

GetFTime (VAR F: VAR Time: LONGINT);

яка повертає час і дату створення файлу. Змінна F повинна бути файловою змінною. Час і дата повертається в змінній Time в упакованому форматі у вигляді подвійного слова (32 біта), і для їх розпаковки використовується процедура

UnpackTime (Time: LONGINT; VAR DT: DateTime);

Ця процедура перетворює значення, передане в параметрі Time, а запис DT типу DateTime (дата і час).

Щоб змінити дату створення файлу, використовуються дві інші процедури: PackTime i SetFTime.

Процедура

PackTime (VAR T: DateTime; VAR Time: LONGINT);

Перетворює запис типу DateTime в подвійне слово, яке використовується процедурою

SetFTime (VAR F; Time: LONGINT);

Ця процедура встановлює дату створення файла.

ПРОЦЕДУРИ І ФУНКЦІЇ ПЕРЕВІРКИ СТАНУ ДИСКУ

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

Функція

DiskFree (Drive: BYTE): LONGINT;

повертає кількість вільних байтів на вказаному диску, деDrive – задає номер диску: 0 – поточний диск, тобто той диск, з якого запущена програма; 1 – дисковод А, 2 – дисковод В, 3 – диск С, 4 – диск D і так далі.

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

Функція

DiskSize (Drive: BYTE): LONGINT;

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

Процедура GetVerify використовується для отримання значення прапора перевірки DOS, який має назву Verify. Цей прапор слугує для визначення методу запису даних на диск. Якщо Verify знаходиться у включеному стані, тобто дорівнює ON (істинна), то після того, як інформація записана на диск, вона знову читається і порівнюється з оригіналом (звідси його назва Verify – перевіряти). Якщо ж прапор знаходиться у вимкнутому стані, тобто OFF (обман), то інформація записується на диск без перевірки. Існують різні погляди з приводу того, чи варто вмикати даний прапор під час роботи, але практика показує, що вінчестер – досить надійний пристрій і інформація на нього або записується добре, або не записується зовсім. До того ж дана перевірка правильності запису сильно зношує вінчестер і дисководи (адже потрібно записувати, а потім ще і читати) і значно збільшує час запису. Тому вмикати цей прапор необхідно, коли цінна інформація записується з вінчестера на гнучкі диски. Формат процедури наступний:

GetVerify (VAR Verify: BOOLEAN);

Процедура ставить в параметр Verify значення ON, проходить перевірка правильності запису інформації на всі диски, якщо OFF – інформація записується без перевірки.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 231; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.233.58 (0.011 с.)