![](/user_photo/2706_HbeT2.jpg)
- •Глава 1. Принципы разработки программ в современных ос ................................. 12
- •§ 1.1. Операционные системы для пэвм ................................................................. 12
- •§ 1.2. Основы программирования в ос Windows ..................................................... 26
- •§ 4.3. Организация памяти в ос Windows................................................................. 103
- •§ 8.5. Обмен информацией по технологии связывания и внедрение объектов ......210
- •Глава 1. Принципы разработки программ в современных ос
- •§ 1.1. Операционные системы для пэвм
- •§ 1.2. Основы программирования в ос Windows
- •§ 1.3. Принципы разработки динамических библиотек
- •Глава 2. Организация многозадачности в современных ос
- •§ 2.1. Общие принципы организации многозадачности
- •§ 2.2. Основы многозадачности в ос Windows
- •Глава 3. Прерывания и исключения
- •§ 3.1. Система обработки прерываний
- •§ 3.2. Общие принципы обработки исключений
- •Глава 4. Организация памяти в современных ос
- •§ 4.1. Общие принципы организации памяти
- •§ 4.2. Способы распределения памяти
- •§ 4.3. Организация памяти в ос Windows
- •§ 4.4. Интерфейсы api-функций для управления памятью в ос Windows
- •Глава 5. Организация ввода-вывода в современных ос
- •§ 5.1. Общие принципы организации ввода-вывода
- •§ 5.2. Общие принципы размещения данных на магнитных дисках
- •§ 5.3. Организация файлового ввода-вывода в ос Windows
- •Глава 6. Реестр ос windows
- •§ 6.1. Структура и особенности реестра Windows
- •Глава 7. Организация безопасности в ос windows
- •§ 7.1. Технологии безопасности, реализованные в Windows
- •§ 7.2. Создание структуры security_attributes
- •Глава 8. Технологии обмена информацией в ос windows
- •§ 8.1. Обмен информацией посредством буфера обмена Windows
- •§ 8.2. Обмен информацией посредством каналов
- •§ 8.3. Обмен информацией с использованием сокетов
- •§ 8.4. Обмен информацией по технологии динамического обмена данными
- •§ 8.5. Обмен информацией по технологии связывания и внедрение объектов
- •Глава 9. Технологии обработки мультимедиа
- •§ 9.1. Обзор мультимедийных устройств Windows
- •§ 9.2. Элементарные api-функции для обработки звука
- •§ 9.3. Технология обработки формата riff
Глава 5. Организация ввода-вывода в современных ос
§ 5.1. Общие принципы организации ввода-вывода
Обеспечение операций ввода-вывода, наравне с обеспечением непосредственно
вычислительных операций, является одной из основных задач любой операционной сис-
темы. Под операциями ввода-вывода в целом понимается обмен данными между памя-
тью и устройствами, внешними по отношению к памяти и процессору, такими как жест-
кие диски, монитор, клавиатура, мышь, таймер и т.д. Для обеспечения этой возможности
используются аппаратные и программные средства. В основе реализации операций вво-
да-вывода лежит рассмотренный ранее механизм прерываний, который обеспечивает
параллельность работы центрального процессора с устройствами ввода-вывода и други-
ми запущенными процессами. Вообще с точки зрения процессора ввод-вывод информа-
ции так же является процессом.
Следует отметить, что запись или чтение большого количества информации из ад-
ресного пространства ввода-вывода (например, с жесткого диска) приводят к увеличе-
нию количества операций ввода-вывода что, в свою очередь, повышает нагрузку на цен-
тральный процессор. Для освобождения процессора от операций последовательного
вывода данных из оперативной памяти или последовательного ввода в нее реализован
механизм прямого доступа внешних устройств к памяти - ПДП (Direct Memory Access,
DMA). Для технической реализации этого метода применяется специализированный
контроллер прямого доступа к памяти, имеющий несколько спаренных линий - каналов
DMA, которые могут подключаться к различным устройствам. В отличие от прерыва-
ний, где один номер прерывания мог соответствовать нескольким устройствам, каналы
DMA всегда находятся в монопольном владении устройств.
В общем виде система ввода-вывода персонального компьютера представлена на
рис.5.1 [3].
Рис.5.1. Система ввода-вывода ПК
122
Два нижних уровня этой системы составляет аппаратную часть, т.е. сами устройст-
ва, непосредственно выполняющие операции, и их контроллеры, служащие для органи-
зации совместной работы устройств и остальной вычислительной системы. Следующий
уровень составляют драйверы устройств ввода-вывода, скрывающие от разработчиков
операционных систем особенности функционирования конкретных устройств и обеспе-
чивающие четко определенный интерфейс между аппаратными средствами и следую-
щем уровнем - базовой подсистемой ввода-вывода, которая, в свою очередь, предостав-
ляет механизм взаимодействия между драйверами устройств и ядром операционной
системы.
Управление вводом-выводом осуществляется следующим образом. Центральный
процессор посылает устройству управления команду выполнить некоторое действие для
устройства ввода-вывода. Устройство управления исполняет команду, транслируя сиг-
налы центрального процессора в сигналы, понятные устройству ввода/вывода. К сожа-
лению, быстродействие устройства ввода-вывода намного меньше быстродействия цен-
трального процессора, поэтому сигнал готовности приходилось ожидать достаточно
долго, постоянно опрашивая соответствующую линию интерфейса на наличие или от-
сутствие нужного сигнала. В первых ОС в это время центральный процессор простаи-
вал. В современных ОС во время ожидания сигнала готовности от устройства ввода-
вывода центральный процессор переключается на выполнение другой программы. При
появлении сигнала готовности генерируется прерывание от соответствующего устройст-
ва ввода/вывода. Вышесказанное продемонстрировано на рис.5.2 [2].
Рис.5.2. Механизм управления вводом-выводом
Все системные вызовы, связанные с осуществлением операций ввода-вывода, по
способам реализации взаимодействия процесса и устройства ввода-вывода можно раз-
бить на три группы.
К первой, наиболее привычной для большинства программистов группе относятся
блокирующиеся системные вызовы. Как следует из самого названия, применение тако-
го вызова приводит к блокировке инициировавшего его процесса, т. е. процесс перево-
дится операционной системой из состояния исполнение в состояние ожидание. Завер-
шив выполнение всех операций ввода-вывода, предписанных системным вызовом,
операционная система переводит процесс из состояния ожидание в состояние готов-
ность. После того как процесс будет снова выбран для исполнения, в нем произойдет
окончательный возврат из системного вызова.
123
Ко второй группе относятся неблокирующиеся системные вызовы. В данном слу-
чае системный вызов возвращается немедленно, выполнив предписанные ему операции
ввода-вывода полностью, частично или не выполнив совсем, в зависимости от текущей
ситуации (состояния устройства, наличия данных и т. д.). В качестве примера такого вы-
зова можно привести периодическую проверку на поступление информации с клавиату-
ры при выполнении трудоемких расчетов.
К третьей группе относятся асинхронные системные вызовы. Процесс, использо-
вавший асинхронный системный вызов, никогда в нем не блокируется. Системный вы-
зов инициирует выполнение необходимых операций ввода-вывода и немедленно воз-
вращается, после чего процесс продолжает свою регулярную деятельность. Об
окончании завершения операции ввода-вывода операционная система впоследствии ин-
формирует процесс изменением значений некоторых переменных, передачей ему сигна-
ла или сообщения или каким-либо иным способом.
Необходимо четко понимать разницу между неблокирующимися и асинхронными
вызовами. Неблокирующийся системный вызов для выполнения операции чтения вер-
нется немедленно, при этом может быть прочитано как запрошенное количество байтов,
так и меньшее их количество или вообще ничего. Асинхронный системный вызов для
этой операции также вернется немедленно, но требуемое количество байт все равно бу-
дет прочитано в полном объеме.
Для обеспечения операций ввода-вывода достаточно часто используются механиз-
мы буферизации и кэширования. Рассмотрим их более подробно.
Под буфером обычно понимается некоторая область памяти для запоминания ин-
формации при обмене данных между двумя устройствами, двумя процессами или про-
цессом и устройством. Существует три основные причины, приводящие к использова-
нию буферов при выполнении операции ввода-вывода [2].
Первая причина буферизации - это разные скорости приема и передачи информации, ко-
торыми обладают участники обмена. Вторая причина - это разные объемы данных, ко-
торые могут быть приняты или получены участниками обмена единовременно. Третья
причина буферизации связана с необходимостью копирования информации из приложе-
ний, осуществляющих ввод-вывод, в буфер ядра операционной системы и обратно.
Под словом кэш (cash – «наличные») обычно понимают область быстрой памяти,
содержащую копию данных, расположенных где-либо в более медленной памяти, пред-
назначенную для ускорения работы вычислительной системы. В современных системах
для этой задачи обычно используется кэш-память центрального процессора. Не следует
смешивать понятия буферизации и кэширования. Буфер обычно содержит единственный
набор данных, существующий в системе, в то время как кэш по определению содержит
копию данных, существующих где-нибудь еще. Функции буферизации и кэширования
не обязательно должны быть локализованы в базовой подсистеме ввода-вывода. Они мо-
гут быть частично реализованы в драйверах и даже в контроллерах устройств, скрытно
по отношению к базовой подсистеме.
С точки зрения программиста, наиболее часто используемой операцией ввода-
вывода является ввод-вывод на жесткие диски. В этом случае обычно речь идет о работе
с файлами, т.е. о файловом вводе-выводе. Рассмотрим принципы размещения данных на
жестком диске более подробно.