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

Глава 5. Организация ввода-вывода в современных ос

§ 5.1. Общие принципы организации ввода-вывода

Обеспечение операций ввода-вывода, наравне с обеспечением непосредственно

вычислительных операций, является одной из основных задач любой операционной сис-

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

тью и устройствами, внешними по отношению к памяти и процессору, такими как жест-

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

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

да-вывода лежит рассмотренный ранее механизм прерываний, который обеспечивает

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

ми запущенными процессами. Вообще с точки зрения процессора ввод-вывод информа-

ции так же является процессом.

Следует отметить, что запись или чтение большого количества информации из ад-

ресного пространства ввода-вывода (например, с жесткого диска) приводят к увеличе-

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

тральный процессор. Для освобождения процессора от операций последовательного

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

механизм прямого доступа внешних устройств к памяти - ПДП (Direct Memory Access,

DMA). Для технической реализации этого метода применяется специализированный

контроллер прямого доступа к памяти, имеющий несколько спаренных линий - каналов

DMA, которые могут подключаться к различным устройствам. В отличие от прерыва-

ний, где один номер прерывания мог соответствовать нескольким устройствам, каналы

DMA всегда находятся в монопольном владении устройств.

В общем виде система ввода-вывода персонального компьютера представлена на

рис.5.1 [3].

Рис.5.1. Система ввода-вывода ПК

122

Два нижних уровня этой системы составляет аппаратную часть, т.е. сами устройст-

ва, непосредственно выполняющие операции, и их контроллеры, служащие для органи-

зации совместной работы устройств и остальной вычислительной системы. Следующий

уровень составляют драйверы устройств ввода-вывода, скрывающие от разработчиков

операционных систем особенности функционирования конкретных устройств и обеспе-

чивающие четко определенный интерфейс между аппаратными средствами и следую-

щем уровнем - базовой подсистемой ввода-вывода, которая, в свою очередь, предостав-

ляет механизм взаимодействия между драйверами устройств и ядром операционной

системы.

Управление вводом-выводом осуществляется следующим образом. Центральный

процессор посылает устройству управления команду выполнить некоторое действие для

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

налы центрального процессора в сигналы, понятные устройству ввода/вывода. К сожа-

лению, быстродействие устройства ввода-вывода намного меньше быстродействия цен-

трального процессора, поэтому сигнал готовности приходилось ожидать достаточно

долго, постоянно опрашивая соответствующую линию интерфейса на наличие или от-

сутствие нужного сигнала. В первых ОС в это время центральный процессор простаи-

вал. В современных ОС во время ожидания сигнала готовности от устройства ввода-

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

появлении сигнала готовности генерируется прерывание от соответствующего устройст-

ва ввода/вывода. Вышесказанное продемонстрировано на рис.5.2 [2].

Рис.5.2. Механизм управления вводом-выводом

Все системные вызовы, связанные с осуществлением операций ввода-вывода, по

способам реализации взаимодействия процесса и устройства ввода-вывода можно раз-

бить на три группы.

К первой, наиболее привычной для большинства программистов группе относятся

блокирующиеся системные вызовы. Как следует из самого названия, применение тако-

го вызова приводит к блокировке инициировавшего его процесса, т. е. процесс перево-

дится операционной системой из состояния исполнение в состояние ожидание. Завер-

шив выполнение всех операций ввода-вывода, предписанных системным вызовом,

операционная система переводит процесс из состояния ожидание в состояние готов-

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

окончательный возврат из системного вызова.

123

Ко второй группе относятся неблокирующиеся системные вызовы. В данном слу-

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

ввода-вывода полностью, частично или не выполнив совсем, в зависимости от текущей

ситуации (состояния устройства, наличия данных и т. д.). В качестве примера такого вы-

зова можно привести периодическую проверку на поступление информации с клавиату-

ры при выполнении трудоемких расчетов.

К третьей группе относятся асинхронные системные вызовы. Процесс, использо-

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

зов инициирует выполнение необходимых операций ввода-вывода и немедленно воз-

вращается, после чего процесс продолжает свою регулярную деятельность. Об

окончании завершения операции ввода-вывода операционная система впоследствии ин-

формирует процесс изменением значений некоторых переменных, передачей ему сигна-

ла или сообщения или каким-либо иным способом.

Необходимо четко понимать разницу между неблокирующимися и асинхронными

вызовами. Неблокирующийся системный вызов для выполнения операции чтения вер-

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

так и меньшее их количество или вообще ничего. Асинхронный системный вызов для

этой операции также вернется немедленно, но требуемое количество байт все равно бу-

дет прочитано в полном объеме.

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

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

Под буфером обычно понимается некоторая область памяти для запоминания ин-

формации при обмене данных между двумя устройствами, двумя процессами или про-

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

нию буферов при выполнении операции ввода-вывода [2].

Первая причина буферизации - это разные скорости приема и передачи информации, ко-

торыми обладают участники обмена. Вторая причина - это разные объемы данных, ко-

торые могут быть приняты или получены участниками обмена единовременно. Третья

причина буферизации связана с необходимостью копирования информации из приложе-

ний, осуществляющих ввод-вывод, в буфер ядра операционной системы и обратно.

Под словом кэш (cash – «наличные») обычно понимают область быстрой памяти,

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

назначенную для ускорения работы вычислительной системы. В современных системах

для этой задачи обычно используется кэш-память центрального процессора. Не следует

смешивать понятия буферизации и кэширования. Буфер обычно содержит единственный

набор данных, существующий в системе, в то время как кэш по определению содержит

копию данных, существующих где-нибудь еще. Функции буферизации и кэширования

не обязательно должны быть локализованы в базовой подсистеме ввода-вывода. Они мо-

гут быть частично реализованы в драйверах и даже в контроллерах устройств, скрытно

по отношению к базовой подсистеме.

С точки зрения программиста, наиболее часто используемой операцией ввода-

вывода является ввод-вывод на жесткие диски. В этом случае обычно речь идет о работе

с файлами, т.е. о файловом вводе-выводе. Рассмотрим принципы размещения данных на

жестком диске более подробно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]