본문 바로가기
Lecture/OS

페이징 기법

by YUNZEE 2023. 11. 14.
728x90
페이징 기법의 주소 변환 과정

페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법으로, 물리 주소 공간을 같은 크기로 나누어 사용한다.

VA=<P, D> -> PA=<F, D>로 변환될 때 페이지 테이블을 사용하여 P는 F로 바꾸고 D는 변경 없이 그대로 쓴다. D를 변경하지 않은 이유는 페이지와 프레임의 크기를 똑같이 나누었기 때문이다.

 

16bit CPU의 주소 변환 예

한 페이지를 10B로 나누면 주소 변환 과정은 그리 어렵지 않다. 예를 들면 가상 주소 30번은 VA = <3,0>으로 간단하게 만들 수 있다. 그러나 컴퓨터는 2진법을 사용하므로 한 페이지의 크기는 2의 지수승으로 페이지의 크기가 다양할 경우 가상 주소를 <P, D>로 변환하는 공식이다.

 

P = 나눗셈(가상 주소/ 한 페이지의 크기)의 몫

D = 나눗셈(가상 주소/ 한 페이지의 크기)의 나머지

 

예를 들면 한 페이지의 크기가 10B인 가상 메모리 시스템에서 가상 주소는 32번의 P는 32/10의 몫인 3, D는 32/10의 나머지인 2다. 한 페이지의 크기가 512B인 시스템에서 가상 주소 2049번의 P는 2049/512의 몫인 4, D는 2049/512의 나머지인 1이다. 또한 한 페이지의 크기가 4,096B인 가상 메모리에서 897654번은 <219,630>으로 표시된다.

 

컴퓨터의 가상 주소 VA의 구성을 보여준다. 가상 주소 VA = <P,D>에서 P는 6bit, D는 10bit다. 이는 시스템 페이지가 0~63(2^6 -1) 번까지 총 64개이고, 페이지 하나가 0~1023(2^10 - 1) 번까지 총 1,024개 번지로 구성되어 있다는 의미다.

 

16bit CPU에서 한 페이지의 크기가 2^10B인 페이지 시스템을 나타낸다. CPU가 16bit이므로 가상 주소는 시작 주소 0번부터 맨 마지막 주소 65535(2^16 -1)번까지다. 한 페이지의 크기가 2^10(1024) B이므로 전체 페이지의 수는 2^6 즉, 64개이고 페이지 0번부터 63번까지 존재한다. 한 페이지의 크기가 1,024B이므로 가상 주소의 페이지 0은 0 ~ 1023번, 페이지 1은 1024 ~ 2047번...

 

물리 주소도 가상 주소와 마찬가지로 1,024B로 나뉜다. 물리 주소에는 프레임 0부터 프레임 31까지만 있다. 이론적으로 16bit CPU는 최대 2^16B의 메모리를 가질 수 있지만 그림에서는 물리 메모리의 크기를 32KB로 도식화했다. 32bit CPU는 최대 4GB의 물리 메모리를 가질 수 있지만 2GB의 물리 메모리에서도 잘 작동한다. 이처럼 실제 메모리가 최대가 아니더라도 잘 작동한다는 것을 보여주기 위해 일부로 물리 메모리의 크기를 작게 잡아 도식화했다. 이 경우 부족한 물리 메모리는 스왑으로 처리하면 된다. 따라서 물리 주소의 부족한 부분은 페이징 시스템에 문제가 되지 않는다.

 

물리 메모리의 페이지 테이블의 구조

페이지 테이블에 빠르게 접근하기 위해 레지스터가 존재한다. 각 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 재빨리 파악할 필요가 있다. 그래서 각 페이지 테이블의 시작 주소를 페이지 테이블 기준 레지스터에 PTBR: page table base register 보관한다. 

 

쓰기 시점 복사

동시에 여러 개의 같은 브라우저를 메모리에 올려놓고 사용한다면 메모리가 낭비될 것이다. 낭비를 줄이는 방법은 메모리에 크롬 브라우저를 하나만 올려놓고 공유하는 것이다. 

A페이지 테이블을 구글 홈페이지라고 하고 B페이지 테이블을 네이버 페이지 라고 가정

 

프로세스 A는 구글 홈페이지를 보고 있지만 프로세스 B는  네이버 페이지를 보고 있기 때문에 데이터 영역을 공유할 수 없다. 구글 홈페이지를 보는 프로세스 A는 페이지 2를 데이터 영역으로 사용하고, 네이버 홈페이지를 보는 프로세스 B는 페이지 4를 데이터 영역으로 사용하고 있다.

 

fork()를 사용하여 프로세스를 복사한 경우를 나타낸다. 그림과 같이 프로세스가 A가 사용하던 전체 페이지 테이블을 복사하면 프로세스를 손쉽게 복사할 수 있다.

그런데 프로세스를 복사하려면 공유할 수 있는 프레임도 있지만 공유할 수 없는 프레임도 있다. 그림에서 크롬 브라우저의 메인코드는 공유할 수 있는 프레임도 있지만 공유할 수 없는 프레임도 있다. 그림에서 크롬 브라우저의 메인코드는 공유할 수 있는 프레임으로 프로세스 A와 B는 같은 크롬 브라우저 코드를 사용한다. 반면에, 프로세스가 사용하는 변수는 공유할 수 없다. 변수 이름이 같더라도 내용이 변하기 때문이다.

 

프로세스 B가 네이버 홈페이지로 이동하는 경우다. 프로세스 B의 변수 HOME이 "google"에서 "naver"로 변경되어야 한다.

이와 같은 데이터 변화가 있을 때까지 복사를 미루는 방식을 쓰기 시점 복사 copy on write라고 한다.

 

그림에 오타가 있습니다 PB페이지 테이블 HOME = 'NAVER' 입니다.('google'아님)

퀴즈

1. 각 프로세스가 메모리에 접근하려고 할 때 메모리 관리자는 페이지 테이블의 위치를 재빨리 파악할 필요가 있다. 그래서 각 페이지 테이블의 시작 주소를 어디에 보관하는가? 

2. 데이터 변화가 있을 때까지 복사를 미루는 방식을 무엇이라고 하는가?

728x90

'Lecture > OS' 카테고리의 다른 글

요구 페이징  (0) 2023.11.16
세그먼테이션 기법  (0) 2023.11.15
가상 메모리  (2) 2023.11.09
단일 프로그래밍 환경의 메모리 할당  (0) 2023.11.08
메모리 관리의 개요  (0) 2023.11.07