요구 페이징 (Demand Paging)
프로세스가 요청할 때 필요로 하는 데이터를 메모리로 가져오는 것을 "요구 페이징(Demand Paging)"이라고 한다. 운영체제는 프로세스를 구성하는 모듈을 전부 메모리에 올리지 않고 필요한 모듈만 메모리에 올려 실행하고 필요할 때 메모리로 불러온다. 이는 "메모리를 효율적으로 관리하고 응답 속도를 향상하기" 위함이다.
이와 같이 사용자가 요구할 때 해당 페이지를 메모리로 가져오는 것을 요구 페이징이라고 한다. 반대로 앞으로 필요할 것이라고 예상되는 페이지를 미리 가져오는 것을 "미리 가져오기"라고 한다. 미리 가져오기를 한 데이터가 쓸모없게 되면 피해가 크기에 현대의 운영체제는 요구 페이지를 기본으로 사용한다.
페이지 테이블 엔트리 (PTE: Page Table Entry)
가상 메모리 시스템에서 사용자의 프로세스는 물리 메모리 또는 스왑 영역 중에 있다. 이때 페이지가 스왑 엽역에 있는 경우는 두 가지인데, "요구 페이징으로 인해 처음부터 물리 메모리에 올라가지 못한 경우"와 "메모리가 꽉 차서 스왑 영역으로 옮겨진 경우"이다. 어떤 경우이든지 페이지 테이블에는 페이지가 메모리에 있는지, 스왑 영역에 있는지를 표시해야 한다.
페이지 테이블의 한 행인 페이지 테이블 엔트리(PTE)는 페이지 번호와 프레임 번호로 구성된다. 그런데 정확히는 페이지 번호, 플래그 비트, 프레임 번호로 구성된다. 페이지 테이블 엔트리의 가운데에는 플래그 비트가 있는데, 플래그 비트의 구성 요소로는 다음이 있다.
- 접근 비트(Access Bit): 페이지가 메모리에 올라온 후 사용한 적이 있는지 알려준다. 해당 메모리에 읽기나 실행 작업을 했다면 접근 비트는 1이 된다.
- 변경 비트(Modified Bit): 페이지가 메모리에 올라온 후 데이터 변경 후 데이터 변경이 있었는지 알려준다. 해당 메모리에 쓰기나 추가 작업을 했다면 변경 비트가 1이 된다.
- 유효 비트(Valid Bit): 페이지가 실제 메모리에 있는지를 나타낸다. 가상 메모리 시스템에서는 물리 메모리가 부족할 때 일부 페이지가 스왑 영역으로 옮겨진다.
- 읽기 비트, 쓰기 비트, 실행 비트(Read Bit, Write Bit, Execute Bit): 페이지에 대한 읽기 권한, 쓰기 권한, 실행 권한을 나타낸다. 권한이 없는 프로세스가 읽기나 쓰기를 하려할 때 접근을 차단한다.
페이지 부재 (Page Fault)
프로세스가 페이지를 요청했을 때 그 페이지가 메모리에 없는 상황을 "페이지 부재(Page Fault)"라고 한다. 페이지 부재가 발생하면 프로세스가 해당 페이지를 사용할 수 있도록 스왑 영역에서 물리 메모리로 옮겨야 한다. 스왑 영역에 있는 페이지를 메모리의 빈 영역에 올리고 페이지 테이블을 갱신한다. 만약 빈 프레임이 없다면 메모리에 있는 프레임 중 하나를 스왑 영역으로 내보내고 해당 페이지를 가져온다.
어떤 페이지를 스왑 영역으로 내보낼지 결정하는 알고리즘을 "페이지 교체 알고리즘(Page Replacement Algorithm)"이라고 한다. 그리고 페이지 교체 알고리즘에 의해 스왑 영역으로 보낼 페이지를 "대상 페이지(Victim Page)"라고 한다.