28_메모리 페이징 (Paging)
페이징은 논리적 주소 공간이 한 연속적인 공간에 다 모여 있어야 한다는 제약이 없다. 따라서 페이징을 사용하면 메인 메모리에 올라와 있던 부분을 디스크로 내보낼 때 디스크상에 이들을 연속적으로 수용할 수 있는 자유 공간을 탐색하는 오버헤드가 발생하지 않는다. (대부분의 오버헤드는 메모리에 있던 코드의 일부가 스왑 아웃되고 이들을 저장하기 위한 공간을 디스크(backing store)에서 찾는 과정에서 발생한다.)
- 메모리 스와핑 : http://sqlmvp.kr/140191090013
물리 메모리는 프레임(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)을 해서 매개변수로 어떤 주소를 매핑 된 실제 주소를 찾아가야 한다. 이를 위해 운영체제는 각 사용자에 대해 페이지 테이블의 복사본을 유지하여야 한다. 이 복사본은 운영체제가 시스템 호출을 처리하기 위해 사용자 프로그램의 물리 주소를 소프트웨어적으로 알아내어야 할 때 사용되며 페이징의 문맥 교환시간이 증가 한다.
'SW Engineering > OS Concept' 카테고리의 다른 글
30_페이지 테이블 구조 (page table structure) (0) | 2015.07.16 |
---|---|
29_메모리 페이징(2) (Paging) (0) | 2015.07.16 |
27_연속 메모리 할당 (Contiguous Memory Allocation) (0) | 2015.07.16 |
26_메모리 스와핑(Swapping) (0) | 2015.07.16 |
25_메인 메모리(Main Memory) (1) | 2015.07.16 |