티스토리 뷰

Dev/CS

페이지 테이블의 크기

kuidoli 2025. 5. 21. 12:16

페이징과 페이지 테이블을 학습하면서 페이지 테이블의 크기에 대한 내용이 이해가 잘 되지 않아서 이번에 정리하게 됐다.

CPU 와 메모리의 관계

페이지 테이블의 크기로 들어가기 전에 CPU 와 메모리의 관계를 먼저 살펴볼 필요가 있다.

32bit CPU 는 2^32 개의 메모리 주소를 표현할 수 있다. 2^32 경우의 수만큼 메모리 주소를 가리킬 수 있고 메모리 한 칸의 크기는 8bit(1byte)다.

2^32 byte 는 4GB 라서 32bit CPU 로 사용할 수 있는 물리 메모리의 최대 크기가 4GB 다. 이는 이론적으로 그렇고 실제로는 Physical Address Extension 등을 통해 최대 64GB 까지 사용할 수 있다고 한다. 32bit CPU 를 사용하는 컴퓨터에서 4GB 보다 큰 8GB 메모리를 사용할 수도 있다.

가상 메모리 주소는 프로세스 마다 OS 에서 따로 관리된다. CPU 는 가상 메모리 주소를 사용하고 메모리는 물리 메모리 주소를 사용한다. 가상 메모리 주소를 물리 메모리 주소와 매핑하기 위해 페이지 테이블을 운영체제가 관리한다.

페이지 테이블도 프로세스마다 별도로 생성된다. 프로세스 간의 가상 메모리 주소는 같더라도 실제로 차지하는 물리 메모리의 주소는 다르다.

페이지 테이블 크기를 구하는 방법

페이지 테이블 크기 = 페이지 테이블 엔트리 갯수 X 페이지 테이블 엔트리 크기

페이지 테이블의 크기는 페이지 테이블 엔트리 갯수(페이지 테이블의 각 인덱스 총 갯수)와 각 페이지 테이블 엔트리의 크기의 곱으로 이루어진다.

페이지 테이블 엔트리의 갯수는 가상 메모리 주소의 크기를 페이지 크기로 나눈 몫이다. 가상 메모리 주소는 프로세스마다 각자 사용한다. 가상 메모리 주소의 크기는 한 프로세스가 사용할 수 있는 가상 메모리의 크기가 된다. 가상 메모리 크기도 앞에서 언급한 물리 메모리의 크기와 동일하게 계산한다. 32bit CPU 에서 가상 메모리 크기는 4GB 다.

페이지 크기를 4KB 로 가정해서 페이지 테이블의 크기를 계산한다.

페이지 테이블 엔트리의 갯수

먼저 페이지 테이블 엔트리의 갯수를 구한다. 페이지 테이블 엔트리의 갯수는 4GB 에서 4KB 를 나눈 몫이다. 4GB 는 2^32 bytes 와 같고 4KB 는 2^12 bytes 와 같다. 2^32 에서 2^12 를 나누면 2^20 이다. 페이지 테이블 엔트리의 갯수는 2^20 이다.

페이지 테이블 엔트리의 크기

다음으로 페이지 테이블 엔트리의 크기를 구한다. 페이지 테이블 엔트리의 크기는 물리 메모리 크기와 연관있다. 페이지 테이블 엔트리는 물리 메모리 프레임 번호와 플래그 값을 갖는다. 프레임 번호는 가상 메모리의 페이지가 실제로 어느 물리 메모리 프레임에 있는지를 나타낸다.

물리 메모리의 크기를 페이지 크기로 나눈 몫이 페이지 테이블 엔트리의 크기다. 페이지 테이블 엔트리의 크기는 물리 메모리 프레임의 갯수와 연관해서 생각할 수 있다.

2^20 X 4bytes = 2^20 X 2^2bytes = 4MB

물리 메모리의 크기가 4GB 면 앞서 가정한 페이지 크기인 4KB 로 나눴을 때 2^32 / 2^12 는 2^20 이다. 2^20개의 물리 메모리 프레임 갯수가 있기 때문에 이를 페이지 테이블 엔트리에서 한 물리 메모리 프레임 번호를 표현하려면 20 자릿수 즉 20 bit 가 필요하다.

그리고 플래그 값들이 있는데 이 플래그 값 하나당 1 bit 가 필요하다. 유효 플래그, 권한 플래그, 수정 여부 플래그 등으로 약 5 ~ 10 bit 가 필요하다. 25 ~ 30개의 bit 가 필요한데 2의 제곱으로 맞추기 위해 32bit 를 선택할 수 있다. 32bit 는 4 byte 와 같다. 그래서 페이지 테이블 엔트리의 갯수인 2^20 에서 페이지 테이블 엔트리의 크기인 4byte 를 곱하면 4MB 가 된다.

MMU

CPU 에서 나오는 모든 주소는 페이지 번호와 페이지 오프셋 두 개의 부분으로 나누어진다

주의할 점은 페이지 테이블에는 오프셋이 없다. 오프셋은 논리주소(가상 메모리 주소)에 있다. MMU 는 페이지 테이블에서 논리주소에 매칭되는 물리주소(물리 메모리 프레임 번호)를 찾고 논리주소의 오프셋을 사용해서 물리 메모리 프레임 번호 안에서 정확한 위치를 찾는다.

TLB

물리 메모리의 주소를 찾으려면 2번의 메모리 접근이 필요하다. 한번은 페이지 테이블에서 접근하고 그 다음은 실제 물리 메모리에 접근한다. 이를 개선하기 위해 하드웨어 캐시인 TLB 를 사용한다. TLB 에서 해당 페이지 번호(논리 주소의 페이지 번호)가 없으면 페이지 테이블에서 조회하고 TLB 에 추가한다. TLB 가 가득 찼다면 라운드 로빈 등의 알고리즘을 바탕으로 기존의 항목을 제거하고 추가한다.


<참고>

운영체제 10판

위키피디아

ChatGPT

'Dev > CS' 카테고리의 다른 글

정수 표현 방법  (0) 2024.04.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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 31
글 보관함