
- •Устройства ввода/вывода
- •Контроллеры устройств
- •Ввод-вывод с отображением на память
- •Прерывания
- •Обработка прерываний в защищенном режиме работы процессора
- •Классификация прерываний
- •Прямой доступ к памяти (dma)
- •Программное обеспечение ввода-вывода
- •Назначение программного обеспечения ввода-вывода
Классификация прерываний
Механизм обработки прерываний, по которому процессор прекращает выполнение команд в обычном режиме и, частично сохранив свое состояние, ответвляется на выполнение других действий, оказался настолько удобен, что зачастую разработчики процессоров используют их и для других целей. Хотя эти случаи и не относятся к операциям ввода-вывода, мы вынуждены упомянуть их здесь, для того, чтобы их не путали с прерываниями. Похожим образом процессор обрабатывает исключительные ситуации и программные прерывания.
Для внешних прерываний характерны следующие особенности:
Внешнее прерывание обнаруживается процессором между выполнением команд (или между итерациями в случае выполнения цепочечных команд).
Процессор при переходе на обработку прерывания сохраняет часть своего состояния перед выполнением следующей команды.
Прерывания происходят асинхронно с работой процессора и непредсказуемо, программист ни коим образом не может предугадать, в каком именно месте работы программы произойдет прерывание.
Исключительные ситуации возникают во время выполнения процессором команды. К их числу относятся ситуации переполнения, деления на ноль, обращения к отсутствующей странице памяти (см. часть III) и т.д. Для исключительных ситуаций характерно следующее:
Исключительные ситуации обнаруживаются процессором во время выполнения команд.
Процессор при переходе на выполнение исключительной ситуации сохраняет часть своего состояния перед выполнением текущей команды.
Исключительные ситуации возникают синхронно с работой процессора, но непредсказуемо для программиста, если только тот специально не заставил процессор делить некоторое число на ноль.
Программные прерывания возникают после выполнения специальных команд, как правило, для выполнения привилегированных действий внутри системных вызовов. Программные прерывания имеют следующие свойства:
Программное прерывание происходит в результате выполнения специальной команды.
Процессор при выполнении программного прерывания сохраняет свое состояние перед выполнением следующей команды.
Программные прерывания, естественно, возникают синхронно с работой процессора и абсолютно предсказуемы программистом.
Надо честно сказать, что похожие механизмы обработки внешних прерываний, исключительных ситуаций и программных прерываний лежат целиком на совести разработчиков процессоров. Существуют вычислительные системы, где все эти три ситуации обрабатываются по-разному.
Прямой доступ к памяти (dma)
Процессор может запрашивать данные у контроллера побайтно, но если требуется получать от устройства большие блоки, значительная часть времени будет потрачена впустую. По этой причине для взаимодействия с памятью применяют другой метод, называемый прямым доступом к памяти (Direct Memory Access, DMA).
DMA-контроллер имеет независимый от процессора доступ к системной шине. DMA контроллер имеет несколько регистров, доступных процессору для чтения и записи: регистр адреса, счетчик байтов и ряд регистров управления.
Прежде чем разбираться с принципами работы DMA, следует разобраться как осуществляется чтение с диска без прямого доступа к памяти. Сначала контроллер считывает блок данных с носителя во внутренний буфер, подсчитывает контрольные суммы и т. п. Затем генерируется прерывание. Обработчик в ОС считывает данные из буфера контроллера и помещает их в основную память. Адрес памяти инкрементируется, счетчик оставшихся байтов декрементируется. Счетчик прекращается, когда значение счетчика становится равным нулю.
Прямой доступ к памяти изменяет эту процедуру. Сначала процессор программирует DMA-контроллер, записывая в его регистры значения, указывающие контроллеру, что и куда передавать. Затем DMA-контроллер передает команду контроллеру диска считать блок данных. После появления в буфере контроллера корректных данных, DMA-контроллер начинает перенос данных из диска в память. Эта процедура происходит в цикле, пока счетчик данных не обнулится. По завершении этой процедуре, инициируется прерывание и ОС оповещается о том, что данные уже лежат в ОП.