공부기록
코타쿠
« 2024/11 »
일 |
월 |
화 |
수 |
목 |
금 |
토 |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
관리 메뉴
공부기록
가상 메모리 페이징 본문
CS/OS
가상 메모리 페이징
코타쿠
2021. 5. 17. 17:58
- 가상 메모리 페이징
- 프로세스별 페이지 테이블이 필요
- 존재비트 P : 해당 페이지가 메모리에 적재되어 있는지 여부
- 적재 되어 있다면 그 항목은 그 페이지의 페이지 프레임 번호를 포함
- 적재되어 있지 않다면 보조 메모리에 있고, 페이지 인덱스를 참조시 page fault가 일어나 페이지를 반입함
- 수정비트 M : 해당 페이지가 메모리에 적재된 후 그 내용이 수정되었는지 여부
- 수정되지 않았다면 page out할 때 이 페이지를 DISK에 쓰는 연산을 할 필요가 없어진다.
- Other Control Bits
- 페이지 수준에서 보호와 공유를 다루기 위한 비트들
- 페이지 테이블 구조
- 메모리에서 한 워드를 읽을 때 마다 페이지 번호와 오프셋으로 구성된 가상 주로(혹은 논리주소)를 프레임 번호와 오프셋으로 구성된 물리주소로 변환하는 과정을 수반
- word : 메모리 기본 처리 단위 (32bit, 64bit)
- 프로세스의 크기에 따라 페이지테이블의 크기가 달라지므로, 페이지 테이블은 메모리에 있어야함
- 특정 프로세스가 수행될 때, 그 프로세스의 테이지 테이블의 시작주소를 한 레지스터에 저장
- 가상주소의 페이지 번호는 테이블의 인덱스로 쓰여 대응되는 프레임 번호를 찾게 됨
- 이는 가상주소의 오프셋과 결합되어 물리주소를 구성
- 프로세스당 하나의 페이지 테이블의 문제점
- 각 프로세스가 엄청나게 큰 가상메모리를 갖지게 된다.
- 페이지 테이블을 저장하기 위한 메모리도 수용할 수 없을 정도로 커지게 된다.
- 큰 페이지 테이블의 해결 방법
- 대부분의 가상 메모리 기법은 페이지 테이블을 가상메모리에 저장한다.
- 프로세스가 수행중일 때, 적어도 현재 참조중인 페이지의 테이블 항목과 페이지 테이블의 일부가 메모리에 있어야 한다.
- 2 (N) 단계 구조 페이지 테이블 사용
- 테이지 디렉토리 -> 테이지 테이블 -> 페이지 엔트리 의 구조를 가진다.
- 한 페이지 테이블의 크기는 한 페이지와 동일한 크기로 제한
- 페이지 디렉토리만 메모리에 있다면 페이지 테이블을 가상메모리에 page out 했다가 주메모리로 page in 시킬 수 있다.
- 역페이지 테이블 (Inverted Page Table)
- 가상주소의 페이지 인덱스 부분은 해시 함수를 통해 특정 해시값으로 사상
- 해시값은 역페이지 테이블의 인덱스로 쓰이고 역페이지 테이블은 페이지 테이블 항목들로 구성
- 페이지 인덱스가 중복되기 때문에 PID도 같이 저장한다.
- 역페이지 테이블의 인덱스는 프레임의 인덱스와 같다.
- 기존 페이지 테이블이 페이지 인덱스가 프레임 인덱스로 사상되는 대신에 역페이지 테이블은 프레임 인덱스가 특정 프로세스의 페이지 인덱스로 사상되기 때문에 역페이지 테이블이라고 한다.
- 주기억 장치의 일부 부분 만큼이 고정적으로 테이블 저장에 쓰임, 즉 크기가 고정이다.
- hash collision을 피하기 위해 chaining 기법을 사용했다.
- 모든 hash value가 충돌하는 최악의 경우, 테이블을 모두 탐색해야 하는 단점을 가지고 있다.
- TLB (Translation Lookaside Buffer)
- 페이지 테이블 항목들을 위한 특수 고속 캐시 사용
- 가장 최근에 참조된 페이지 테이블 항목을 유지
- 가상 주소가 주어지면, 처음에 TLB를 살펴보아 그곳에 있으면 (TLB hit) 바로 프레임 번호가 추출됨
- 해당 페이지 테이블 항목이 없으면 (TLB miss) 페이지 번호로 페이지테이블을 인덱싱하여 해당 페이지 테이블 항목 참조
- 존재 비트가 1이면, 해당 페이지가 주기억 장치에 존재하므로, 페이지 테이블 항목에 저장된 프레임 번호를 사용하여 실주소를 구성
- TLB는 페이지 테이블 항목을 포함하도록 갱신
- 존재 비트가 0이면, 해당 페이지가 주기억장치에 없음을 의미함으로 page fault 발생
- 하드웨어의 역할은 끝나고 OS가 호출되며, OS는 필요한 페이지를 적재하고 페이지 테이블 갱신하고 TLB를 보러 다시 간다 (결론적으로 TLB가 update 됨)
- 연관 사상
- TLB가 단지 페이지 테이블의 일부 항목만을 포함하기에 페이지 테이블 번호, 페이지 테이블 엔트리를 포함해야함
- 페이지 크기
- 페이지 크기가 작을 수록 내부 단편화의 양은 작아지나, 페이지 테이블의 크기는 커짐
- 따라서 페이지테이블이 너무 크면 한 번의 메모리 참조에 대해 두 번의 페이지 폴트가 발생할 수 있다.