- •7. Ввод-вывод
- •7.1. Доступ к устройствам ввода-вывода
- •7.2. Прерывания
- •7.2.1. Аппаратное обеспечение для поддержки прерываний
- •7.2.2. Запрет и разрешение прерываний
- •7.2.3. Обслуживание нескольких устройств
- •7.2.4. Управление запросами устройств
- •7.2.5. Исключения
- •7.2.6. Прерывания в операционных системах
- •7.3. Механизм прерываний процессора Pentium
- •7.4. Прямой доступ к памяти
7.4. Прямой доступ к памяти
В предыдущем разделе мы пытались сконцентрировать ваше внимание на пересылке данных между процессором и устройствами ввода-вывода. Для этой цели используются команды типа
Move DATAIN,R0
Данная команда выполняется лишь после того, как процессор определит, что устройство ввода-вывода готово к очередной операции. Для этого процессор опрашивает флаг состояния в интерфейсе устройства или ждет, пока устройство само направит ему запрос на прерывание. В любом случае производится много липшей работы, поскольку для каждого пересылаемого слова данных выполняется несколько программных команд. Однако команды нужны не только для опроса регистра состояния, но и для увеличения адреса в памяти и отслеживания количества слов. При использовании прерываний издержки еще больше, поскольку приходится сохранять и восстанавливать значение счетчика команд и другую информацию о состоянии.
Поэтому для быстрой пересылки больших блоков данных применяется другой подход. Компьютер может содержать специальное управляющее устройство, позволяющее пересылать блоки данных между внешним устройством и основной памятью без постоянного участия процессора. Эта технология называется прямым доступом к памяти (ПДП), по-английски — Direct Memory Access (DMA).
Операции ПДП выполняются управляющей схемой, входящей в состав интерфейса устройства ввода-вывода. Эта схема называется контроллером ПДП. Контроллер ПДП выполняет ту же задачу, что и процессор, обращающийся к основной памяти. Для каждого пересылаемого слова он генерирует адрес памяти и сигналы шины, управляющие пересылкой данных. Поскольку контроллер ПДП производит пересылку блоков данных, он сам увеличивает адрес, по которому будет записываться каждое следующее слово, и отслеживает количество таких операций.
Хотя контроллер ПДП работает без участия процессора, он управляется выполняемой процессором программой. В частности, чтобы инициировать пересылку блока слов, процессор пересылает контроллеру начальный адрес этого блока, сведения о количестве составляющих его слов и направлении пересылки. Получив такую информацию, контроллер приступает к выполнению операции. По окончании пересылки он информирует об этом процессор с помощью сигнала прерывания.
Пока контроллер ПДП производит пересылку данных, запросившая ее программа не может продолжать свою работу, и процессор часто используется для выполнения другой программы. По окончании пересылки процессор может вернуться к исходной программе.
Операции ввода-вывода всегда выполняются операционной системой компьютера в ответ на запрос прикладной программы. Операционная система отвечает за приостановку выполнения одной программы и активизацию другой. Поскольку операции ввода-вывода осуществляются с использованием прямого доступа к памяти, ОС переводит запросившую такую операцию программу в режим блокировки (см. раздел 4.2.6), инициирует операцию ПДП и начинает выполнение другой программы. По завершении пересылки контроллер ПДП направляет процессору запрос прерывания. В ответ ОС переводит приостановленную программу в режим готовности, чтобы ее мог выбрать планировщик.
На рис. 7.13 показаны регистры контроллера ПДП, которые используются процессором для инициирования операции пересылки данных. Два регистра предназначены для хранения начального адреса и счетчика слов. В третьем содержатся информация о состоянии и управляющие флаги. Разряд R/W этого регистра определяет направление пересылки. Когда команда программы устанавливает этот разряд в 1, контроллер выполняет операцию чтения, то есть пересылает данные из памяти в устройство ввода-вывода. В противном случае он выполняет операцию записи. Контроллер, завершивший пересылку блока данных и готовый к обслуживанию следующей команды, устанавливает флаг DONE в 1. Разряд 30 соответствует флагу разрешения прерывания IE. Если этот флаг установлен в 1, то по окончании пересылки блока данных контроллер запрашивает прерывание, после чего устанавливает в 1 разряд IRQ.

