Получение информации из таблицы страниц памяти MMU для указанного сегмента памяти процесса
#include <sys/procfs.h>#define DCMD_PROC_PTINFO __DIOTF( _DCMD_PROC, __PROC_SUBCMD_PROCFS + 34, procfs_mapinfo )
/proc/PID/as
).DCMD_PROC_PTINFO
.int
, где может быть сохранено число смапированных сегментов памяти.Команда используется в сочетании с вызовом devctl(), а все перечисленные аргументы являются его типовыми параметрами. Команда позволяет получить информацию из таблицы страниц памяти MMU для указанного сегмента памяти процесса, ассоциированного с filedes.
Интересующий виртуальный адрес должен быть указан в поле vaddr структуры procfs_mapinfo. Если указанный виртуальный адрес не соответствует существующему сегменту памяти, devctl() вернёт информацию о следующем сегменте, с адресом, превышающим заданный.
Информация основывается на текущем состоянии таблицы страниц памяти MMU и каждая возвращаемая запись соответствует реально существующему компоненту таблицы. Это означает, что пока запись в таблице имеет режим защиты PROT_READ
| PROT_WRITE
, она не может быть прочитана или записана. В этом случае фактическая запись в таблице может характеризоваться PROT_NONE
или PROT_READ
.
Поле size характеризует размер страницы памяти. По умолчанию он равен 4Кб, но может быть и больше.
Массив из одного или нескольких структур procfs_mapinfo. Интересующие виртуальные адреса должны быть указаны в полях vaddr структур procfs_mapinfo.
Заполненный массив структур procfs_mapinfo и число мапирований, информация о которых может быть возвращена микроядром.
![]() | Число мапирований, возвращаемое в dev_info_ptr, характеризует общее число мапирований в процессе, независимо от переданного с командой буфера. |
procfs_mapinfo *my_buffer;int num_mappings;my_buffer = (procfs_mapinfo *)malloc( sizeof( procfs_mapinfo ) * 10 );if ( my_buffer == NULL ){/* Not enough memory. */}if ( (err = devctl( fd, DCMD_PROC_PTINFO, my_buffer, sizeof( procfs_mapinfo ) * 10, &num_mappings )) != EOK ){/* An error occurred. */}
pthread_join(), MsgReply(), InterruptWait(), MsgDeliverEvent(), MsgReceive(), MsgSend(), MsgSendPulse(), nanosleep(), procfs_mapinfo, pthread_cancel(), pthread_cond_wait(), pthread_create(), pthread_exit(), pthread_mutex_lock(), sigaction(), struct sigaction, SignalAction(), SignalKill(), sigsuspend(), sigwaitinfo(), SyncSemWait(), ThreadCreate()
Предыдущий раздел: перейти