[페이징(Page)이란]

 

페이징 기법은 가상 메모리를 구현하는 대표적인 방법 중 하나로, 가상 메모리 공간(논리 주소 공간)을 페이지(page) 단위로, 물리 메모리 공간을 프레임(frame) 단위로 나누어서 필요에 따라 할당하는 기법입니다.

여기서 할당하는 메모리 단위가 정확하게 맞아 떨어지지 않을 경우에는 내부 단편화가 발생할 수 있습니다.

 

 

[페이지 테이블(Page Table)]

 

페이징은 가상 메모리를 구현하기 위한 방법으로, 실제 물리 메모리에 파편화된 상태로 존재하게 됩니다. 때문에 CPU는 프로세스들의 페이지가 연속적으로 존재하지 않아 어떻게 적재되어있는지를 알 수가 없는데, 이를 위해 프로세스마다  페이지 테이블(Page Table)이라는 것이 존재합니다. 페이지 테이블은 가상 주소를 물리 주소로 변환하기 위한 매핑 정보를 저장하는 자료구조 입니다. CPU가 가상 주소를 참조하면, 페이지 테이블은 "이 가상 페이지가 물리 메모리의 어느 프레임에 있는지"를 알려줍니다.

 

 

[페이지 테이블 베이스 레지스터(Page Table Base Register)]

 

페이지 테이블 베이스 레지스터(Page Table Base Registger; PTBR)는 현재 실행중인 프로세스의 페이지 테이블 시작 주소를 저장하는 레지스터입니다. CPU는 가상 주소를 변환할 때, 이 PTBR을 기준으로 페이지 테이블에 접근합니다. 순서는 다음과 같습니다.

 

1. PTBR로 페이지 테이블 위치 확인

2. 해당 엔트리를 읽어 물리 프레임 탐색

 

컨텍스트 스위칭 발생 시에는 페이지 테이블 정보도 변경되기 때문에, 운영체제가 PTBR 값을 새 페이지 테이블의 주소로 변경하게 됩니다.

 

 

[변환 색인 버퍼(Translation Lookaside Buffer)]

 

하지만 단순하게 PTBR을 통해 주소 접근 연산을 실시하는 것은 두 번의 연산을 필요로 합니다. 이를 해결하기 위해 변환 색인 버퍼(Translation Lookaside Buffer; TLB)가 존재합니다. 

 

TLB는 페이지 테이블 접근을 빠르게 하기 위한 캐시입니다. 페이지 테이블을 매번 메모리에서 읽는 것은 느리므로, 최근 변환 결과를 이 TLB에 저장해 둡니다. CPU가 가상 주소를 요청하면, 먼저 TLB에서 해당 페이지 번호가 캐시되어 있는지 확인한 뒤, 있으면 TLB hit로 물리 주소로 변환시기고, 없으면 TLB miss로 페이지 테이블에 접근해 변환 결과를 얻어 TLB에 저장하는 과정을 수행합니다.

 

https://umtimos.tistory.com/12

 

[CS] 캐시 적중률

캐시는 항상 부족하지만, 성능을 위해 항상 필요한 존재이다.#include #define ARR_LEN 5void bubblesort(int srcArr[], int n){ int i, j, temp; for (i = 0; i srcArr[j]) { temp = srcArr[j - 1]; srcArr[j - 1] = srcArr[j]; srcArr[j] = temp; }

umtimos.tistory.com

 

 

[메모리 매니저(Memory Management Unit)와 페이지 아웃(Page Out), 페이지 인(Page In)]

 

프로세스마다 주어지는 데이터들은 주소가 같을 수도 있습니다. 예를 들어 프로세스에 0x005A5DEF03 주소값을 가진 데이터가 존재한다고 가정해봅시다.

 

아래의 그림은 프로세스 A에서도 해당 주소를, 프로세스 B에서도 해당 주소를 사용하는 상태입니다.

 

 

하지만 동일한 주소값을 사용한다고 해서 동일한 데이터 위치를 가리키는 것은 아닙니다. 왜냐하면 주소값은 우리가 쓰는 표현 체계일 뿐, 데이터가 할당된 곳을 찾아가며 관리해주는 것은 OS의 메모리 매니저(Memory Management Unit; MMU)이기 때문입니다. 결국, 계속해서 데이터를 추적하다 보면 데이터는 다른 곳에 위치하고 있는 것을 알 수 있습니다.

 

 

[스왑 인, 스왑 아웃]

 

메모리는 크게 1차 메모리(메인 메모리; RAM), 2차 메모리(보조 메모리; HDD, SSD 등)로 나눌 수 있습니다. 여기서 MMU는 현재 실행해야 하는 데이터는 1차 메모리로, 중요도가 떨어지거나 불필요한 데이터를 2차 메모리로 옮기는데, 필요로 하는 데이터를 1차 메모리로 가져오는 행위를 스왑 인(혹은 페이지 인), 불필요한 데이터를 2차 메모리로 옮기는 행위를 스왑 아웃(혹은 페이지 아웃)이라고 합니다.

 

아래 그림과 같이 프로세스 A, 프로세스 B가 존재할 때, 프로세스 B가 I/O 관련 작업을 수행하게 된 상태라고 가정해보겠습니다. 이럴 경우 프로세스 B의 작업은 우선순위가 낮다고 판단되어, 굳이 RAM에 데이터를 올려두고 작업할 이유가 없게 됩니다. 이때 스왑 아웃이 발생합니다.

 

프로세스 B의 I/O 작업이 끝난 뒤, 다시 작업을 진행해야 할 경우에는 데이터를 다시 옮겨오는 스왑 인이 발생하게 됩니다.

 

'컴퓨터과학 > 시스템' 카테고리의 다른 글

[CS] 페이지 폴트(Page Fault)  (0) 2025.05.19
[CS] 세그멘테이션(Segmentation)  (0) 2025.05.19
[CS] 가상 메모리(Virtual Memory)  (0) 2025.05.18
[CS] 데드락(Dead Lock)  (0) 2025.05.18
[CS] 임계 영역(Critical Section)  (0) 2025.05.18

+ Recent posts