Рис. 7.13. Регистры интерфейса ПДП
Пример использования прямого доступа к памяти в компьютерной системе приведен на рис 7.14. Контроллер ПДП соединяет шину компьютера с высокоскоростной сетью. Контроллер, управляющий двумя дисками, тоже имеет встроенные функции ПДП и поддерживает два канала передачи данных. Он может выполнять две независимые операции прямого доступа к памяти так, словно каждый диск содержит собственный контроллер ПДП. Для этого в контроллере имеется два набора регистров, предназначенных для хранения адреса в памяти и счетчика слов, — по одному для каждого устройства.

Рис. 7.14. Использование контролеров ПДП в компьютерной системе
Для того чтобы начать пересылку блока данных из основной памяти на один из дисков, программа записывает адрес и значение счетчика слов в регистры соответствующего канала ПДП дискового контроллера. Кроме того, она предоставляет контроллеру информацию, которая позволит идентифицировать данные в будущем, когда их потребуется прочитать с диска. После этого контроллер ПДП уже независимо от процессора выполняет указанную операцию. Когда она завершается, в регистре состояния и управления канала ПДП устанавливается разряд DONE. Если в это время разряд IE равен 1, контроллер направляет процессору запрос прерывания и устанавливает разряд IRQ. Регистр состояния может использоваться и для хранения другой информации, например значения индикатора, указывающего, успешно ли выполнена пересылка и не произошло ли при этом каких-либо ошибок.
Процессор и контроллеры ПДП обращаются к памяти поочередно. Запросы устройств ПДП на использование шины всегда имеют более высокий приоритет, чем запросы процессора. Среди устройств ПДП наивысшим приоритетом обладают высокоскоростные внешние устройства, в том числе диски, скоростной сетевой интерфейс, графический дисплей. Поскольку большая часть циклов доступа к памяти инициируется процессором, можно сказать, что контроллер ПДП «крадет» их у процессора. Применяемая при этом технология чередования называется захватом циклов. В качестве альтернативы контролеру ПДП для пересылки блока данных без прерываний может быть предоставлен монопольный доступ к основной памяти. Такой режим называется блочным (block mode) или монопольным (burst mode).
Большинство контроллеров ПДП содержат буфер для хранения данных. Например, в случае сетевого интерфейса контролер ПДП считывает из основной памяти блок данных и сохраняет его в своем входном буфере. Пересылка выполняется в монопольном режиме при максимальной скорости, с которой могут работать память и шина компьютера. После этого данные пересылаются из буфера по сети со скоростью, определяемой пропускной способностью сетевого соединения.
Если процессор и контроллер ПДП или же два контроллера ПДП попытаются одновременно использовать шину для доступа к основной памяти, возникнет конфликт. Для разрешения конфликтных ситуаций применяется специальная процедура выбора, реализуемая схемами управления шиной и координирующая действия всех устройств, запрашивающих операции с памятью.
Выводы
В настоящей главе были рассмотрены три базовых подхода к операции пересылки входных и выходных данных.
Простейшим из них является программируемый ввод-вывод, который управляется процессором, выполняющим команды программы.
Второй подход основан на использовании прерываний; этот механизм позволяет прерывать нормальное выполнение программы для обслуживания запросов с более высоким приоритетом, которым срочно требуется уделить внимание. Механизмы для обработки подобных ситуаций предусмотрены во всех компьютерах, но схемы обработки прерываний у одних компьютеров проще, а у других, наоборот, сложнее.
Третья схема ввода-вывода основана на прямом доступе к памяти — аппаратной технологии, суть которой заключается в том, что специальный контроллер ПДП пересылает данные между устройством ввода-вывода и основной памятью без постоянного участия процессора. При этом доступ к памяти по очереди получают то процессор, то контроллер ПДП — каждый для своих нужд.
