Поделиться через


Регистры карт

Драйверы, выполняющие DMA, используют три разных адресных пространства, как показано на следующем рисунке.

сопоставления физических, логических и виртуальных адресов.

На любой платформе Windows драйвер имеет доступ к полному виртуальному адресу, поддерживаемому процессором. На 32-разрядном процессоре виртуальное адресное пространство представляет четыре гигабайта. ЦП преобразует адреса в виртуальном адресном пространстве на адреса в физическом адресном пространстве системы с помощью таблицы страниц. Каждая запись таблицы страниц (PTE) сопоставляет одну страницу виртуальной памяти со страницей физической памяти, что приводит к операции разбиения по страницам при необходимости. MDL (список дескрипторов памяти) предоставляет аналогичное сопоставление буфера, связанного с операциями DMA драйвера.

Устройства различаются по своей способности к доступу к полному виртуальному адресному пространству системы. Устройство использует адреса в логическом (устройстве) адресном пространстве. Каждый HAL использует регистры карты для перевода устройства или логического адреса на физический адрес (расположение в физическом ОЗУ). Для аппаратного обеспечения устройства регистры отображения выполняют ту же функцию, что и MDL (и таблица страниц) для программного обеспечения (драйверов): они преобразуют адреса в физическую память.

Так как эти адресные пространства адресуются отдельно, драйвер не может использовать указатель в виртуальном адресном пространстве для обращения к местоположению в физической памяти и наоборот. Драйвер должен сначала перевести виртуальный адрес на физический адрес. Аналогичным образом устройство не может использовать логический адрес для прямого доступа к физической памяти. Устройство должно сначала перевести адрес.

HAL должен настроить объекты адаптера, поддерживающие DMA, для различных устройств DMA и шин ввода-вывода на различных компьютерах. Например, большинство контроллеров ISA DMA, подчиненных устройств и устройств управления шиной имеют недостаточно адресных линий для доступа к полному четырёхгигабайтному физическому адресному пространству системы с 32-разрядным процессором (или 64-гигабайтному системному физическому адресному пространству процессора x86, работающего в 36-разрядном режиме PAE). В то время как устройства PCI DMA обычно имеют более чем достаточно адресных линий для доступа к полной физической адресной области системы в 32-разрядных процессорах. Таким образом, каждый HAL предоставляет сопоставления между логическим адресом диапазонов, к которым устройства DMA могут обращаться и физическим адресом диапазонов каждого компьютера.

Каждый объект адаптера связан с одним или несколькими регистрами карты в зависимости от объема передаваемых данных и объема доступной памяти. Во время передачи DMA HAL использует каждый регистр карты для сопоставления логической страницы, доступной устройству, с физической страницей памяти ЦП. По сути, регистры отображения обеспечивают поддержку разбивки и сбора для драйверов, использующих DMA, независимо от того, имеют ли их устройства возможности разбивки и сбора.

На следующем рисунке показано сопоставление физических и логических адресов для драйвера ISA DMA устройства, которое не поддерживает возможности сборки-разборки.

сопоставление адресов для примера устройства isa dma.

На предыдущем рисунке показаны следующие типы сопоставлений:

  1. Каждый регистр карты сопоставляет диапазон физических адресов, которые обозначаются сплошными линиями, с логическими адресам младшего порядка, обозначаемыми пунктирными линиями, для устройства ISA DMA.

    Здесь три регистра карты используются для сопоставления трех диапазонов данных, отображаемых по страницам, в системной физической памяти к трем диапазонам логических адресов низкого порядка для устройства ISA DMA.

  2. Устройство ISA использует сопоставленные логические адреса для доступа к системной памяти во время операций DMA.

    Для аналогичного устройства PCI DMA также будут использоваться три регистра отображения для трех диапазонов данных размером со страницу. Однако сопоставленные диапазоны логических адресов не обязательно совпадают с соответствующими диапазонами физических адресов, поэтому устройство PCI также будет использовать логические адреса для доступа к системной памяти.

  3. Каждая запись в MDL сопоставляет расположение в виртуальном адресном пространстве с физическим адресом.

Обратите внимание на соответствие между регистром карты и виртуальной физической записью в MDL:

  • Каждый регистратор карты и каждая виртуальная запись в MDL сопоставляют не более чем одну полную физическую страницу данных для операции передачи DMA.

  • Каждая регистрация карт и каждая виртуальная запись в MDL может сопоставлять данные в объёме меньшем, чем полная страница. Например, начальная виртуальная запись в MDL может отображаться со смещением от физической границы страницы, как показано ранее на рисунке "Физические, логические и виртуальные адресные отображения".

  • Каждый регистр карты и каждая виртуальная запись в картах MDL, как минимум, по одному байту.

В IRP, запрашивающем операцию чтения или записи, каждая виртуальная запись в MDL, непрозрачной для драйверов, в Irp->MdlAddress представляет собой границу страницы в системе физической памяти для буфера пользователя. Аналогичным образом, каждый дополнительный регистр карты, необходимый для одной передачи DMA, обозначает границу страницы в диапазоне логических адресов, отображаемых на физическую память системы, доступную для устройства.

На каждой платформе Windows каждый объект адаптера имеет связанный набор из одного или нескольких регистров карты, расположенных по базовому адресу, который специфичен для платформы и недоступен для драйверов. С точки зрения водителя, база мап-регистров, показанная на рисунке, иллюстрирующем сопоставление адресов для примера устройства ISA DMA, является дескриптором для набора мап-регистров, которые могут быть материальными регистрами в чипе, в системном контроллере DMA, в адаптере с шиной-мастер, или даже могут быть виртуальными регистрами, созданными HAL в памяти системы.

Количество регистров карты, доступных в объекте адаптера, может отличаться для различных устройств и платформ Windows. Например, HAL может сделать больше регистров карт доступными для драйверов, использующих системную DMA на некоторых платформах, чем на других платформах, так как контроллеры DMA на разных платформах Windows имеют разные возможности.