Диспетчер памяти использует структуру MDL для описания
набора страниц физической памяти, составляющих буфер виртуальной памяти в
контексте памяти некоторого процесса. Интерпретация MDL не зависит от
контекста памяти, поскольку MDL оперирует со страницами физической памяти.
Получив для данного буфера описание в виде MDL, драйвер в дальнейшем может
использовать буфер в контексте памяти любого процесса. Для того, чтобы
обращаться к такой памяти, необходимо получить для MDL адрес памяти в
системном адресном пространстве. Сделать это можно с помощью функции
MmGetSystemAddressForMdl().
Кроме того, буфер, описанный с помощью MDL, может быть
использован для операций DMA. Для этого физический адрес внутри MDL должен
быть транслирован в логический адрес (имеющий смысл только для данного
устройства DMA) с помощью функции loMapTransfer().
Интересно отметить следующий момент. MDL предназначен для описания буфера
данных, непрерывного в виртуальной памяти. Однако страницы физической
памяти, список которых собственно и содержит MDL, могут располагаться в
памяти произвольным образом. Это дает возможность «собирать» непрерывный в
виртуальной памяти буфер из различных фрагментов физической памяти без
копирования памяти.
В основном, мы будем встречаться с MDL при передаче данных в драйвер
посредством пакетов IRP (которые будут описаны в последующих разделах).
Тестирование параллельного программного обеспечения представляет собой более
сложную задачу по сравнению с тестированием последовательной программы. Программист
должен знать о подводных камнях при тестировании параллельного кода, имеющихся
методологиях и инструментарии.
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее
реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности,
достоинства и недостатки.