DCMD_PROC_PTINFO

Получение информации из таблицы страниц памяти MMU для указанного сегмента памяти процесса

Прототип:

#include <sys/procfs.h>
#define DCMD_PROC_PTINFO __DIOTF( _DCMD_PROC, __PROC_SUBCMD_PROCFS + 34, procfs_mapinfo )

Аргументы:

filedes
Файловый дескриптор процесса (открытый файл /proc/PID/as).
dcmd
DCMD_PROC_PTINFO.
dev_data_ptr
Указатель на массив структур procfs_mapinfo, включающий хотя бы один элемент.
n_bytes
Размер массива структур procfs_mapinfo, полученный с помсощью sizeof().
dev_info_ptr
Указатель на 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 и число мапирований, информация о которых может быть возвращена микроядром.


Note: Число мапирований, возвращаемое в 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()




Предыдущий раздел: перейти