솜은 코튼

[OS] 가상 메모리 (페이징 기법) 본문

OS

[OS] 가상 메모리 (페이징 기법)

솜.코 2023. 5. 21. 15:04

 

 

고정 분할 방식으로 메모리를 분할하여 관리하는 것을 페이징 기법이라고 했다.

 

페이징 기법의 구현 방법에 대해 알아보자.

 

 

페이징 기법의 구현

.

.

.

 

 

가상 주소는 프로세스 입장에서 바라본 메모리 공간으로 항상 0부터 시작한다.

가상 주소의 분할된 각 영역은 페이지라고 부르며 번호를 매겨 관리한다.

 

 

 

 

물리 메모리의 각 영역은 '프레임'이라고 부른다.

즉, 가상 메모리 영역은 '페이지', 물리 메모리 영역은 '프레임'으로 칭한다.

 

페이지와 프레임은 크기가 같아 어떤 프레임에도 배치될 수 있다.

모든 페이지의 위치 정보는 '페이지 테이블'에 담겨 있다.

 

모든 페이지의 정보를 순서대로 가지고 있으며,

물리 메모리에 없는 페이지는 페이지 테이블에 'invalid'라고 표시된다.

'invalid'는 해당 페이지가 스왑 영역에 있다는 의미이다.

 

 

페이징 기법의 주소 변환

.

.

.

 

 

페이징 기법에서 가상 주소를 물리 주소로 변환하는 방법을 예로 들어 보자.

 

 

 

 

가상 주소 30번지페이지 30번째 위치에 있다.

또한 페이지 3프레임 1에 있다는 것을 페이지 테이블을 통해 알 수 있다.

최종적으로 물리 메모리 '프레임 1'의 '0번째 위치'의 주소로 접근한다.

 

 

이번에는 가상 주소 18번지로 예를 들어보자.

 

가상 주소 18번지페이지 18번째 위치에 있다.

또한 페이지 1프레임 3에 있다는 것을 알 수 있다.

최종적으로 물리 메모리 '프레임 3'의 '8번째 위치'의 주소로 접근한다.

 

 

이 주소 변환 과정을 정형화 해보면

페이징 기법에서는 가상 주소를 'VA = <P, D>'로 표현한다.

(VA: 가상 주소, P: 페이지, D: 페이지의 처음 위치에서 해당 주소까지의 거리)

 

즉, 가상 주소 30번지는 VA=<3, 0>으로 표현된다.

 

 

물리 주소는 'PA=<F, D>'로 표현한다.

(PA: 물리 주소(실제 주소), F: 프레임, D: 프레임의 처음 위치에서 해당 주소까지의 거리)

 

즉, VA=<3,0>이 PA=<1,0>으로 변환되었다는 것은

가상 주소 30번지가 물리 주소 프레임 1의 0번 위치로 변환되었다는 뜻이다.

 

 

페이징 기법의 주소 변환 과정은 페이지 테이블을 사용하여

P는 F로 바꾸고 D는 변경 없이 그대로 쓴다.

(D를 변경하지 않는 이유는 페이지와 프레임을 동일한 크기로 나누었기 때문이다.)

 

 

이렇게 페이지 테이블을 이용하면 간단하게 가상 주소를 물리 주소로 변환할 수 있다.

또한 페이지는 순서대로 정리되기 때문에

페이지 테이블의 컬럼은 프레임 번호로만 구성되어 있다.

 

 

앞에 예시는 한 페이지를 10B로 나누어

가상 주소 32번지의 P는 32/10의 몫인 3, D는 나머지인 2이다.

 

컴퓨터는 2진법을 사용하므로

한 페이지의 크기는 2의 지수승, 예로 2¹(1,024)B 으로 분할된다.

 

16bit CPU의 컴퓨터에서 한 페이지의 크기가 ⁰B일 때,

한 프로세스가 사용할 수 있는 가상 메모리의 크기는 2¹⁶B이고

한 페이지의 크기가 2¹⁰B이기 때문에

 

가상 주소로 사용할 수 있는 16bit 중 6bit는 페이지 번호(P)로,

10bit는 페이지의 처음 위치에서 해당 주소까지의 거리(D)로 사용한다.

 

 

 

 

즉, 페이지는 0번부터 63(2⁶-1)번까지 존재하고,

가상 주소의 페이지 0은 0~1023(2¹⁰-1)번지, 페이지 1은 1024~2047번지, ..로 구성된다.

 

 

 

 

가상 주소와 물리 주소의 크기는 동일하고 물리 주소에는 프레임이 0부터 31까지만 있다.(2⁶)

(이론적으로 16bit CPU는 최대 2¹⁶B(65KB)의 메모리를 가질 수 있다.)

 

 

그럼 가상 주소가 물리 주소로 바뀌는 과정을 예로 들어보자.

 

가상 주소 980번지의 P는 980/1,024의 몫인 0, D는 나머지인 980이므로

정형화된 표기법으로 VA=<0, 980>이다.

페이지 테이블로 가서 '페이지 0''프레임 2'에 저장되어 있다는 것을 확인한 후

물리 메모리의 프레임 2 시작 지점으로부터 980번지 떨어진 곳에 접근한다.

 

 

페이지 테이블은 프로세스마다 가지고 있다.

메모리 관리자는 특정 프로세스가 실행될 때마다 해당 페이지 테이블을 참조하여

가상 주소를 물리 주소로 변환하는 작업을 반복해야 한다.

 

 

 

 

페이지 테이블은 메모리 관리자가 자주 사용하는 자료구조이므로

물리 메모리 영역 중 운영체제 영역의 일부분에 모아놓는다.

 

페이지 테이블의 수나 크기가 늘어나면 운영체제 영역이 늘어나 그만큼 사용자 영역이 줄어든다.

즉, 프로세스 수가 많아지면 페이지 테이블의 크기가 커지고

프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.

 

 

 

 

페이지 테이블을 통해 메모리 접근 방법을 확인했는데 더 나아가

각 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 빠르게 파악해야 한다.

 

이를 위해

각 페이지 테이블의 시작 주소를 '페이지 테이블 기준 레지스터(PTBR)'에 보관한다.

 

PTBR은 각 프로세스의 PCB에 저장되는 데이터로, 물리 메모리 내에 페이지 테이블의 시작 주소를 가진다.

 

 

지금까지 페이지 테이블을 이용한 메모리 접근 방식을 알아봤다.

페이지 테이블의 크기가 커짐으로써 메모리 영역이 줄어들 때

프로세스만 스왑 영역으로 옮겨지는 것이 아니라 페이지 테이블의 일부도 옮겨진다.

 

이 부분은 다음 내용에서 다뤄보겠습니당 .

 

 

 

 

 

 

 

 

* 해당 글은 '쉽게 배우는 운영체제' 책을 참고하여 작성하였습니다. 출처: 쉽게 배우는 운영체제 (조성호 지음)