Цикл 2: данные передаются из регистра данных во внутренний регистр с этим номером, либо коммутируются внутри регистра на шину (прямо так, без пересылки данных из него в регистр данных).
Драйвер может опять в любой момент обращаться к любому регистру, но существует задержка, т.к. требуется два цикла шины.
Примечание: для ВУ с большим числом регистров, доступ к которым осуществляется редко (пример: часы реального времени (70h и 71h - регистры номера и данных) и CMOS-память - используются только в момент загрузки компьютера).
Если надо гонять часто большие объемы данных, механизм косвенной адресации неприменяем!
В случае быстрых устройств и больших объемов данных необходимо выставить мало регистров на шину, но чтобы не тратилось два цикла шины.
Смысл: любое устройство, работающее с таким КВУ имеет фиксированный набор команд и строго определенный порядок загрузки регистров для каждой команды.
Регистры уже не доступны драйверу по номеру, Номер регистра, в который будет помещена информация, определяется самой командой, а не драйвером.
Надо выполнить транзакцию и передачу КВУ данных, необходимых для данной операции. А КВУ сам распихает их по своим регистрам и запустит операцию.
В регистр команд загружаем команду (например, «читать сектор»). После этого последовательно помещаем все необходимые данные для этой команды в рег. данных.
После получения всего блока данных транзакция управления завершена, КВУ получает результат.
Чтобы не было бесконечного ожидания, считается, что любая операция записи в регистр команд сбрасывает предыдущую команду, если только она еще не выполняется.
Недостаток: в драйверах уже нельзя просто так использовать многопоточность, т.к. регистры должны запоминаться в нужном порядке.
Как еще можно снизить диапазон адресов? (см. след. тему).
Можно организовать так называемый канал управления (для обмена командами с КВУ).
ПДП (DMA) может использоваться как для обмена данными, так и для обмена командами.
Заполняем программную копию регистров ВУ в ОЗУ требуемыми значениями и толкаем операцию ПДП.
Контроллер ПДП копирует блок из ОЗУ в регистры ВУ. Затем, КВУ автоматически начинает производить операцию.
Также в любой момент мы можем скопировать регистры ВУ в ОЗУ.
Недостаток: для организации обмена требуется ПДП.
КВУ должно поддерживать механизм ПДП. Ему нужно два канала: для данных и для управления. В Intel количество каналов ПДП ограничено, поэтому отказались от этого механизма.
В ВС с большими диапазонами АП актуальность сужения диапазона адресов уменьшается (для 32, 64 бит). Так что используют простое отображение регистров ВУ на шину.
В
Status-регистре любого устройства всегда есть бит Ready (чаще всего он в знаковом разряде).
При поступлении команды в регистр команд аппаратура сбрасывает этот бит. При завершении команды бит снова устанавливается.
Ready bit можно проверять в цикле или по таймауту.
Для большого числа устройств работа в режиме polling'а неприемлема. Для асинхронных устройств этот режим вообще неприемлем.
Появился режим прерываний (см. след. тему).
Задачи:
1) Проинформировать ЦП о завершении операции ввода/вывода.
2) Найти ту программу, которая может обработать это прерывание.
Была разработана схема, названная «векторной таблицей».
Все события пронумерованы.
Дескрипторы описывают программы обработки прерывания.
Дескрипторы аппаратно (процессорно) зависимы.
ЦП должен сохранять тот контекст, который нельзя сохранить другими средствами. Если работаем с виртуальной памятью, надо аппаратно сохранять тот контекст, который меняется автоматически аппаратно во время перехода (таблица страниц, стек и т.д.).
Чтобы выполнить процедуру аппаратного прерывания достаточно сказать о факте происхождения события и передать номер сообщения (сигнализация и передача номера).
Система прерываний - специальный набор действий (какой номер выставлять на шину, что делать, если несколько и т.д.).
Ножка запроса прерываний всегда опрашивается центральным процессором между выполнением машинных инструкций.
Аппаратно в ЦП можно блокировать опрос этого бита (CLI).
Если этот бит устанавливается в 1, начинается обработка прерываний:
1) ЦП должен спасти свой контекст.
2) ЦП должен получить номер дескриптора таблицы (для этого сгенерировать цикл шины - подтверждение прерывания).
Контроллер прерываний - программируемое через СШ устройство.
Необходимо указать контроллеру, какой номер события связан с каким ВУ.
Система прерываний радиального типа: каждое прерывание ассоциирует с каждым устройством специальный единичный запрос.
Для каждой линии IRQx - одно событие. Устройства подключаются к таким линиям.
Приоритет предоставления прерываний - алгоритм, по которому контроллер прерываний определяет приоритеты ВУ, подключаемых к одной линии IRQx (?).
В MS-DOS и Windows используется линейная приоритетная схема: устройства имеют статические приоритеты, которые определяются номером линии IRQx.
Возможны и другие алгоритмы.
Например, циклическая схема: после завершения обработки прерываний устройство становится самым низкоприоритетным.
Наивысший приоритет предоставляется асинхронным устройствам, а также системным событиям. Низший - синхронным устройствам.
Главный недостаток - ограничено число линий запроса, а следовательно и устройств.
Можно построить иерархическую схему (расширяем вторым контроллером):
Третий контроллер подключить нельзя, т.к. не хватит линий прерываний. Шина тоже может накладывать ограничение на число прерываний (ISA - 15).
Если количество устройств очень большое, нельзя использовать эту схему!
Чтобы не потерять короткие прерывания используется маска запомненных прерываний.
End of Interrupt - команда сброса масок блокировок и запомненных прерываний.
Нужно отправить ее контроллеру!
Нужно, чтобы на одну линию можно было подключить сколько угодно устройств - в этом случае нельзя использовать контроллер!
Производится программная или аппаратная привязка.
Устройство выставляет номер вектора на шину.
Но в цикле прерывания только одно устройство должно выставлять номер на шину.
Для этого вводится сигнал ответа устройству данного приоритета. ЦП должен иметь столько линий подтверждения прерываний, сколько у него линий запроса.
ACK должен попасть только к одному устройству данного приоритета!
Устройства с одинаковым приоритетом имеют «внутренний приоритет», определяемый их близостью к ЦП.
В этой схеме есть проблема, связанная с блокировкой запросов (в прошлой схеме проблем не было, блокировкой занимался контроллер).
С запросами связывается битовая маска, которая транслируется в слово состояния процессора. Т.е. ответственность за блокировку/разрешение прерываний возлагается на программиста (системного, конечно ;) )!
intx: push ax
push si
push ds
in ax, #port
mov ds:[si], ax
inc si
dec cx
pop
...
iret
Если темп поступления прерывания высок, не успеем все обработать.
ЦП не участвует в обмене.
Аппаратуре нужно знать: номер порта и адрес буфера. Контроллер прямого доступа (КПДП) и есть та самая железяка!
Это минимальный набор регистров
Как подключить это устройство.
По завершении операции КПДП генерирует прерывание.
Схемы организации прямого доступа:
1) Радиальная:
Канал прямого доступа резервируется для каждого устройства. ВУ выставляет к КПДП запрос DMAx с номером этого канала.
Недостаток: ограничиваем количество физических устройств, которые могут работать ПДП посредством каналов к КПДП.
2) Динамическая
Конкретное физическое устройство не привязывается к номеру канала.
Канал ПД выдается устройству при необходимости в прямом доступе и освобождается по завершению операции.
КПДП выполняет обмен между ОП и ВУ, генерируя цикл шины. В цикле шины могут присутствовать только физические адреса. Необходимо добавить (к регистрам выше) набор регистров адресации памяти, например, таблицу страниц.
Кроме того, буфер должен быть физически непрерывным.
Вопрос с кэшированием!
При увеличении числа процессоров скорость системы увеличивается не линейно. Это объясняется тем, что передача информации будет занимать все большую часть времени.
Страницы: 1, 2, 3, 4, 5, 6