-
페이징 정리 - 1컴퓨터 과학/운영체제 2021. 8. 8. 17:42
기본 개념
외부 단편화를 해결할 수 있다. 메모리가 프로세스에 할당되고 해지되는 과정에서 생기는, 분산된 메모리 조각을 마치 연속된 공간인 것처럼 사용할 수 있다. CPU는 실제 메모리가 파편되어 있는지 알 수 없고 관심을 가질 필요도 없다. 페이지는 물리 메모리에 할당되는데, 물리 메모리의 할당 단위가 프레임이다. 페이지와 프레임은 같은 크기이다.
32bit cpu는 기본 연산 단위가 32bit이다. 포인터가 32bit(4byte)이므로 표현할 수 있는 주소의 수가 2^32개다. 이는 4,294,967,296개이다(약 42억). 32bit가 말 그대로 비트가 32개 있다는 것이고 1비트당 0, 1의 두 가지를 표현할 수 있기 때문이다. 데이터를 표현하는 기본 단위는 비트이지만 주소의 기본 단위는 바이트다. 2^32는 바이트를 4 * 2^10 * 2^10 * 2^10만큼 나타낼 수 있다. 2^10은 1KB, 2^20은 1MB, 2^30은 1GB다. 즉 4 * 2^30은 약 4GB 바이트가 된다. 32비트 환경에서 4GB의 메모리가 최대인 이유다.
cpu가 사용하는 메모리 주소는 논리 주소다. 논리 주소를 페이지 테이블을 거치면 물리 주소가 변환된다. 논리 주소는 페이지 번호와 페이지 변위로 이루어진다. 이 논리 주소가 물리 주소로 변환되는 과정은 생각보다 간단한다. 프로세스(프로그램) 하나 당 하나의 페이지 테이블이 만들어지며 각 페이지마다 실제 주소를 가지고 있다. 즉, 페이지 주소에 변위만큼 더하면 된다.
내부 단편화는 해결할 수 없다. 프레임은 프로세스에 프레임의 정수 배로 할당되기 때문이다. 예를 들어 페이지 크기가 2,048 바이트고 프로세스가 72,266 바이트를 요구한다면 35개의 페이지 프레임을 할당하고 1,086 바이트가 남는다. 36번째로 할당되는 프레임은 2,048 - 1,086 = 962 바이트의 내부 단편화가 발생한다. 평균적으로 프로세스 당 반 페이지 정도의 내부 단편화가 예상된다. 이런 측면에서는 작은 페이지 크기가 바람직하다는 것을 알 수 있다. 페이지의 크기가 작아지면 그에 반비례하여 페이지 테이블의 크기가 커지게 되고 테이블이 차지하는 공간은 낭비된다. 디스크의 입장에서는 페이지의 크기가 클수록 효율적이다.
페이지의 중요한 특징은 사용자가 바라보는 메모리와 실제 내용이 다르다는 것이다. 프로그램은 메모리를 연속적인 공간인 것처럼 사용하지만 실제로는 메모리의 여러 곳에 프레임 단위로 분산되어 있다. 프로세스는 페이지 테이블을 통하지 않고서는 다른 공간을 접근할 수 없다. 운영체제는 메모리의 어느 프레임이 할당되어 있는지, 어느 프레임이 가용한지 등의 대한 정보를 알아야 한다. 이런 정보는 프레임 테이블이라는 자료 구조에 존재한다. 프레임 테이블은 각 프레임 당 하나씩 가지고 있으며 놀고 있는지, 할당되어 있는지, 할당되었다면 어느 프로세스의 페이지에 할당되어 있는지를 나타낸다.
관련 문제(출처)
페이지의 크기가 4kb이고 메모리의 크기가 256kb인 시스템이 있을 때
- 페이지 프레임 수
256 / 4 = 64개
-> 2^18 / 2^12 = 2^6 -> 64개의 페이지 수를 표현하는데 6비트가 필요하다
- 메모리 주소를 표현하는데 필요한 비트 수
256kb -> 2^18이므로 18비트
- 페이지 번호에 사용하는 사용하는 비트와 페이지 오프셋에 사용하는 비트 수
64개의 페이지를 표현하기 위해서는 6비트가 필요하다. 2^6 = 64.
페이지의 크기가 4KB다. 이는 2^12이다.
오프셋에 사용되는 비트 수는 한 페이지의 모든 위치를 나타내야 하므로 12비트가 필요하다.
16bit의 논리 주소를 이용해 4kb 크기의 페이지를 갖는 시스템 메모리가 있다고 가정하고 논리 주소가 8196일 때를 살펴보자
페이지의 변위를 표현하기 위해서는 12비트가 필요하다. 4kb는 2^12이기 때문이다. cpu는 16bit의 논리 주소를 가진다고 했기 때문에 16비트 중 변위를 표현하는 12비트를 뺀 4비트로 페이지 번호를 표현할 수 있다. 그림1에서 볼 수 있듯이 페이지 번호가 상위 비트, 변위를 하위 비트에 나타낸다. 즉 페이지는 2^4개가 된다.
다음과 같은 페이지 테이블이 있다고 해보자. 페이지 테이블은 프로세스(프로그램) 당 하나가 존재한다.
8196이라는 논리 주소는 0010 0000 0000 0100이다. 상위 4비트가 페이지 번호가 되므로 0010->2번 페이지의 주소인 110을 가져오면 된다. 그러면 최종적으로 110 0000 0000 0100이 물리 주소가 된다. 페이지 테이블을 보면 페이지 번호 표현에 3비트를 사용하고 있다. 논리 주소는 총 15개 비트로 표현되고 있으므로 2^15->32kb가 메모리의 크기다.
32bit 시스템에서 페이지 크기가 4kb일 때, 4gb 메모리에 접근하기 위헤 필요한 페이지 테이블의 크기는?(페이지 엔트리의 크기는 4byte)
먼저 페이지의 수를 구해보자. 4gb는 2^32이며 4kb는 2^12이므로 페이지의 수는 2^20이다. 페이지의 수를 표현하는데 20비트가 필요하다. 페이지 테이블 엔트리(PTE)는 페이지 테이블의 레코드를 의미한다. 레코드 하나가 페이지 하나를 가리키므로 PTE의 크기가 2^2이고 페이지의 수가 2^20이라면 페이지 테이블의 크기는 2^20 * 2^2 바이트 = 2^22 바이트다. 4mb가 나온다.
'컴퓨터 과학 > 운영체제' 카테고리의 다른 글
컨텍스트 스위칭 (0) 2022.01.09 스케줄링 알고리즘 (0) 2021.08.18 동시성(concurrentcy) vs 병렬성(parallelism) (0) 2021.08.11 페이징 정리 - 2 (0) 2021.08.08