8-2.[os] 페이징 기법(2)
페이지 테이블 관리
- 시스템에 여러 개의 프로세스가 존재하고 프로세스마다 페이지 테이블이 하나씩 있다
- 예) 프로세스 A, B, C 랑 물리 메모리 1개
- 프로세스는 메모리에 올라와야 실행 가능 -> 모든 프로세스의 일부 페이지가 물리 메모리의 프레임에 올라와 있음 -> 어떤 페이지가 어떤 프레임에 있는지 관리하기 위해 프로세스마다 페이지 테이블을 운영
프로세스의 수↑ 페이지 테이블의 크기↑
페이지 테이블의 크기가 은근 큼
테이블 관리의 핵심: 페이지 테이블의 크기를 적정하게 유지
페이지 테이블의 크기↑ 운영체제 영역↑ 사용자 영역↓
- 물리 메모리의 크기가 작을 때: 프로세스와 페이지 테이블의 일부도 스왑 영역으로 옮겨진다
- 페이지 테이블에 빠르게 접근하기 위해 레지스터가 존재
- 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 재빨리 파악해야함
- 페이지 테이블 기준 레지스터(Page Table Base Register, PTBR): 각 페이지 테이블의 시작 주소를 보관
페이지 테이블 매핑 방식
- 페이지 테이블 전체를 메모리에서 관리하느냐, 일부를 스왑 영역에서 관리하냐 -> 가상 주소를 물리 주소로 변환하는 방법이 달라짐
직접 매핑
- direct mapping
- 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식
- 별다른 부가 작업 없이 바로 주소 변환이 가능
연관 매핑
- associative mapping
- 페이지 테이블 전체를 스왑 영역에서 관리하는 방식
- 물리 메모리의 여유 공간이 작을 때 사용하는 방식
모든 페이지 테이블을 저장장치의 스왑 영역에 저장하고 그중 일부만 물리 메모리에 가지고 있다
페이지 테이블의 일부만 무작위로 가져온다 -> 페이지 번호와 프레임 번호둘 다 표시
직접 매핑: 원하는프레임 번호를 한 번에 바로 얻을수 있다
- 연관매핑: 물리 메모리 내의 페이지 테이블을 다 검색한다 -> 검색 실패: 스왑 영역에 있는 페이지 테이블을 검색
집합-연관매핑
set-associative mapping
연관 매핑의 문제를 개선한 방식
연관 매핑과 동일: 모든 페이지 테이블을 스왑 영역에서 관리하고 일부만 물리 메모리로 가져온다
페이지 테이블을 일정한 집합으로 자르고, 자른 덩어리 단위로 물리 메모리 에 가져온다
페이지 테이블을 일정하게 자르고 이를 관리하는 페이지 테이블을 하나 더 생성
- 집합 테이블 (set table): 일정하게 자른 페이지 테이블이 물리 메모리에 있는지, 스왑 영역에 있는지에 대한 위치 정보를 표시
- I (invalid)로 표시된 것은 스왑 영역에 있다는 의미
- 예) 집합2에 속한 페이지(페이지 테이블 엔트리 10〜 14)는 물리 메모리의 180번지에 있다
- 집합 테이블을 통해 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지, 물리 메모리에 있는지 간단히 파악
역매핑
invert mapping
직접 매핑, 연관매핑, 집합-연관 매핑:
- 페이지 번호를 기준으로 테이블을 구성
- 프로세스마다 페이지 테이블을 만듦
역매핑:
- 물리 메모리의 프레임 번호를 기준으로 테이블을 구성
- 프로세스의 수와 상관없이 테이블이 하나만 존재
- -> 테이블의 크기가 작다
- 가상 메모리에 접근할때 프로세스 아이디(PID)와 페이지 번호를 모두 찾아야한다
- 예) 프레임 1이 프로세스 1의 페이지 0에 있다
- 모든 페이지를 검색한 후에야 해당페이지가 스왑 영역에 있다는 걸 알게됨 -> 매우 느림
직접 매핑
모든 페이지 테이블을 물리 메모리에 가지고 있는 가장 단순한 방식
물리 메모리가 충분할 때 사용할 수 있음
- 주소 변환 속도가 빠르다
- 가상 주소 VA=를 물리 주소 PA = 로 변환 -> 페이지 테이블의 P번째 위치(PTE P)에서 원하는 프레임 값을 얻을 수 있다
연관 매핑
- 전체 페이지 테이블을 스왑 영역에 두고 페이지 테이블의 일부를 물리 메모리에 가져오는 방식
- 물리 메모리에는 일부 페이지만 무작위로 저장되어 있음
- TLB 히트: 가상 주소 -> 변환 색인 버퍼 -> 물리 주소
- TLB 미스: 가상 주소 -> 변환 색인 버퍼 -> 스왑 영역의 직접 매핑 테이블
- 변환 색인 버퍼 (Translation Look-aside Buffer, TLB)
- = 연관 레지스터 (associate register)
- 페이지 번호 + 프레임 번호로 구성된 작은 테이블
캐시 시스템과 유사함: 캐시 히트, 캐시 미스
단점: 모든 변환 색인 버퍼를 검색한 후에야 TLB 미스가 있다는 사실을 알게 됨
집합-연관 매핑
- 일반적으로 컴퓨터를 사용할 때 파일이 많으면 디렉터리를 사용하여 일정한 묶음으로 모아놓는다
- = 디렉터리 매핑(directory mapping)
관련 있는 테이블을 덩어리로 모아놓은 형태
= 멀티페이지 매핑 (multi-page mapping)
- 페이지 주소를 세분화
- 페이지 테이블을 같은 크기의 여러 묶음으로 나누고, 각 묶음의 시작 주소를 가진 디렉터리 테이블을 새로 만들어 관리
전체 페이지 테이블은 연관 매핑 과 마찬가지로 스왑 영역에 있으며, 일부 테이블은 묶음 단위로 메모리로 옮긴다
디렉터리 테이블:
- 해당 묶음이 현재 메모리에 있는지, 스왑 영역에 있는지를 표시
- 가상 주소 -> 디렉터리 테이블 -> 묶음 페이지 테이블 -> 물리 주소 -> TLB 히트
- 가상 주소 -> 디렉터리 테이블 (I) -> TLB 미스 -> 스왑 영역의 직접 매핑 테이블 -> 물리 주소
- I(invalid) -> TLB 미스
가상 주소를 VA=가 아니라 VA=로 바꾸어 표시
- P1: 디렉터리 테이블에서의 위치 정보
- P2: 묶음 내에서의 위치 정보
예시)
- 페이지 테이블을 10개씩 한 묶음으로 나눔
- 가상 주소 32번지
- 직접 매핑:
- 집합-연관 매핑:
- 가상 주소 127번지
- 직접 매핑
- 집합-연관 매핑
- 가상 주소 1784번지
- 직접 매핑
- 집합-연관 매핑
장점:
- 크기가 큰 페이지 테이블을 같은 크기의 묶음으로 나누어 관리함으로써 효율적
- 집합-연관매핑에서는 디렉터리 테이블을 이용하여 묶음 테이블의 위치를 바로확인
역매핑
- 기존 매핑: 프로세스마다 페이지 테이블이 필요하고 그 크기도 작지 않기 때문에 물리 메모리 공간을 낭비하는 것이 문제
- 물리 메모리의 프레임 번호가 기준
- 물리 메모리가 어떤 프로세스의 어떤 페이지를 가지고 있는지
- <프레임 번호, 프로세스 아이디, 페이지 번호>
- 프로세스의 수와 상관없이 항상 일정 크기의 페이지 테이블을유지
- 역매핑 테이블에서 검색
- 없으면 스왑영역
- 단점: 페이지 테이블을 다 검사한후에야 저장장치에 접근하기 때문에 검색 시간을낭비