20550_1.jpg
article.cd_.dvd_.jpg


Программный ввод-вывод

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

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

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

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

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

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

 
Поиск

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

Реклама