Дескриптор DMA
Небольшая структура в памяти, описывающая одну передачу — источник, приёмник, длину и адрес следующего дескриптора, — чтобы контроллер DMA мог пройти всю цепочку сам.
Простой канал DMA программируется через регистры: адрес, счётчик, пуск. Для одного буфера этого хватает. Для нескольких, или для данных, разбросанных по памяти, дескрипторы выкладывают в ОЗУ и сообщают контроллеру адрес первого. Он читает его, выполняет передачу, переходит по указателю на следующий и продолжает. Так на практике работает scatter-gather, а кольцо дескрипторов даёт эффект циклического DMA с любым числом буферов.
Дальше всех эту идею довели сетевые карты. В их кольцах дескрипторов есть бит владения: чья запись — драйвера или железа. Классическая ошибка живёт в кэше: процессор записал дескриптор, тот остался в L1, контроллер прочитал устаревшее содержимое ОЗУ, и всё выглядит как аппаратный сбой. Почти никогда им не является. Это обслуживание кэша.