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





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