К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 61
Текст из файла (страница 61)
Через нее различные устройства ввода-вывода соединяются с процессором. Контроллер прерываний определяет приоритеты устройств и направляет процессору соответствующий каждому из них номер вектора прерывания. В литературе, посвященной процессорам 1пге1, регистр состояния процессора (рис. 3.37) называется ЕЕ1.АСБ. На рис. 4.16 показаны семь разрядов этого регистра, с 8 по 15, где содержатся флаг разрешения прерываний 1Г (1пгеггирС епаЫе Е ай), флаг трассировки ТЕ (Тгар Е1а8), а также уровень привилегий ввода-вывода 10Р1. (1/О Рг)ч)1ейе 1.ече!).
Когда 1Г - 1, прерывания по линии 1ХТВ разрешеиы. Флаг трассировки разрешает прерывания трассировки после каждой команды программы. 15 14 13 12 11 10 9 8 Рис. 4.16. Часть регистра состояния процессора РепС~огп У процессора Репгшш довольно сложная структура приоритетов, в соответствии с которой программы операционной системы условно делятся на четыре группы 260 Глава 4. Ввод-вывод и каждой из них назначается один из четырех уровней приоритета. Для каждого из таких уровней выделяется свой сегмент адресного пространства процессора. При переключении от одного уровня привилегий к другому выполняется множество проверок, реализующих так называемый механизм блокировки.
Такая архитектура позволяет разрабатывать операционные системы с очень высокой степенью защиты. Но процессор Реп1шш может работать и в очень простом режиме, когда вообще не существует никаких привилегий и все программы функционируют в одном сегменте памяти. Такой простой режим мы и рассмотрим в данном разделе. При возникновении исключения, а также после получения запроса прерывания процессор выполняет операции, перечисленные ниже.
1. Проталкивает в стек процессора, на который указывает регистр ЕЯР, значение регистра текущего сегмента СЯ (Спггепг Зеягпепг) и указателя команды Е1Р. 2. Если исключение вызвано нестандартной ситуацией при выполнении программы, помещает в стек код, определяющий причину исключения. 3. Если нужно, очищает флаг разрешения прерывания, чтобы дальнейшие прерывания от того же источника были запрещены. 4. По значению вектора прерывания находит в таблице дескрипторов прерываний начальный адрес программы обработки прерывания и загружает его в Е1Р, после чего продолжает выполнение команд. Обслужив запрос (например, выполнив пересылку входных или выходных данных), программа обработки прерывания возвращает управление прерванной программе, для чего она выполняет команду возврата из прерывания 1КЕТ. Эта команда восстанавливает из стека значения регистров Е1Р и СЯ и регистра состояния процессора, восстанавливая тем самым состояние процессора.
Подобно любой подпрограмме программа обработки прерывания может создать для себя временное рабочее пространство, сохранив в стеке значения регистров. В этом случае должна быть гарантия того, что перед выполнением команды 1КЕТ программы указатель стека ЕЗР будет содержать адрес возврата. Пример 4.6 На рис. 4.17 вы видите ту же программу, которая был представлена на рис. 4.9, но переписанную для процессора Репгипп. Здесь мы сделали предположение, что клавиатура направляет запрос прерывания с номером вектора 32 и что соответствующая запись в таблице дескрипторов прерываний содержит начальный адрес программы обработки прерывания КЕАР. Для того чтобы разрешить прерывания в процессоре, нужно выполнить команду БТ1, устанавливающую флаг 1Р в регистре состояния процессора в 1.
4.4. Прямой доступ к памяти 261 Главная программа МОУ Е01.,0 МОУ В1.,4 ОК СОХТКОГ.,ВЕ Установка разряда КЕХ для разрешения прерываний от клавиатуры Установка флага прерываний в регистре процессора БТ1 Программа обработки прерываний КЕАР РГ)ЯН ЕАХ Р1)ЯН ЕВХ МОУ ЕАХ,РХТК МОУ В!.,РАТА1Х МОУ ~ЕАХ1,В1. 1ХС РЖОКР РТК [ЕАХ] СМР В1.,0РН Очистка разряда КЕХ Установка флага Е01. Восстановление регистра ЕВХ Восстановление регистра ЕАХ рис. 4.17. Программа обработки прерывания для процессоров )А-З2, считывающая вводимую с клавиатуры строку (основой служит программа, показанная на рис.
4.9) 4.4. Прямой доступ к памяти В предыдущем разделе мы пытались сконцентрировать ваше внимание на пере- сылке данных между процессором и устройствами ввода-вывода. Для этой цели используются команды типа Моче ЭАТА1Х,КО Данная команда выполняется лишь после того, как процессор определит, что устройство ввода-вывода готово к очередной операции. Для этого процессор опрашивает флаг состояния в интерфейсе устройства или ждет, пока устройство само направит ему запрос на прерывание. В любом случае производится много лишней работы, поскольку для каждого пересылаемого слова данных выполняется несколько программных команд. Однако команды нужны не только для опроса регистра состояния, но и для увеличения адреса в памяти и отслеживания количества слов.
При использовании прерываний издержки еще больше, поскольку )ХЕ МОУ ХО К МОУ КТКХ РОР РОР 1КЕТ КТКХ В1.,4 СОХТК01 В1. Е01 1 ЕВХ ЕАХ Сохранение регистра ЕАХ в стеке Сохранение регистра ЕВХ в стеке Загрузка указателя адреса Считывание введенного символа Сохранение символа Увеличение значения указателя Проверка того, введен ли символ возврата каретки 262 Глава 4. Ввод-вывод приходится сохранять и восстанавливать значение счетчика команд и другую информацию о состоянии.
Поэтому для быстрой пересылки больших блоков данных применяется другой подход. Компъютер может содержать специальное управляющее устройство, позволяющее пересылать блоки данных между внешним устройством и основной памятью без постоянного участия процессора. Эта технология называется прямым достпупом к памяти (ПДП), по-английски — П1гес1 Метогу Ассеьз (ПМА). Операции ПДП выполняются управляющей схемой, входящей в состав интерфейса устройства ввода-вывода.
Эта схема называется контроллерам ПДП. Контроллер ПДП выполняет ту же задачу, что и процессор, обращающийся к основной памяти. Для каждого пересылаемого слова он генерирует адрес памяти и сигналы шины, управляющие пересылкой данных. Поскольку контроллер ПДП производит пересылку блоков данных, он сам увеличивает адрес, по которому будет записываться каждое следующее слово, и отслеживает количество таких операций.
Хотя контроллер ПДП работает без участия процессора, он управляется выполняемой процессором программой. В частности, чтобы инициировать пересылку блока слов, процессор пересылает контроллеру начальный адрес этого блока, сведения о количестве составляющих его слов и направлении пересылки. Получив такую информацию, контроллер приступает к выполнению операции.
По окончании пересылки он информирует об этом процессор с помощью сигнала прерывания. Пока контроллер ПДП производит пересылку данных, запросившая ее программа не может продолжать свою работу, и процессор часто используется для выполнения другой программы. По окончании пересылки процессор может вернуться к исходной программе. Операции ввода-вывода всегда выполняются операционной системой компьютера в ответ на запрос прикладной программы.
Операционная система отвечает за приостановку выполнения одной программы и активизацию другой. Поскольку операции ввода-вывода осуществляются с использованием прямого доступа к памяти, ОС переводит запросившую такую операцию программу в режим блокировки (см. раздел 4.2.6), инициирует операцию ПДП н начинает выполнение другой программы. По завершении пересылки контроллер ПДП направляет процессору запрос прерывания. В ответ ОС переводит приостановленную программу в режим готовности, чтобы ее мог выбрать планировщик. На рис. 4.18 показаны регистры контроллера ПДП, которые используются процессором для инициирования операции пересылки данных. Два регистра предназначены для хранения начального адреса и счетчика слов. В третьем содержатся информация о состоянии и управляющие флаги. Разряд К/Ф этого регистра определяет направление пересылки.
Когда команда программы устанавливает этот разряд в 1, контроллер выполняет операцию чтения, то есть пересылает данные из памяти в устройство ввода-вывода. В противном случае он выполняет операцию записи. Контроллер, завершивший пересылку блока данных и готовый к обслуживанию следующей команды, устанавливает флаг 1) ОХЕ в 1. Разряд 30 соответствует флагу разрешения прерывания? Е. Если этот флаг установлен в 1, то по окончании пересылки блока данных контроллер запрашивает прерывание, после чего устанавливает в 1 разряд 1К(1.
4.4. Прямой доступ к памяти 263 1 0 31 30 Состояние и управление Р01чЕ Е/Ф 1КЯ 1Е Начальный адрес Счетчик слов Рис. 4.18. Регистры интерфейса ПДП Пример использования прямого доступа к памяти в компьютерной системе приведен на рис 4.19. Контроллер ПДП соединяет шину компьютера с высокоскоростной сетью. Контроллер, управляющий двумя дисками, тоже имеет встроенные функции ПД П и поддерживает два канала передачи данных. Он может выполнять две независимые операции прямого доступа к памяти так, словно каждый диск содержит собственный контроллер ПДП.
Для этого в контроллере имеется два набора регистров, предназначенных для хранения адреса в памяти и счетчика слов, — по одному для каждого устройства. Рис. 4.19. Использование контролеров ПдП в компьютерной системе 264 Глава 4. Ввод-вывод Для того чтобы начать пересылку блока данных из основной памяти на один из дисков, программа записывает адрес и значение счетчика слов в регистры соответствующего канала ПДП дискового контроллера.