Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
90
Добавлен:
03.06.2014
Размер:
2.18 Mб
Скачать

47. Состав и характеристика программных средств СВВ. Методы организации файлов и методы доступа к файлам. Общая структура процедуры управления операциями ввода-вывода.

Программные средства управления вводом-выводом.

Блочно-ориентированный ввод-вывод – для устройств последовательного ввода-вывода, ленты Записе-ориентированный ввод-вывод – магнитные диски и устройства прямого доступа.

Подсистема управления данными обеспечивает работу с файлами:

-блочно-ориентированный ввод-вывод для файлов последовательного доступа;

-записе-ориентированный ввод-вывод для файлов прямого доступа.

Система управления устройствами обеспечивает распределение устройств содержит три подсистемы:

Диспетчеризация устройств между задачами. Подсистема буферизации загрузки и выгрузки данных

Набор драйверов для управления операциями ввода-вывода в конкретных ВУ.

Основные компоненты процедуры управления ввода-вывода общего вида

1.Подготовительная (инициализирующая) часть:

Формирование областей для хранения данных и создание указателей на эти области. Указания типа и логического номера внешнего устройства.

Задание режима передачи данных и направления передачи.

Этот этап обычно реализует процессор, который осуществляет подготовку.

2. Планирование, проверка готовности и запуск устройства. Выбор канала.

Выбор внешнего устройства.

Замена логических номеров на физические адреса. Проверка готовности для выполнения операции. Запуск устройства для работы.

3.Выполнение устройством операции ввода-вывода

Для реализации используются драйверы и программы управления данными

4. Завершение операцииввода-вывода; следовательно, освобождаются занимаемые области памяти и устройства, участвовавшие в операции.

104

48. Назначение и возможные способы реализации драйверов внешних устройств. Структура и реализация символьного драйвера.

Драйвер представляет собой специализированный программный модуль, управляющий внешним устройством. Драйверы обеспечивают единый интерфейс для доступа к различным устройствам, тем самым устраняя зависимость пользовательских программ и ядра ОС от особенностей аппаратуры.

Возможны четыре варианта написания драйвера:

1.Непосредственно написание драйвера на уровне битов портов ввода-вывода и включение его в собственную программу; используется в случае редко используемых драйверов и специализированных машин (малоперспективно).

2.Подключение драйвера в оверлейном режиме (сокращение занимаемой области памяти).

3.Написание драйвера как резидентного обработчика прерываний. Достоинство: доступен всем программам. Недостаток: как правило, доступен только из ассемблера.

4.Создание устанавливаемого в операционной системе драйвера, который включается в файл конфигурации config.sys с помощью команды типа device = path\my_driver

Хорош тем, что драйвер полностью поддерживается средствами операционной системы.

Соответственно к нему применимы команды операционной системы вида: copy a:\ my_driver c:\drv

Во-вторых, с ним можно работать из языков высокого уровня с помощью операций работы с файлами.

Устанавливаемые драйверы бывают двух типов: блочные и символьные.

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

Символьный драйвер состоит из следующих элементов:

1.Заголовок драйвера – содержит имя устройства и смещение адресов для вызова процедуры стратегии и обработчика прерываний

2.Процедура стратегии. Задача – сохранение дальнего адреса на буфер запроса. Один раз при инициализации системы.

3.Буфер запроса – основная часть драйвера, реализующая взаимодействие между драйвером

иприкладной программой. Основными полями являются код ВУ, код команды ввода-вывода и статус выполнения операции. Буфер запроса, получая необходимую, команду передает ее в:

4.Обработчик прерываний, который является таблично-управляемой процедурой функций ввода-вывода.

105

Драйвер обычно записывается как самостоятельный модуль, но без PSP, поэтому не может запускаться самостоятельно.

1. Атрибуты:

15 бит :

1- символьный драйвер

 

 

0

– блочный драйвер

14

бит : поддержка IOCTL

 

13

бит : формат блоков: 1

– IBM, 0 – любой другой

………

 

 

 

 

 

3 бит :

1 – часы, 0

– не часы

2 бит :

1

– null, 0 – не null

1 бит :

1

– STDOUT (стандарт вывода), 0 - STDIN (стандарт ввода)

2. Процедура стратегии.

Процедура стратегии выполняются только один раз на этапе загрузки и служит для запоминания длинного указателя на буфер запроса, создаваемый для драйвера самой операционной системой.

DEV_STRAT:

mov cs:SEG_PQBF, es mov cs:OFF_PQBF, es

ret

SEG_PQBF DW ?

OFF_PQBF DW ?

3. Буфер запроса.

106

Структура данных, через которые прикладная программа связывается с драйвером (прикладная программа задает вид операции ввода-вывода и место расположения данных, а драйвер возвращает ей свой статус (все идет через буфер запроса)).

Буфер состоит их стандартной части 13 байт, называемой заголовок и последующей части, называемой данные, содержащей различную информацию в зависимости от вида драйвера и исполнительной операции ввода-вывода.

Заголовок запроса.

+0 : длина буфера запроса

+1 : код внешнего устройства

+2 : код команды ввода-вывода

+3 : статус

+5 : резерв

+13d : данные

4. Обработчик прерывания.

Это только процедура, которая таблично вызывает функцию, реализующую команду вводавывода; она завершается командой RET и выдачей статуса.

Код обработчика прерываний

dev_intpr:

push A

 

 

mov ax, SEG_PQBF

;

mov es, ax

 

;

mov bx, OFF_PQBF

;

mov al, es:[bx+2]

;

shl al, 1

 

;

xor ah, ah

 

; Подготовка и загрузка

lea di, FUN_TAB

; смещения функции

add di, ax

 

; в таблицу функции

jmp word ptr[DI]

;

 

FUN_TAB LABEL WORD;

DW INITIALIZE

DW CHECK_MEDIA

. . . . . . .

DW INPUT_DATA

107

Тринадцать

 

. . . . . . .

функций

 

DW OUPUT_DATA

 

 

. . . . . . .

 

 

DW OUTPUT_STATUS

 

 

. . . . . . .

 

 

DW IOCTL_OUT

Определенная функция находится в определенной строке таблицы. Предположим что драйвер поддерживает только две функции init и out, тогда: CHECK_MEDIA:

. . . . . .

INPUT_DATA:

. . . . . .

IOCTL_OUT:

or es.word ptr[bx]+3, 8103h JMP QUIT

INITIALIZE: lea ax, E_O_P

mov es, word ptr[bx]+14, ax mov es, word ptr[bx]+16, cs JMP QUIT

OUTPUT_DATA

QUIT:

OR es:word ptr[bx]+3, 100h

POPA

RET

В поле статус, бит 15 – ошибка

9 – драйвер занят

8 – функция завершена с 0 – 7 – код ошибки

Пример: 8103h означает 8 – ошибка , 1 – операция завершена, 03 – неизвестная ошибка. После разработки драйвера нужно вставить его в config.sys

Надо учесть, что драйвер не прощает ошибок. Так как он скрыт от пользователя, поэтому нельзя пользоваться отладчиком.

108

Соседние файлы в папке несколько программ