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

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

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

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

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

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

Hal должен настроить объекты адаптера, поддерживающие DMA, для широкого спектра устройств DMA и автобусов ввода-вывода на разных компьютерах. Например, большинство контроллеров ISA DMA, подчиненных устройств и устройств master шины не имеют адресных линий для доступа к полному физическому пространству адресов системы с четырьмя гигабайтами 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, в адаптере master шины или даже могут быть виртуальными регистрами, созданными HAL в системной памяти.

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