mmap과 msync에 대한 질문입니다.
+---------------------------------------------------------------------------------+
fd = open( "mmap_test", ... );
addr = mmap( (void *)0,
1024,
PROT_WRITE|PROT_READ,
MAP_SHARED,
0 );
memcpy(addr, "hello world", 11);
...
+---------------------------------------------------------------------------------+
# ./mmap_test_code (프로그램 실행)
MMAP I/O ADDR : c031b000
Bus error (core dumped)
+---------------------------------------------------------------------------------+
질문 1) 파일의 내용이 0이면 맵핑한 공간이 0이라서 메모리 접근 시
에러가 나는 것인가요?
(mmap 전 ftruncate를 하게되면 위 코드는 잘 수행이 됩니다.)
질문 2) msync와 munmap을 사용하지 않더라도 프로그램 종료 시 파일에는
hello world 라는 string이 기록되어 있습니다.
이는 MAP_SHARED로 설정되어 있다면 프로세스 종료 시 자동으로
memory -> file 로 sync가 되어서 인가요?
질문 3) 만약, (질문 2)의 상황에서 프로세스가 종료되지 않은 시점에서
memcpy()가 이루어지고 파일의 내용을 확인하게되면,
이 역시, hello wolrd라는 string이 기록되어 있습니다.
MAP_SHARED에서 msync와 munmap이 필요하다는 것을 확인할만한 예제 혹은 이론을
알려주실 수 있을까요?
자세하지않더라도 대략적인, 이해가능한 설명을 부탁드립니다..
질문 3에 대한 검증
msync가 없을 때, 파일의 내용을 보면 아무것도 기록되지 않는 것으로 확인
프로그램이 마치고 나서야 99999....로 파일에 기록되어 있음
msync가 있을 때, 파일의 내용이 채워지는 것을 확인
프로그램 동작 중에 파일을 확인하면 0000... 1111.... 2222.... 으로 동기화되어 있음을 확인
질문 2에 대한 검증
테스트를 잘못해서 나온 질문 같습니다.
msync, munmap 전에 sleep()을 주고 테스트를 진행하니 파일의 내용이 없다가
sleep()이 끝난 후 파일에 기록됨을 확인하였습니다.
댓글 달기