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

6. Таблиця відкритих файлів (sft). Стандартні файлові маніпулятори та їх розташування в sft.

Стандартні файлові маніпулятори. Доступ до файлів здійснюється за допомогою файлових маніпуляторів, які являють собою так сказати синонім файлу. Вони не є змінними, а тому їх не можна безпосередньо присвоювати іншим змінним або передавати в функції (для цього потрібно, що називається, піти іншим шляхом).

Є й стандартні Перловська файлові маніпулятори. Вони називаються STDIN (Стандартний ввід), STDOUT (стандартний висновок) і STDERR (стандартний потік помилок). Наприклад параметри скрипту з форми передаються саме через STDIN (при умови використання методу POST).

Структура SFT

Смещение, байт

Размер, байт 

Имя поля

Опис поля

0

4

next 

Покажчик на наступну таблицю файлів SFT 

4

2

file_count 

Кількість файлів, описаних в цій таблиці за допомогою блоків DFCB 

Таблиця SFT складається з DFCB блоків. Кожен такий блок описує один файл. Структура DFCB блоку наведена в Табл. 4.3. У DFCB блоці файлу консолі записаний адресу драйвера консолі. Змінюючи цю адресу можна передавати управління іншим драйверам консолі. На Рис. 4.14 наведено приклад DFCB блоку файлу консолі. 

7. Таблиця файлів завдань jft та її зв’язок з таблицею відкритих файлів sft.

8. Обробка переривань по <Ctrl/C>, <Ctrl/Break>.

Особливості обробки переривань по Ctrl-C і Ctrl-Break (додатково: про особливості взаємодії клавіатурного і системного контролера переривань та обліку значень сегментних регістрів в обробниках переривань) У цьому параграфі розглядаються досить складні для програмістів питання, пов'язані з обробкою в комп'ютері процедур, викликаних відомим натисканням клавіш Ctrl-C іліCtrl-Break, а також ряд питань з реалізації апаратних переривань від клавіатури.

У багатьох прикладних програмах клавіші Ctrl-C зарезервовано для примусового завершення програми (для цього поєднання клавіш формує код ASCII 03h). Всі сервісні функції DOS діляться на дві групи - функції введення/виведення з номерами 01h - 0Ch і всі інші з номерами 00h, 0Dh - 6Ch, які умовно називають "дисковими" (обслуговують в основному операції з дисками і файлами). Різниця двох зазначених груп виявляється в тому, що кожна з них:

• має свій внутрішній стек, який і використовується при виклику відповідної сервісної функції з прикладної програми,

• По-різному виконується перевірка на Ctrl-C. Функції введення/виводу в своїй більшості перевіряють код 03h в кільцевому буфері клавіатури і при його виявленні викликають переривання Int 23h. Системний обробник цього переривання завершує поточної програми викликом відомої нам функції DOS 4Ch. Дискові функції виконують перевірку на Ctrl-C лише в тому випадку, якщо встановлено прапор Break, тобто була виконана команда DOS Break on.

Оскільки перевірка на Ctrl-C здійснюється тільки при виконанні функції DOS, натисканням на Ctrl-C в системі MS-DOS не можна завершити чисто обчислювальну задачу, - потрібно чекати виклику небудь системної функції. Проте завершення завдання натисканням клавіші Ctrl-C є не завжди бажаним дією, так як при цьому можуть залишитися відновленими змінені вектор переривань. Саме, тому ряд прикладних програм вводять власні обробники переривання new_Int23h.

Система MS-DOS надає й іншу можливість втручання в хід виконання програми - натискання клавіш Ctrl-Break. Розпізнавання цієї комбінації також здійснюється системним обробником 09h. При цьому виконується переривання BIOS 1Bh, що містить єдину команду Iret. Проте в процесі початкового завантаження комп'ютера DOS підміняє вектор BIOS 1Bh своїм обробником. Оброблювач DOS 1Bh виконує наступні дії:

  • Очищає кільцевої буфер клавіатури,

• Записує прапор Ctrl-Break (код 03h) в клітинку області даних BIOS за адресою 40h: 71h.

• Записує код 03h в буферний регістр драйвера послідовного порту CON.

Остання обставина для функцій DOS введення / виведення рівносильно запису даного коду в кільцевої буфер клавіатури. Тому, якщо прикладна програма викликає якусь функцію DOS, що виконує перевірку на Ctrl-С, то управління знову буде передано оброблювачу Int 23h. Отже, системна обробка поєднання клавіш Ctrl-С і Ctrl-Breakвиполняется фактично однаково, хоча відмінність є. Справа в тому, що драйвер введення / виводу на консоль CON (саме його використовують відповідні функції DOS) аналізує в кільцевому буфері клавіатури тільки самий останній з введених символів, тому якщо перед натисканням Ctrl-С були натиснуті небудь інші клавіші, то вони будуть маскувати код 03h (ознака цієї комбінації). Введення ж Ctrl-Break з обробником DOS 1Bh записує код 03h не в кільцевої буфер, а безпосередньо в буферний регістр драйвера CON. Тому комбінацію Ctrl-Break не можна замаскувати.

Програми, бажаючі виключити переривання по Ctrl-Break, використовують власний обробник 1Bh по Ctrl-Break, які, як правило, містять єдину команду Iret.

Для виключення ж переривання по Ctrl-С можна замість заміни системного обробника Int 23h новим, прикладним, ліквідувати саму причину виклику цього обробника, змінивши системний обробник 09h.1 Новий обробник new_09h, зчитуючи дані порту 60h повинен порівнювати цей скан-код з кодом клавіші З (2Eh) і при його виявленні перевіряти статус клавіші Ctrl у байті прапорів клавіатури. Якщо вона також натиснута, то необхідно скинути другий за номером біт (див. рис. 5). Двох цих операцій цілком достатньо, щоб програма не реагувала на натискання комбінацій Ctrl-С і Ctrl-Break. У програмі prg3 реалізований запропонований спосіб виключення переривань. Основний модуль програми здійснює виведення на екран у нескінченному циклі символи '*' за допомогою функції DOS 02h. Вихід з програми можливий тільки при натисканні клавіші ESC

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