Тема 2.4 Обслуживание ввода-вывода

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

Управление вводом/выводом – одна из основных функций любой операционной системы.

Организация ввода/вывода в различных ОС имеет много общего, а реализация сильно отличается от системы к системе.

Основные понятия и концепции организации ввода/вывода в ОС

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

Главный принцип ввода/вывода – любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только самой ОС. Для обеспечения этого принципа в большинстве процессоров вводятся два режима: режим пользователя, выполнение команд ввода/вывода запрещено; режим супервизора, выполнение команд ввода/вывода разрешено.

Использование команд ввода/вывода в пользовательском режиме вызывает исключение (прерывание) и управление передается ОС.

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

Непосредственное обращение к внешним устройствам из пользовательских программ не разрешено по трем причинам:

- возможные конфликты при доступе к устройствам ввода/вывода;

- повышение эффективности использование этих ресурсов;

- ошибки в программах ввода/вывода могут привести к разрушению системы.

Менеджер ввода-вывода

Компонента ОС, выполняющая ввод/вывод называется супервизором ввода/вывода.

2.4.2.1.Основные задачи супервизора следующие:

- получение, проверка на корректность и выполнение запросов на ввод/вывод от прикладных задач и от модулей самой системы;

- планирование ввода/вывода: выполнение или постановка в очередь;

- инициирование ввода/вывода – передача управления драйверам;

- при получении сигналов прерывания передача управления соответствующей программе обработки прерывания;

- передача сообщений об ошибках, если они появляются;

- передача сигнала о завершении операции ввода/вывода.

2.4.2.2. Состав супервизора:

1. верхний слой – системные вызовы и нижний слой – взаимодействие с контроллерами устройств

2. драйверы – низкоуровневый (традиционные) и высокоуровневые (общие)

3. специальный файл – спулинг файл

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

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

2.4.3. Основные режимы ввода/вывода:

1. режим обмена с опросом готовности Центральный процессор посылает устройству управления команду для ввода/вывода, которую оно исполняет, преобразуя в сигнал, понятный ему самому. Устройства ввода/вывода намного медленнее центрального процессора, поэтому сигнал готовности приходится очень долго ждать, постоянно опрашивая устройство интерфейса. В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, выполняет в цикле команду «проверить готовность устройства». Центральный процессор в таком режиме используется нерационально.

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

2.4.5. Виды ввода-вывода:

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

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

Для организации асинхронного ввода необходимо:

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

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

- запрос на операцию ввода разбить на две части (два запроса).

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

Накопители на магнитных дисках обладают крайне низкой скоростью по сравнению с быстродействием центральной части процессора. С учетом того, что операции чтения/записи на диск производятся несколькими большими процессами или сегментами памяти, средняя скорость работы процессора с оперативной памятью на 2 – 3 порядка выше, чем скорость передачи данных из внешней памяти на магнитных дисках в оперативную память. Чтобы сгладить такое несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных.

Простейший вариант – использование двойного буферирования: пока в один буфер заносятся данные с магнитного диска, из второго буфера ранее считанные данные могут быть прочитаны запросившей их программой. Аналогичный процесс происходит при записи. Буферирование используется во всех ОС.

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

2.4.6. Функции ОС по обслуживанию ввода-вывода:

1. Организация параллельной работы устройств ввода-вывода и процессора

2. Согласование скорости обмена, буферизация и кэширование данных

3. Разделение устройств и данных между процессами

4. Обеспечение удобного интерфейса между устройствами ввода-вывода и ОС

5. Динамическая выгрузка и загрузка драйверов устройств ввода-вывода

6. поддержка синхронных и асинхронных операций ввода-вывода

Наши рекомендации