Программирование на JAVA

INC              DWORD PTR [EAX]           ;Увеличение значения указателя

CMP             BL,ODH                                ;Проверка того, введен ли символ возврата каретки

JNE              Rtrn

MOV            BL,4

XOR            CONTROL,BL                      ;Очистка разряда KEN

MOV            EOL,1                                                ;Установка флага EOL

RTRN             POP                ЕВХ                                                               ;Восстановление регистра ЕВХ

POP              EAX                                                              ;Восстановление регистра ЕАХ

            IRET                                                                                                             ;Восстановление процессора

Рис. 7.12. Программа обработки прерывания для процессоров IA-32,

считывающая вводимую с клавиатуры строку символов

Прямой доступ к памяти

В предыдущем разделе мы пытались сконцентрировать ваше внимание на пере­сылке данных между процессором и устройствами ввода-вывода. Для этой цели используются команды типа

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).

Большинство контроллеров ПДП содержат буфер для хранения данных. На­пример, в случае сетевого интерфейса контролер ПДП считывает из основной памяти блок данных и сохраняет его в своем входном буфере. Пересыл­ка выполняется в монопольном режиме при максимальной скорости, с которой могут работать память и шина компьютера. После этого данные пересылаются из буфера по сети со скоростью, определяемой пропускной способностью сетевого соединения.

Если процессор и контроллер ПДП или же два контроллера ПДП попытаются одновременно использовать шину для доступа к основной памяти, возникнет конфликт. Для разрешения конфликтных ситуаций применяется специальная процедура выбора, реализуемая схемами управления шиной и координирующая действия всех устройств, запрашивающих операции с памятью.

Выводы

В настоящей главе были рассмотрены три базовых подхода к операции пересыл­ки входных и выходных данных.

Простейшим из них является программируемый ввод-вывод, который управляется процессором, выполняющим команды програм­мы.

Второй подход основан на использовании прерываний; этот механизм позво­ляет прерывать нормальное выполнение программы для обслуживания запросов с более высоким приоритетом, которым срочно требуется уделить внимание. Ме­ханизмы для обработки подобных ситуаций предусмотрены во всех компьютерах, но схемы обработки прерываний у одних компьютеров проще, а у других, наобо­рот, сложнее.

Третья схема ввода-вывода основана на прямом доступе к памяти — аппаратной технологии, суть которой заключается в том, что специальный кон­троллер ПДП пересылает данные между устройством ввода-вывода и основной памятью без постоянного участия процессора. При этом доступ к памяти по оче­реди получают то процессор, то контроллер ПДП — каждый для своих нужд.


<< назад вперед >>