Популярные статьи
Реклама
Новости
|
11/5 Графический пользовательский интерфейс |
11/5 Графический адаптер |
|
11/5 Шрифты |
11/5 Растровые изображения |
| Сообщение об ошибках |
|
По сравнению с другими сферами работы компьютерных устройств, при вводе-выводе данных ошибки являются более распространенным событием. При возникновении ошибок операционная система должна их обработать наилучшим образом. Многие ошибки зависят от специфики конкретного устройства и должны обрабатываться соответствующим драйвером, но структура обработки ошибок не зависит от специфики устройств. К одному из классов ошибок ввода-вывода относятся ошибки программирования. Они возникают в том случае, если процесс запрашивает что-нибудь невозможное, к примеру запись в устройство ввода информации (клавиатуру, сканер, мышь и т. д.) или чтение из устройства вывода информации (принтер, плоттер и т. д.). Другие ошибки возникают при предоставлении неверного адреса буфера или других параметров или при указании неверного устройства (например, третьего диска, когда в системе имеется только два диска) и т. д. На такие ошибки следует весьма простая реакция: вызывающей программе отправляется код возникшей ошибки.
К другому классу относятся фактические ошибки ввода-вывода, например попытка записи в поврежденный дисковый блок или попытка чтения из выключенной видеокамеры. При таких обстоятельствах решение о дальнейших действиях возлагается на драйвер. Если драйвер не знает, что ему делать, он может передать решение проблемы на вышележащий уровень — не зависящему от конкретных устройств программному обеспечению. Действия этого программного обеспечения зависят от среды окружения и характера ошибки. Если речь идет о простой ошибке чтения и есть возможность общения с пользователем, то может быть выведено диалоговое окно с вопросом к пользователю, что делать дальше. Варианты могут включать повторение попытки определенное количество раз, игнорирование ошибки или уничтожение вызывающего процесса. Если пользователь недоступен, то, возможно, единственным вариантом будет аварийное завершение системного вызова с указанием кода ошибки. Но некоторые ошибки не могут быть обработаны таким образом. Например, может быть разрушена важная структура данных, такая как корневой каталог или список свободных блоков. В таком случае системе, вероятно, придется отобразить сообщение об ошибке и прекратить работу. Распределение и высвобождение выделенных устройств Некоторые устройства, например пишущие приводы компакт-дисков, в любой момент времени могут использоваться только одним процессом. Операционная система должна проверять запросы на использование и принимать их или отвергать, в зависимости от доступности запрашиваемого устройства. Простой способ обработки этих запросов заключается в требовании к процессам непосредственно открывать специальные файлы для этих устройств с помощью системных вызовов open. Если устройство недоступно, то системный вызов open потерпит неудачу. Освобождение такого выделенного устройства происходит после его закрытия с помощью системного вызова close. Альтернативный подход заключается в использовании специальных механизмов для запроса и освобождения выделенных устройств. Попытка получить в свое распоряжение недоступное устройство приводит не к отказу, а к блокировке процесса, предпринявшего эту попытку. Заблокированные процессы помещаются в очередь. Рано или поздно запрашиваемое устройство станет доступным, и первому процессу из этой очереди будет позволено получить устройство и продолжить свою работу. Предоставление размера блока, не зависящего от конкретных устройств У разных дисков могут быть разные размеры секторов. Не зависимое от устройств программное обеспечение должно скрыть этот факт и предоставить расположенным выше уровням унифицированный размер блока, например, рассматривая несколько секторов в качестве одного логического блока. Таким образом, вышестоящие уровни будут работать только с абстрактными устройствами, использующими один и тот же размер логического блока, не зависящий от физического размера сектора. Аналогичным образом некоторые символьные устройства (например, модемы) осуществляют побайтовую доставку своих данных, а другие устройства (например, сетевые интерфейсы) доставляют свои данные блоками более крупного размера. Эти различия также могут быть скрыты.
|