SW Engineering/OS Concept

28_메모리 페이징 (Paging)

SungWookKang 2015. 7. 16. 13:44
반응형

28_메모리 페이징 (Paging)

 

페이징은 논리적 주소 공간이 한 연속적인 공간에 다 모여 있어야 한다는 제약이 없다. 따라서 페이징을 사용하면 메인 메모리에 올라와 있던 부분을 디스크로 내보낼 때 디스크상에 이들을 연속적으로 수용할 수 있는 자유 공간을 탐색하는 오버헤드가 발생하지 않는다. (대부분의 오버헤드는 메모리에 있던 코드의 일부가 스왑 아웃되고 이들을 저장하기 위한 공간을 디스크(backing store)에서 찾는 과정에서 발생한다.)

 

물리 메모리는 프레임(frame)이라 불리는 같은 크기 블록으로 나누어져 있다, 논리 메모리는 페이지(page)라 불리는 같은 크기의 블록으로 나누어 진다.

 

한 프로세스가 실행 될 때 그 프로세스의 페이지는 보조 메모리로부터 메인 메모리 프레임 안으로 들어온다. 보조 메모리는 메모리 프레임과 같은 크기의 블록들로 나누어져 있다.

 

 

CPU에서 나오는 모든 주소는 페이지 번호(p)와 페이지 변위(d:offset) 두 개의 부분으로 나누어 지며 페이지 번호는 페이지 테이블(page table)을 액세스할 때 사용된다.

 

프레임 크기와 같이 페이지 크기도 하드웨어에 의해 정의 된다. 페이지의 크기는 컴퓨터 구조에 따라 페이지당 512byte ~ 16MB 사이이며 2 제곱근으로 증가한다. 논리적 주소 공간의 크기가 2^m이고 페이지가 2^n 크기라면 논리 주소의 상위 m-n비트는 페이지 번호를 나타내고 하위 n 비트는 페이지 전위를 나타낸다. P는 페이지 테이블에 대한 색인이며 d는 페이지 내에서의 변위로 사용 된다.

 

페이징 그 자체는 동적 재배치의 한 형태이다. 모든 논리 주소는 페이징 하드웨어(paging hardware)에 의해 물리 주소로 매핑 된다. 페이징 기법을 사용하면 모든 놀고 있는 프레임이 프로세스에 할당 될 수 있기 때문에 외부 단편화가 발생되지 않는다. 그러나 할당은 항상 프레임의 정수 배로 할당 되기 때문에 내부 단편화 문제가 발상 하게 된다.

 

평균적으로는 프로세스 당 반 페이지 정도의 내부 단편화가 예상된다. 이런 측면에서는 작은 페이지 크기가 바람직하다는 것을 알 수 있다. 그러나 페이지 크기가 작아지면 그에 반비례하여 페이지 테이블의 크기가 커지게 되고 이 테이블이 차지하는 공간은 낭비 된다. 디스크의 입장에서는 페이지가 클수록 효율적이다.

 

일반적으로 페이지 크기는 4byte이며 변경이 가능하다. 32bit 항복은 2^32개의 물리 페이지 프레임을 가리킬 수 있다 프레임 크기가 4KB 이면 4byte 크기의 항목은 2^44byte(16TB)개의 물리 주소를 저장할 수 있다.

 

한 프로세스가 실행되기 위해 도착하면 그 프로세스의 크기가 페이지 몇 개 분에 해당하는가를 조사한다. 각 사용자 페이지는 한 프레임씩을 필요로 한다. 프로세스가 n개의 페이지를 요구하면 메모리에서 이용할 수 있는 프레임이 n개가 있어야 한다. n개의 프레임을 사용할 수 있다면 이 프레임들은 이 프로세스에 할당 한다. 그리고 프로세스의 처음 페이지가 할당된 프레임들 중 하나에 적재되고 그 프레임 번호가 페이지 테이블에 기록된다. 그 다음 페이지는 또 다른 프레임에 적재되고 또 그 프레임 번호가 페이지 테이블에 기록되며 이 과정이 반복 된다.

 

 

페이징의 가장 중요한 특징은 메모리에 대한 사용자 인식과 실제 내용이 서로 다르다는 것이다. 사용자 프로그램은 메모리가 하나의 연속적인 공간이며 메모리에는 이 프로그램만 있다고 생각한다. 실제로는 프로그램은 여로 곳에 프레임 단위로 분산되어 있고 많은 다은 프로그램이 올라와 있다. 사용자 프로그램이 만들어내는 논리 주소는 실제 물리 주소로 변환 된다. 이 매핑은 운영체제에 의해 조정되며 사용자 프로그램은 접근 할 수 없다.

 

운영체제는 메모리를 관리하기 때문에 물리 메모리의 자세한 할당에 대해 파악하고 있어야 한다. 즉 어느 프레임에 할당되고 어느 프레임이 사용가능한지, 총 프레임은 몇 개나 되는지 등을 알아야 한다. 이런 정보는 일반적으로 프레임 테이블(frame table)이라는 자료 구조에 있다.

 

 

 

프레임 테이블은 각 프레임 당 하나의 항목을 가지고 있으며 그것이 놀고 잇는지 할당되어 있는지, 할당 되었다면 어느 프로세스의 어느 페이지에게 할당되었는지를 나타낸다.

 

운영체제는 모든 프로세스들의 주소들을 실제 주소로 매핑 할 수 있어야 한다. 사용자가 시스템 호출(system call)을 해서 매개변수로 어떤 주소를 매핑 된 실제 주소를 찾아가야 한다. 이를 위해 운영체제는 각 사용자에 대해 페이지 테이블의 복사본을 유지하여야 한다. 이 복사본은 운영체제가 시스템 호출을 처리하기 위해 사용자 프로그램의 물리 주소를 소프트웨어적으로 알아내어야 할 때 사용되며 페이징의 문맥 교환시간이 증가 한다.

 

 

 

 

 

 

 

 

반응형