운영체제

운영체제 7.3 페이징

공부승식 2021. 6. 3. 20:38
728x90

Main memory를 작은 고정사이즈 파티션으로 나누고, 각 프로세스 또한 같은 크기의 고정조각으로 나눈다고 생각해보자.

페이지 : 프로세스 조각.

프레임:  Memory의 조각.

이 기법에는 internal fragmentation으로 인한 낭비만 존재한다. 마지막 페이지에서만. 

 

예를 들어보면

임의의 시간에 메모리에있는 일부 프레임은 사용중이고, 어떤 프레임들은 비어있다.

운영체제는 빈 프레임의 목록을 유지한다. 15개의 빈프레임이 있다고 해보자.(1프로세스를 15개로 쪼갠 모양이다.)

프로세스 A는 4페이지로 이루어져있고, 그 프로세스를 메모리로 적재할때,

운영체제는 4개의 빈 프레임을 찾아서 그 프레임에 프로세스A의 4페이지를 적재한다. (AAAAxxxxxxxxxxx)

다음으로 3개의 페이지로 이루어진 프로세스B와 4개의 페이지로 이루어진 프로세스C가 차례로 적재된다. 

(그럼 15개의 프레임중 11개의 프레임이 찬다.) 

그 다음 프로세스 B가 block상태가 되어, main memory밖으로 swap-out된다.

그러면 AAAAxxxCCCCxxxx(x는 빈공간)인 상태가 된다.

5개의 페이지로 이루어진 새로운 프로세스D를 적재하려고 한다고 생각해보자. 

5개 페이지짜리 연속된 프레임이 이 메모리에는 없는데, 논리주소라는 개념을 이용해서 두개를 띄어서 적재할 수 있다.

 

운영체제는 각 프로세스마다 하나의 Page table을 유지한다. 

Page table: 페이지가 프레임에 Mapping이 어떻게 되었는가? 를 판단하는 표. 

프로그램 안에서 각 논리주소는 페이지 번호와 페이지 내의 오프셋으로 구성된다.

단순 분할의 경우, 논리주소는 프로그램의 시작위치부터의 상대적인 값으로, CPU는 그 논리주소를 물리주소로 변환시킨다. 

페이징에서도 논리-물리주소 변환은 CPU에 의해서 하드웨어적으로 일어난다.

 

CPU는 수행중인 프로세스의 페이지테이블에 어떻게 접근하나요?

-> 논리주소(페이지 번호, 오프셋)가 주어지면 CPU는 페이지테이블을 이용하여 물리주소(프레임숫자, 오프셋)를 생성한다.

 

5개 페이지의 프로세스 D가 들어왔다면

AAAADDDCCCCDDxx가 된다. 

페이지 테이블은 이런식으로 구성된다.

A=0123

B=---

C=7,8,9,10

D=4,5,6,11,12

이렇게 각 페이지마다 어떤 프레임을 가지고 있는지 표현해준다.

페이지테이블은 프로세스의 각 페이지마다 하나의 항을 가지고있고, 테이블의 항은 페이지번호로 쉽게 접근할 수 있다. 

페이지테이블의 각 항은 해당 페이지가 Main memory내에 적재되어 있다면 저장되어있는 Main memory의 프레임 번호를 가지고 있다. 

운영체제는 현재 비어있고 페이지에 할당 가능한 모든 프레임들의 목록을 관리한다.

 

단순 페이징은 고정분할방법과 유사하다. 

페이징이 다른점은 파티션의 크기가 고정분할보다 작고, 한 프로그램이 하나 이상의 파티션을 차지할 수 있으며, 이 파티션이 반드시 연속일 필요는 없다는 것이다.

 

 

이 페이징 기법이 편리하게 사용되려면, 

페이지 크기와 프레임의 크기를 2의 거듭제곱이 되도록 해야한다. 

페이지의 크기를 2의 거듭제곱이 되도록 하면,

[프로그램의 시작 위치로부터 상대주소]와 [페이지번호와 오프셋으로 표현되는 논리 주소]가 같다.

예를 들어보자. 주소는 16비트이고, 페이지의 크기는 1K 즉 1024byte 이라고 하자.

상대주소는 1502 = 0000010111011110이다. 페이지의 크기가 1K이니까 10개의 비트가 오프셋이고 나머지 6비트가 페이지번호이다.

[000001] [0111011110]

페이지번호      오프셋    

페이지 번호는 1이고 오프셋은 478이며, 이는 상대주소와 똑같은 16비트의 0000010111011110과 일치한다. 

 

페이지크기를 2의 거듭제곱크기로 사용하는 데에는 2가지의 중요한 장점이 있다.

1. 논리주소의 구조가 프로그래머, 어셈블러, 링커에게 투명하다. (논리주소와 상대주소가 동일하기 때문에)

2. 수행중에 동적주소 변환을 담당할 하드웨어 기능을 구현하기가 비교적 쉽다. 

왼쪽 n개의 비트는 페이지 번호고, 오른쪽의 m비트는 오프셋이니까 n+m비트인 주소에서, n=6, m=10이 된다. 

-논리 주소의 왼쪽 n비트를 페이지 번호로 이용하기 위해서 추출한다.

-이 페이지 번호를 프로세스 페이지 테이블의 인덱스로 이용하여 프레임번호 k를 찾는다. 

-찾아진 프레임은 물리주소 k*2^m에서 시작되고, 참조하려는 바이트의 물리적 주소는 이 값에 오프셋을 더한것이다. 

 

요약: 단순 페이징에서는 주기억장치를 같은 크기의 작은 프레임으로 나눈다. 각 프로세스또한 프레임 크기와 동일한 크기를 갖는 페이지들로 나누게 되는데, 이 때, 작은 프로세스는 적은 수의 페이지를, 큰 프로세스는 더 많은 페이지를 필요로 한다.

한 프로세스가 메모리로 적재되려면 프로세스에 속한 모든 페이지가 사용가능한 프레임으로 적재되고, 페이지테이블이 그에 맞도록 설정된다.