Синхронный и асинхронный ввод-вывод

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

Простейшим вариантом асинхронного вывода является так называемый буферизо­ванный вывод данных на внешнее устройство, при котором данные из приложения передаются не непосредственно на устройство ввода-вывода, а в специальный си­стемный буфер - область памяти, отведенную для временного размещения пере­даваемых данных. В этом случае логически операция вывода для приложения счита­ется выполненной сразу же, и задача может не ожидать окончания действительного процесса передачи данных на устройство. Реальным выводом данных из систем­ного буфера занимается супервизор ввода-вывода. Естественно, что выделение буфера из системной области памяти берет на себя специальный системный про­цесс по указанию супервизора ввода-вывода. Итак, для рассмотренного случая вывод будет асинхронным, если, во-первых, в запросе на ввод-вывод указано на необходимость буферизации данных, а во-вторых, устройство ввода-вывода до­пускает такие асинхронные операции, и это отмечено в UCB.

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

144_____________ Глава 5. Управление вводом-выводом в операционных системах

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

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

Аппаратуру ввода-вывода можно рассматривать как совокупность аппаратных процессоров, которые способны работать параллельно друг другу, а также парал­лельно центральному процессору (процессорам). На таких «процессорах» выпол­няются так называемые внешние процессы. Например, для печатающего устрой­ства (внешнее устройство вывода данных) внешний процесс может представлять собой совокупность операций, обеспечивающих перевод печатающей головки, про­движение бумаги на одну позицию, смену цвета чернил или печать каких-то сим­волов. Внешние процессы, используя аппаратуру ввода-вывода, взаимодействуют как между собой, так и с обычными «программными» процессами, выполняющи­мися на центральном процессоре. Важным при этом является обстоятельство, что скорости выполнения внешних процессов будут существенно (порой на порядок или больше) отличаться от скорости выполнения обычных {внутренних) процес­сов. Для своей нормальной работы внешние и внутренние процессы обязательно должны синхронизироваться. Для сглаживания эффекта значительного несоответ­ствия скоростей между внутренними и внешними процессами используют упомя­нутую выше буферизацию. Таким образом, можно говорить о системе параллель­ных взаимодействующих процессов (см. главу 7).

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

Организация внешней памяти на магнитных дисках___________________________ 145

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