🏷️Demand Paging
- 메모리 낭비를 줄이기 위해 리눅스에서 사용하는 방식이다.
- 요구 페이징을 사용하면, 프로세스의 가상 주소 공간 내의 각 페이지는 처음 접근할 때 물리 메모리에 실제로 할당된다.
📌프로세스 생성
- 따라서 프로세스가 처음 생성될 땐, 프로세스는 가상 메모리만 확보한 것이고 실제로는 물리 메모리는 확보한 상태가 아니다.
- 🖇️cf) 가상 메모리와 가상 주소 공간을 그냥 동의어로 혼용해서 쓴다.
- 가상 메모리는 정책을 의미하기도 한다.
- 윈도우에서는 스왑 영역을 가상 메모리라고 부른다.
- 그러다 실제로 페이지에 접근할 때, 해당 페이지가 물리 메모리에 존재하지 않는 것을 CPU가 검출하여 page fault를 발생시킨다.
- 🖇️cf) Page fault는 내가 찾는 페이지가 물리 메모리에 존재하지 않을 때 발생하는 Exception이다.
- 페이지가 swap 영역에 가있든, demand paging으로 아직 할당받지 못했든, Copy on Write 정책으로 아직 Copy되지 않았든 상관 없이 물리 메모리에 존재하지 않으면 발생한다.
- 물론 CoW시 공유 메모리의 write권한 문제로 발생하기도 한다.
- page fault handler는 접근된 페이지에 물리 메모리를 매핑하여 page fault를 해결한다.
📌mmap
- 이는 mmap system call로 동적으로 메모리를 획득한 경우도 마찬가지다.
- mmap함수로 메모리를 확보하는 것을 가상 메모리를 확보 했다고 표현한다.
- 확보한 가상 메모리에 접근하여 물리 메모리를 확보하고 매핑하는 것을 물리 메모리를 확보했다고 표현한다.