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

25. Синхронный ввод/вывод в однозадачных и многозадачных системах

Самый простой механизм вызова функций драйвера – косвенный вызов соответствующих процедур, составляющих тело драйвера, подобно тому, как это делается в MS DOS и ряде других однозадачных систем.

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

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

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

26. Асинхронный ввод/вывод

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

Обычно управляется прерываниями.

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

В системах семейства Unix драйверы блочных устройств обязательно асинхронные. Кроме того, в современных версиях системы асинхронными драйверами являются драйверы потоковых устройств. Многие другие ОС, в том числе однозадачные, используют исключительно асинхронные драйверы.

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

27. Дисковый кэш и спулинг

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

1) Размещение в памяти структур файловой системы – каталогов, FAT или таблицы инодов.

2) Отложенная запись – позволяет более равномерно распределить загрузку канала.

3) Группировка запросов на запись. Система имеет пул буферов отложенной записи, который и называется дисковым кэшем.

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

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

6) Сортировка запросов по номеру блока на диске. Должна приводить к уменьшению времени позиционирования головок чтения/записи.

***

Проблемы:

1) При использовании отложенной записи программа не знает, успешно ли завершилась физическая запись.

2) Если в промежутке между запросом и физической записью произойдёт сбой системы, данные будут утеряны.

3) Необходимость выделения памяти под дисковый кэш.

***

Спулинг – метод работы с внешними устройствами ввода/вывода в многозадачной ОС, при которой у задач создаётся иллюзия одновременного доступа к устройству. При этом, однако, задачи работают в режиме offline: выводимые данные накапливаются системой, а затем выводятся на устройство так, чтобы они не смешивались.

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

Классический спулинг реализован в ОС семейства Unix. В этих ОС вывод задания на печать осуществляется командой lpr, копирующей предназначенные для печати данные в каталог/usr/spool/lp. Каждая порция данных помещается в отдельный файл, имена файлов «инкрементно возрастают» и тем самым образуют очередь.

Системный процесс-демон lpd периодически просматривает каталог. Если там что-то появилось, а печатающее устройство свободно, он копирует появившийся файл на устройство. По окончании копирования он удаляет файл.