요구 페이징
요구 페이징의 개요
- 사용자가 요구 할 때 해당 페이지를 메모리로 가져 오는 것을 요구 페이징이라 칭함
- 요구페이징을 하는 이유
- 가급적 적은 양의 프로세스만 메모리에 올라 와 있어 메모리를 효율적으로 관리 할 수 있다
- 필요한 모듈만 메모리에 올려 응답 속도를 향상 시킬 수 있다
- 단점
- 필요한 모듈만 메모리에 올려 놓고, 나머지 모듈은 필요 할 때 모듈에 메모리에 올리게 되는데, 이 때 이미 올라와있는 필요한 모듈들이 장기가 사용되지 않으면 문제가 있을 수 있다
- 미리 가져오기
- 앞으로 필요 할 것이라고 예상되는 페이지를 미리 가져오는 방식
- 캐시가 대표적인 예시
- 캐시 히트율이 낮을 경우 성능에 좋지 않음 → 요구 페이징을 주로 사용
페이지 테이블 엔트리의 구조
- 페이지가 스왑 영역에 있는 경우는 크게 두가지
- 요구 페이징으로 인해 처음부터 물리 메모리에 올라가 있지 못하는 경우
- 메모리가 꽉 차서 스왑 영역으로 옮겨 온 경우
- 페이지 테이블에는 페이지가 메모리에 있는지, 스왑 영역에 있는지 표시 해야 하는데, 이때 사용하는 비트가 유효 비트
- PTE ( Page Table Entry )
- 페이지 테이블의 한 행
- PTE는, 페이지 번호 / 프레임 번호 / 플래그 비트 로 구성 됨
- 직접 매핑에서는, 페이지 번호는 필요 없음 ( 모든 페이지가 물리 메모리에 올라 와 있기 때문 )
- 플래그 비트
- PTE의 속성을 나타낸 비트
- 접근 비트 ( Access bit )
- 페이지가 메모리에 올라 온 후 사용 한 적이 있는지를 알려주는 비트
- 해당 메모리에 읽거나, 실행 작업을 했다면 접근 비트의 값은 1이 됨
- 참조 비트( Reference bit )라고도 칭함
- 변경 비트
- 데이터의 변경이 있었는지 알려주는 비트
- 쓰거나 추가 작업을 했다면 변경 비트의 값은 1이 됨
- 새로운 값으로 오염되었다는 의미로써 더티 비트 ( dirty bit )라고도 칭함
- 유효 비트
- 페이지가 실제 메모리에 있는지를 나타내는 비트
- 현재 비트 ( present bit )라고도 칭함
- 읽기 / 쓰기 / 실행 비트
- 페이지에 대한 읽기 / 쓰기 / 실행에 대한 권한이 적힌 비트
- 접근 권한 비트라고도 칭함
- Segmentation table의 접근 권한 비트를 생각하면 됨
페이지 부재
- 유효 비트가 0일 때에는 페이지가 메모리에 있으므로, 주소 필드엔 프레임 번호가 저장 됨
- 유효 비트가 1일 때에는 페이지가 스왑 영역에 있으므로, 주소 필드엔 스왑 영역 내 페이지 번호가 저장 됨
- 프로세스가 페이지를 요청 했을 때, 그 페이지가 메모리에 없는 상황을 페이지 부재 ( page fault ) 라고 칭함
- 페이지 부재가 발생시 동작 방식
- 해당 페이지를 사용 할 수 있도록 스왑 영역에서 물리 메모리로 옮겨야 함
- 물리 메모리에 빈 공간이 있는 경우
- 유효 비트를 0으로 바꾸고, 스왑 영역에 있는 페이지를 메모리의 비어있는 프레임에 가져감
- 물리 메모리에 빈 공간이 없는 경우
- 유효 비트를 0으로 바꾸고 → 페이지 교체 알고리즘 ( Page Replacement Algorithm )을 통해 대상 페이지 ( victim page )를 정함 → 대상 페이지를 스왑 영역으로 옮김 → 대상 페이지의 프레임에 옮길 페이지를 옮김
지역성
- 메모리에 접근하는 패턴이, 메모리 전체에 고루 분포되는것이 아니라 특정 영역에 집중되는 성질
- 물리 메모리가 꽉 차 페이지를 스왑 영역으로 보낼 때엔 되도록 사용하지 않을 페이지를 보내는 것이 좋음
- 쫒아낼 페이지를 찾을 때는 지역성을 바탕으로 진행 하는 경우가 많음