Как получить адрес в области физической адресации по указателю в области виртуальной адресации?

0

Если у меня есть адрес (указатель) в области виртуальной адресации текущего процесса для закрепленной (заблокированной страницы) памяти, то как я могу получить адрес (указатель) в области физической адресации этой области памяти с помощью POSIX?

  • Процессор: x86
  • ОС: Linux 2.6 и Windows 7/8 (Server 2008R2)
  • 0
    Такая информация в основном не имеет значения в пространстве пользователя, так как физический адрес может постоянно меняться.
  • 0
    Я даже не уверен, что это возможно.
Показать ещё 3 комментария
Теги:
memory-management
posix
virtual-address-space

1 ответ

2
Лучший ответ

Вы не можете получить доступ к физическим адресам в пространстве пользователя. Все, что вы делаете, проходит через MMU и таблицы страниц. Даже если вы привязываете страницу, ядро может по-прежнему перемещать ее в физической памяти.

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

Если вам действительно нужна функциональность (хотя я по-прежнему не могу воспроизвести какой-либо способ использования информации), вам нужно написать драйвер режима ядра.

  • 0
    Спасибо! Пример, если у меня есть две сопоставленные области памяти с физической адресацией ЦП двух устройств через PCI-Express: FPGA и GPU. И я хочу, чтобы FPGA и GPU могли обмениваться данными и передавать данные без процессора. FPGA и GPU могут использовать только физический адрес и не могут использовать виртуальный адрес, не так ли?
  • 1
    @ Алекс: Да, но связь с этим оборудованием должна осуществляться в пространстве ядра, а необходимые результаты и аргументы должны передаваться в пространство пользователя и из него. Основными причинами этого являются стабильность системы (случайный процесс, повреждающий память графического процессора) и безопасность (злонамеренный процесс, использующий DMA графического процессора для перезаписи другой памяти ядра / пользователя вредоносным кодом).
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню