가상 메모리
페이징 이후의 메모리 관리 방법으로, 프로세스의 일부만 물리적 메모리에 저장하고, 나머지는 가상 메모리에 저장하여 필요할 때만 호출하여 사용하는 동적 메모리 관리법을 말한다.
보조기억장치에 가상 메모리 공간을 만들어, 프로세스 원본을 저장하고 직접적인 실행에 필요한 Instruction들만 메인메모리에서 실행시키켜 공간 효율 측면에서 굉장히 뛰어나다.
메모리 분류
실제 메모리 (Real memory)
- 주기억장치
- 주소 정보 (=real address, physical address, absolute address)
가상 메모리 (Virtual memory)
- 보조기억장치
- 가장 주소 공간 (=logical address, virtual address)
그러나 처리 과정에서 수시로 보조기억장치에 접근하여 데이터를 읽어와야 하므로 Turn-around time이 증가한다. 그러나 크게 성능이 뒤떨어지지는 않는데, 지역성(Locality) 때문이다. 처리가 잦은 부분을 메인메모리로 끌어와 디스크 입출력 빈도를 줄일 수 있다.
디멘드 페이징
페이징을 통해 메모리를 조각낸 후, 보조기억장치에서 가상 메모리로 관리하는 방식을 말한다. 가상 주소 공간에서의 Virtual address와 Physical address 관계를 페이지 테이블을 통해 관리한다.
가상 주소를 물리적 주소로 변환하는 것을 Address Translation라고 했는데, 기존 페이징에서는 페이지 인덱스와 오프셋으로 이루어진 16비트 주소 정보였다면, 디멘드 페이징에서는 페이지 인덱스가 아닌 프레임 인덱스를 통해 접근한다.
페이지 테이블 엔트리
페이지 단위를 구성하는 한 칸 한 칸을 의미한다. 엔트리 한 칸은 리눅스 기준 4Byte, 즉 32bit 크기의 정보를 담고 있다. 12비트의 페이지 정보, 20비트의 프레임 주소로 구성된다.
- P : 해당 페이지가 메인 메모리에 존재하는지의 여부를 표시한다.
- M : 수정 여부를 표시한다.
- R : 접근 (참조) 여부를 표시한다.
- U : 유저 프로세스 여부를 표시한다.
- W : 작성 가능 여부를 표시한다.
- CoW : Copy-on-Write 모드 여부를 표시한다.