Есть три фундаментально различных способа осуществления операций ввода-вывода. В этом разделе мы рассмотрим первый из этих способов — программный ввод-вывод. В следующих двух разделах будут рассмотрены другие способы (ввод-вывод, управляемый с помощью прерываний, и ввод-вывод, использующий DMA). Проще всего организовать ввод-вывод, возложив всю работу на центральный процессор. Этот способ называется программным вводом-выводом.
Чтобы проиллюстрировать программный ввод-вывод, лучше всего обратиться к примеру. Рассмотрим пользовательский процесс, которому нужно распечатать на принтере строку, состоящую из восьми символов: «ABCDEFGH». Сначала он собирает строку в буфере, который находится в пространстве пользователя.
Читать полностью
|
Хотя бывают случаи, когда вполне можно обойтись и программным вводом-выводом, все же для большинства операций ввода-вывода прерывания являются не чем иным, как суровой необходимостью. Они должны быть спрятаны как можно глубже в недрах операционной системы, чтобы о них было известно как можно меньшей части этой системы. Лучший способ их спрятать это заблокировать тот драйвер, который начал операцию ввода-вывода, до тех пор пока не будет завершен ввод-вывод и не будет получено прерывание. Драйвер может заблокировать себя сам, выполнив, к примеру, процедуру down на семафоре, или же процедуру wait на переменной состояния, или процедуру receive на сообщении, или еще что-либо подобное.
Кода происходит прерывание, то все необходимое для его обработки делает процедура — обработчик прерывания. Затем она может разблокировать запустивший ее драйвер.
Читать полностью
Ключевая концепция разработки программного обеспечения ввода-вывода известна как независимость от конкретных устройств. Ее смысл заключается в предоставлении возможности создания программ, способных получить доступ к любому устройству ввода-вывода без необходимости предварительного определения устройства- К примеру, программа, считывающая входной файл, должна иметь возможность читать его с жесткого диска, компакт-диска, DVD или флэш-накопителя USB без изменения программы под каждое конкретное устройство. То есть любой пользователь должен получить возможность набрать команду типа
sort <input >output
и убедиться, что она работает с входными данными, поступающими с диска любого типа или с клавиатуры, и с выходными данными, отправляемыми на диск любого типа или на экран. Решение всех проблем, связанных с разнородностью этих устройств и с тем, что для них требуются существенно отличающиеся друг от друга последовательности команд для чтения или записи, возлагается на операционную систему.
Читать полностью
Ранее в этой главе уже рассматривалась работа контроллеров устройств. Было показано, что у каждого контроллера есть ряд регистров устройства, предназначенных для отправки ему команд, или ряд регистров устройства, используемых для считывания его состояния, или же есть и те и другие регистры. Число регистров устройства и характер команд очень сильно отличаются в зависимости от конкретного устройства. Например, драйвер мыши должен воспринимать информацию от мыши, сообщающую, насколько далеко она была перемещена и какие кнопки в данный момент были отпущены. В отличие от этого, драйвер диска должен знать все о секторах, дорожках, цилиндрах, головках, перемещениях блока головок, электроприводах, временных показателях стабилизации головки и обо всех остальных механизмах, обеспечивающих нормальную работу диска. Несомненно, эти драйверы будут сильно отличаться друг от друга.
Читать полностью
|
|