리눅스데브코스 [11주차 - 3]<리눅스 메모리 관리 기술(4) 실습>

심우열·2023년 6월 14일
0

1. read_pfn.c 완성

1. 코드

#include <sys/fcntl.h>
#include <sys/types.h>
#include <sys/user.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

/* Check pfn of specified virtual address */
unsigned long read_pfn(void* ptr)
{
	static int fd = -1;
	/* virtual page number*/
	unsigned long vpn = (unsigned long) ptr >> 12;
	unsigned long data;

	fd = open("/proc/self/pagemap", O_RDONLY);

	/* read 64 bit in fd, offset is vpn */
	pread(fd, &data, sizeof(data), vpn * sizeof(data));

	/* 54-0 bits represent page frame number */
	if(data & 1UL << 63)
		return data & ((1UL << 55) - 1);
	
	/* 
	 * return the PFN mapped at "ptr"
	 * use /proc/self/pagemap
	 * hint: please refer to the pagemap section in "man proc"
	 *
	 */
	return 0;
}

2. 실행 결과

linux-source-5.15.0 설치 문제

2. MAP_SHARED, MAP_PRIVATE 동작 확인

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글