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

Независимо от наличия или отсутствия у центрального процессора ввода-вывода, отображаемого на пространство памяти, ему необходимо обращаться к контроллерам устройств, чтобы осуществлять с ними обмен данными.
Центральный процессор может запрашивать данные у контроллера ввода-вывода побайтно, но при этом будет нерационально расходоваться его рабочее время, поэтому чаще всего используется другая схема, которая называется прямым доступом к памяти (Direct Memory Access (DMA)). Чтобы не усложнять объяснение, предполагается, что центральный процессор обращается ко всем устройствам и к памяти посредством единой системной шины, соединяющей центральный процессор, память и устройства ввода-вывода (рис. 5.3). Нам
уже известно, что реальная организация в современных системах намного сложнее, но все принципы одинаковы. Операционная система может использовать DMA только при наличии аппаратного DMA-контроллера, присутствующего у большинства систем. Иногда этот контроллер встроен в контроллеры дисков и другие контроллеры, но такая конструкция требует отдельного DMA-контроллера для каждого устройства. Чаще всего для упорядочения обмена данными с несколькими устройствами, проводимого нередко в параллельном режиме, доступен только один DMA-контроллер (размещенный, к примеру, на системной плате).

На рис. 5.3 показано, что где бы DMA-контроллер ни находился физически, он имеет доступ к системной шине независимо от центрального процессора. В нем имеется несколько регистров, доступных центральному процессору для чтения и записи. В их число входят регистр адреса памяти, регистр счетчика байтов и один или несколько регистров управления. В регистрах управления указываются используемый порт ввода- вывода, направление передачи данных (чтение из устройства ввода-вывода или запись в него), единица передаваемой информации (побайтовая или пословная передача), а также количество байтов, передаваемых в одном пакете.


Чтобы объяснить принцип работы DMA, рассмотрим сначала, как осуществляется чтение диска, когда DMA не используется. Сначала контроллер диска последовательно побитно считывает блок (один или несколько секторов) с диска, пока весь блок не окажется во внутреннем буфере контроллера. Затем он вычисляет контрольную сумму, чтобы убедиться в отсутствии ошибок чтения. Затем контроллер инициирует прерывание. Когда операционная система приступает к работе, она может в цикле побайтно или пословно считать дисковый блок из буфера контроллера, считывая при каждом проходе цикла один байт или слово из регистра контроллера устройства и сохраняя его в оперативной памяти.

При использовании DMA все происходит по-другому. Сначала центральный процессор программирует DMA-контроллер, устанавливая значения его регистров таким образом,
чтобы он знал, что и куда нужно передать (шаг 1 на рис. 5.3). Он также выдает команду контроллеру диска на чтение данных с диска во внутренний буфер контроллера и на проверку контрольной суммы. После того как в буфере контроллера окажутся достоверные данные, к работе может приступать DMA.

DMA-контроллер инициирует передачу данных, выдавая по шине контроллеру диска запрос на чтение (шаг 2). Этот запрос на чтение выглядит так же, как и любой другой запрос на чтение, и контроллер диска не знает и даже не интересуется, откуда он пришел — от центрального процессора или от DMA-контроллера. Обычно адрес памяти, куда нужно вести запись, выставлен на адресных линиях шины, поэтому, когда контроллер диска извлекает очередное слово из своего внутреннего буфера, он знает, куда его следует записать. Запись в память — это еще один стандартный цикл шины (шаг 3). Когда запись завершается, контроллер диска также по шине посылает подтверждающий сигнал DMA-контроллеру (шаг 4). Затем DMA-контроллер дает приращение используемому адресу памяти и уменьшает значение счетчика байтов. Если счетчик байтов все еще больше нуля, то шаги со 2-го по 4-й повторяются до тех пор, пока значение счетчика не станет равно нулю. Как только это произойдет, DMA- контроллер выставляет прерывание, чтобы центральный процессор узнал о завершении передачи данных. И когда к работе приступает операционная система, ей уже не нужно копировать дисковый блок в память, потому что он уже там.

Контроллеры DMA существенно различаются по степени сложности. Самые простые из них, как описано ранее, обслуживают одновременно только одну операцию передачи данных. Более сложные контроллеры могут быть запрограммированы на одновременную обработку нескольких таких операций. У таких контроллеров есть несколько наборов внутренних регистров, по одному для каждого канала. Центральный процессор начинает с того, что загружает каждый набор соответствующими параметрами для передачи данных по определенному каналу. После показанной на рис. 5.3 передачи каждого слова (шаги со 2-го по 4-й), DMA-контроллер решает, какое из устройств обслуживать следующим. Он может быть настроен на использование алгоритма кругового обслуживания, или же у него может быть система приоритетов, дающая преимущество одним устройствам над другими. Одновременно могут рассматриваться сразу несколько запросов к различным контроллерам устройств при условии, что есть однозначный способ обособленной выдачи сигнала подтверждения.

Поэтому довольно часто для каждого DMA-канала на шине используется отдельная линия подтверждения.

