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

36 Вопрос. Механизм ввода-вывода

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

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

обращения к диску, как правило, являются последовательно, этот механизм очень эффективен.

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

активизируемый чуть позже, вызывает процедуру-стратега, чтобы та выбрала "подвешенный" запрос и удовлетворила его, выдав необходимые команды контроллеру диска. Когда операция ввода/вывода завершается, контроллер диска возбуждает прерывание, и соответствующий обработчик снова вызывает процедуру-стратега для обработки другого ждущего запроса, если это необходимо.

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

запросов отдельно, что повышает производительность.

36. Вопрос. Дескрипторы очереди запросов. Дескриптор запроса. Процесс планирования ввода-вывода

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

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

Заполненная до отказа очередь запросов отрицательно влияет на производительность системы, потому что она вынуждает многие процессы находиться в приостановленном состоянии в ожидании завершения операций ввода/вывода. Поэтому, если количество запросов, ждущих пересылку данных в определенном направлении максимальное, то ядро уже считает очередь

переполненной и пытается понизить скорость создания новых запросов.

Дескриптор запроса

Каждый ждущий запрос к блочному устройству представлен дескриптором запроса, который хранится в структуре request, содержащей всю необходимую информацию для выполнения запроса.

Первоначально общий слой работы с блочными устройствами создает запрос, включающий в себя только одну структуру bio («block I/O»). Впоследствии планировщик ввода/вывода

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