|
Прерывания при вводе-выводе |
|
На аппаратном уровне прерывания работают следующим образом. Когда устройство ввода-вывода завершает порученную ему работу, оно инициирует прерывание (при условии, что прерывания разрешены операционной системой). Это делается путем выставления сигнала на специально выделенной линии шины. Этот сигнал обнаруживается микросхемой контроллера прерываний, расположенной на системной плате, которая затем принимает решение о характере дальнейших действий.
|
|
Далее
|
|
|
Точные и неточные прерывания |
|
Еще одна проблема вызвана тем, что на многих современных центральных процессорах широко используется конвейеризация и часто используется суперскалярность (внутреннее распараллеливание). В прежних системах после завершения выполнения каждой команды на микропрограммном или на аппаратном уровне велась проверка на наличие отложенного прерывания. Если такое прерывание было, то счетчик команд и слово состояния процессора (PSW) помешались в стек, и начиналась обработка прерывания. После обработки прерывания совершался обратный процесс, при котором прежнее слово состояния процессора и счетчик команд извлекались из стека и возобновлялась работа предыдущего процесса.
|
|
Далее
|
|
Буферизация по многим причинам также является актуальным вопросом как для блочных, так и для символьных устройств. Чтобы понять, в чем состоит одна из таких причин, рассмотрим процесс, которому необходимо прочитать данные, получаемые от модема. По одной из возможных стратегий работы с поступающими символами нужно заставить пользовательский процесс осуществить системный вызов read и заблокироваться в ожидании одного символа. При этом прерывание возникает по случаю поступления каждого символа. Процедура обработки прерывания передает символ пользовательскому процессу и снимает с него блокировку.
|
|
Далее
|
|
По сравнению с другими сферами работы компьютерных устройств, при вводе-выводе данных ошибки являются более распространенным событием. При возникновении ошибок операционная система должна их обработать наилучшим образом. Многие ошибки зависят от специфики конкретного устройства и должны обрабатываться соответствующим драйвером, но структура обработки ошибок не зависит от специфики устройств.
К одному из классов ошибок ввода-вывода относятся ошибки программирования. Они возникают в том случае, если процесс запрашивает что-нибудь невозможное, к примеру запись в устройство ввода информации (клавиатуру, сканер, мышь и т. д.)
|
|
Далее
|
|
Функции драйвера устройств |
|
На драйвер устройства возлагается несколько функций. Наиболее очевидная из них — восприятие абстрактных запросов на чтение и запись от независимого от конкретных устройств программного обеспечения, находящегося выше них по уровню, и отслеживание порядка их выполнения. Но на них возлагается также ряд других функций. Например, драйвер должен при необходимости инициализировать устройство. Он также может понадобиться для управления энергопотреблением устройства и для регистрации событий.
|
|
Далее
|
|
|
|
|
|