페이징 Paging - 기본 방법

이찬영·2021년 9월 1일
0

OS

목록 보기
30/35

페이징

메모리를 비 연속적인 공간으로 나누어 프로세스가 요청한 크기의 공간이 있으면 할당하는 방식이다. 비 연속적인 공간이라는것은 프로세스가 메모리에 순차적으로 적재되지 않아도 된다는 말이다.

기본 방법

물리 메모리는 프레임(fram)이라는 크기의 블록으로 나누어지며, 논리 메모리는 페이지(page)라는 크기의 블록으로 나누어진다. 프레임과 페이지의 크기는 동일 해야한다. 프로세스가 할당 요청을 하면 프로세스의 페이지는 적재 가능한 메인 메모리 프레임에 적재된다. 이런 방식의 이점은 논리 주소와 물리 주소가 완전히 분리됨으로써 한정된 물리 주소 내에서 무한한 논리 주소를 만들어낼 수 있다는것이다. 간단하게 생각해보면 0xFFFFFFFF 라는 주소를 물리 주소에 0x00000000에 맵핑할 수 도 있고 물리주소 0xAAAAAAAA에 맵핑할 수도 있다. 이 뜻은 우리가 무한한 논리 주소에 물리 주소를 맵핑할 영역만 있다면 어떠한 논리 주소라도 물리 주소에 맵핑될 수 있다.

CPU에서 나오는 논리 주소는 페이지 번호와 페이지 오프셋으로 이루어진다.
논리 주소

페이지 번호는 페이지 테이블을 접근할 때 사용된다. 페이지 오프셋은 페이지 테이블에서 반환된 물리 주소의 프레임에서 참조할 위치가 된다.

논리 메모리와 물리 메모리의 페이징 모델

변환 방식

  1. MMU에서는 페이지 번호 p를 추출하여 페이지 테이블의 인덱스로 사용
  2. 페이지 테이블에서 해당 프레임 번호를 추출
  3. 논리 주소의 프레임 번호와 페이지 번호를 변경한다.

페이징 하드웨어

논리 주소를 만드는 방법

논리 주소 공간이 2^m이고 페이지 크기가 2^n바이트라면 논리 주소의 상위 m-n비트는 페이지 번호를 가르키고 하위 비트는 오프셋을 가르킨다.
예를 들어 2^10 인 공간이 있을때 2^2공간으로 나누어보자. 1024 / 4 = 256개의 페이지가 생기며 256페이지를 이진수로 표현하려면 2^8인 8bit가 필요하다. 그렇기 때문에 page number는 m-n 비트가 된다.

문제점

페이징 기법을 사용하면 외부 단편화는 발생하지 않지만 내부 단편화가 발생한다. 외부 단편화가 발생하지 않는 이유는 고정된 크기로 나누어 할당할 수 있는 영역이 있다면 해당 영역을 할당해주기 때문이다.
내부 단편화 문제는 다음과 같다. 프로세스가 메모리 요청을 할때 페이지 크기와 일치하지 않는다면 (요청 크기 / page크기) +1 만큼 할당 받을 것이다. 이런식으로 마지막 페이지는 거의 내부 단편화가 발생한다고 생각하면 된다.

이런 문제점을 통해 우리는 페이지의 크기는 작을 수록 좋다는걸 알 수 있다. 하지만 너무 작아지게 되면 관리해야하는 페이지가 많아지고 디스크 입장에서는 페이지의 크기가 클 수록 효율적이다.

특징

페이징의 중요한 점은 프로그래머는 메모리에 대한 내용을 고려하지 않아도 된다는것이다. 프로그래머에게 메모리는 연속된 공간이며, 메모리에는 이 프로그램만 존재한다고 생각한다. 하지만 실제로 프로그램은 여러 분산된 프레임에 할당되어 있으며 메모리에는 서로 다른 여러 프로그램들이 올라와있다.
우리가 이러한 것을 고려하지 않아도 되는 이유는 운영체제가 해당 역할을 대신 해주기 때문이다. 우리는 메모리를 고려하지 않기에 원하는 다른 메모리 영역을 접근조차 할 수 없다.(내 프로세스의 페이지 테이블에서는 다른 프로세스의 페이지를 소유하지 않기 때문이다.)

프레임 테이블

운영체제는 어느 프레임이 할당되어 있고, 어느 프레임이 사용 가능한지, 총 프레임은 몇개나 되는지 등 여러 정보를 알고 있어야 한다. 이러한 정보는 운영체제에서 단 하나의 자료구조로 관리 되며 프레임 테이블이라고 한다. 프레임 테이블은 각 프레임당 하나의 항목을 가지고 있으며, 프레임이 비었는지 할당되었는지, 누가 할당했는지에 대한 정보를 가지고 있다.
프레임 테이블

페이지 테이블

운영체제는 모든 프로세스의 주소들을 물리 주소로 사상할 수 있어야 한다. 그렇기에 운영체제는 프로세스의 페이지 테이블 사본을 유지한다. 이 사본을 이용하여 운영체제는 논리주소를 물리주소로 변화한다. 프로세스가 CPU에 할당될 때 CPU 디스패처가 페이지 테이블을 통해 하드웨어 디스패처 테이블을 설정해야하므로 문맥 교환 시간이 늘어난다.

0개의 댓글