Многие шины могут работать в двух режимах: пословном и поблочном. Некоторые DMA-контроллеры могут также работать в обоих режимах. В первом режиме осуществляются операции, описанные ранее: DMA-контроллер запрашивает передачу одного слова и получает его. Если центральному процессору также нужна шина, то он вынужден ждать. Такой механизм называется захватом цикла, поскольку контроллер устройства ненадолго украдкой перехватывает у центрального процессора первый попавшийся цикл шины, слегка замедляя его работу. В блочном режиме DMA-контроллер предписывает устройству занять шину, осуществить серию пересылок данных, а затем освободить шину. Такой образ действий называется пакетным режимом. Он более эффективен, чем захват цикла, поскольку, чтобы занять шину, требуется определенное время, а тут это время затрачивается на передачу сразу нескольких слов только один раз. Недостаток пакетного режима заключается в том, что если будет передаваться довольно длинный пакет данных, то он может заблокировать центральный процессор и другие устройства на весьма существенный период времени.

Рассмотренную нами модель иногда называют сквозным режимом, так как DMA- контроллер предписывает контроллеру устройства осуществить передачу данных непосредственно в оперативную память. Альтернативный режим, который используется некоторыми DMA-контроллерами, предусматривает принуждение контроллера устройства на передачу слова DMA-контроллеру, который затем выставляет на шине дополнительный запрос на запись слова по месту его предназначения. Эта схема требует дополнительного цикла шины на каждое передаваемое слово, но она обладает большей гибкостью, поскольку может копировать из устройства в устройство и даже из одного места памяти в другое (выполняя сначала чтение из памяти, а затем запись в память по другому адресу).

Большинство DMA-контроллеров используют для передачи данных физические адреса памяти. Для этого операционная система должна преобразовать виртуальный адрес намеченного буфера памяти в физический адрес и записать этот физический адрес в адресный регистр контроллера DMA. В отдельных DMA-контроллерах вместо этого используется альтернативная схема, при которой в контроллер записывается виртуальный адрес. Затем для осуществления преобразования виртуального адреса в физический DMA-контроллер должен воспользоваться блоком управления памятью (MMU). Виртуальные адреса могут выставляться на шину только в том случае, если MMU является частью памяти (что встречается довольно редко), а не частью центрального процессора.

Как уже упоминалось, еще до начала работы DMA диск считывает данные в свой внутренний буфер. Может вызвать удивление, почему контроллер, получив данные с диска, не сохраняет байты сразу в оперативной памяти. Иными словами, зачем ему нужен внутренний буфер? На это есть две причины. Во-первых, осуществляя внутреннюю буферизацию, контроллер диска может проверять контрольную сумму перед тем, как приступать к передаче данных. Если контрольная сумма не сходится, выставляется ошибка и данные не передаются.

Во-вторых, как только начинается передача данных с диска, биты поступают с диска с постоянной скоростью независимо от того, готов контроллер их принимать или нет. Если бы контроллер попытался записывать данные непосредственно в память, то для передачи каждого слова ему пришлось бы обращаться к системной шине. Если бы шина была занята обслуживанием какого-нибудь другого устройства (например, при пакетном режиме работы), то контроллеру пришлось бы ждать. Если бы следующее слово, прочитанное с диска, поступило еще до того, как было сохранено предыдущее слово, контроллер вынужден был бы где-нибудь его сохранить. Если бы шина была слишком занята, то контроллеру пришлось бы заняться хранением довольно большого количества слов и решать массу административных задач. А когда осуществляется внутренняя буферизация блока, надобности в использовании шины не возникает вплоть до начала работы DMA, поэтому конструкция контроллера может быть упрощена, поскольку передача данных в память с помощью DMA не критична по времени. (Некоторые более старые контроллеры действительно имели непосредственное обращение к памяти, располагая совсем небольшой по объему внутренней буферизацией, но когда шина была слишком занята, передача должна была прерываться из-за ошибки переполнения.)

DMA используется не во всех компьютерах. Аргументом против его использования является то, что центральный процессор зачастую намного быстрее DMA-контроллера и может выполнять эту работу намного быстрее (когда ограничивающим фактором не является скорость работы устройства ввода-вывода). Если для него нет никакой
другой работы, то заставлять быстрый центральный процессор ждать, пока медленный DMA-контроллер завершит свою работу, абсолютно бессмысленно. Кроме того, если избавиться от контроллера DMA и возложить на центральный процессор всю работу в программном режиме, то можно сэкономить средства, что является важным фактором для дешевых встраиваемых компьютеров.

5.1.5.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Прямой доступ к памяти:

  1. Прямой доступ к информации и предузнавание
  2. Прямой доступ к информации (на основе книг Барбары Энн Бреннан).
  3. Прямой результат
  4. Глава третья Первый прямой ченнелинг
  5. Репортаж ПРЯМОЙ
  6. АНАЛИЗ ПРЯМОЙ
  7. Первый прямой ченнелинг
  8. ПРЕДСТАВЛЕНИЕ ПАМЯТИ
  9. Непосредственный доступ и предсказания
  10. 3. Доступ к источникам информации.
  11. § 6. Равный доступ к государственной службе
  12. 2.1.4. Классификация информации по доступу к ней
  13. Гигиена памяти.