Linux_system

Linux 가상 메모리의 응용 #1 - file map

MasterOfAI 2022. 8. 19. 20:39

가상 메모리의 응용 

 

파일 맵(file map)

일반적으로 프로세스가 파일에 접근할 때는 파일을 연 뒤에 'read()', 'write()', 'lseek()' 등의 시스템 콜을 사용한다. 뿐만 아니라 Linux에는 파일의 영역을 가상 주소 공간에 메모리 매핑하는 기능이 있다. 

mmap() 함수를 특정한 방법으로 호출하면 , 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑할 수 있다. 

 

 

testfile 은 "hello" 라는 text를 담고 있는 file 이다. 

 

다음 코드를 작성하고 실행하면 , 

아래와 같이 file을 읽어 들이고 mmap() 함수를 통해 file mapping 을 하면, 파일의 내용을 메모리에 읽어 들여 그 영역을 가상 주소 공간에 매핑 할 수 있다. 

 

int fd;

fd = open("testfile", O_RDWR);

char * file_contents;

file_contents = mmap(NULL, ALLOC_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

 

이렇게 mapping이 된 이후에는 메모리와 같은 방법으로 접근이 가능해 진다. 

memcpy(file_contents, overwrite_data, strlen(overwrite_data));

 

결과를 보면 memcpy()를 통해, "hello" 가 "HELLO" 로 변경된 것을 확인 할 수 있다. 

 

출처 : 실습과 그림으로 배우는 리눅스 구조 , 다케우치 사토루저