Computer Science
3/25/2025
앞서 살펴본 고정 파티셔닝과 동적 파티셔닝은 각각 내부 파편화와 외부 파편화를 발생시켰습니다. 이 문제들을 해결할 또 다른 방법인 페이징에 대해 알아보겠습니다.
페이징은 메모리 공간을 동일하고 작은 사이즈의 프레임frame으로 나누고, 프로세스를 프레임의 크기에 맞춰 나눠서 할당합니다. 이 때 나눠진 프로세스의 조각을 페이지page라고 합니다. 이러한 방식을 사용하면 외부 파편화가 발생하지 않으며, 내부 파편화는 오직 프로세스의 마지막 페이지가 할당된 프레임에서만 발생합니다. 프로세스가 할당될 때 생기는 내부 파편화는 최악의 상황에서도 프레임의 사이즈보다 작습니다.
위 그림은 페이징의 예시입니다. 메인 메모리는 여러 동일 사이즈 조각들로 나뉘어 있으며, 할당되는 프로세스 역시 나누어 배치됩니다. 운영체제는 프로세스를 할당하기 위해서 비어있는 프레임free frame에 대한 정보를 유지해야할 것입니다.
(e)에서는 프로세스 D를 할당하기 위해 프로세스 B를 스왑 아웃 했습니다. 프로세스 D는 5개의 프레임이 필요하므로 여전히 연속된 공간은 메모리 내에 존재하지 않지만, 페이징 시스템에서는 이를 연속되지 않은 프레임에 나누어 저장할 수도 있습니다. 그러나 이 상황에서는 프로세스 명령어 중 메모리를 참조해야하는 일이 생길 때, Base Register를 기반으로 하는 상대 주소 방식으로 물리 주소를 도출하기 어렵습니다. 따라서 이를 지원할 수 있는 매커니즘이 함께 적용되어야 합니다.
운영체제는 페이징을 지원하기 위해 페이지와 그 페이지가 할당되어있는 프레임 번호가 저장된 테이블을 유지할 필요가 있습니다. 이를 페이지 테이블page table이라고 부르며, 운영체제는 각각의 프로세스마다 하나 씩 테이블을 유지합니다.
페이징으로 이루어진 프로세스에서 메모리 참조는 페이지 번호와 오프셋으로 구성된 논리 주소를 갖습니다. 프로세스에서 논리 주소를 통해 메인 메모리에 접근해야 할 때, 페이지 번호를 통해 얻은 프레임 번호와 오프셋을 조합하여 물리주소를 만들어냅니다.
페이지의 크기를 2의 제곱으로 구성하는 것은 주소 변환을 더욱 쉽게 만들어줍니다. 위 그림은 16-bit 주소체계가 사용되며 페이지의 크기는 1024 (2^10) bytes 입니다. 이 때 논리 주소의 오프셋은 페이지의 어떤 곳이든 참조될 수 있도록 10개의 비트가 사용되며, 자연스레 남은 6개의 비트는 페이지의 번호로써 사용됩니다. 따라서 하나의 프로세스는 총 2^6개의 페이지를 가질 수 있습니다.
위 그림은 하드웨어가 논리 주소를 물리 주소로 번역하는 과정을 보여줍니다. 하드웨어는 논리 주소로부터 좌측 n개의 비트인 페이지 번호를 가져옵니다. 이는 페이지 테이블에서 프레임 번호로 변환되고, 프레임 번호와 오프셋을 연결시켜 물리 주소를 도출해냅니다.
페이징은 메인 메모리를 고정된 크기의 조각들로 나눈다는 점에서 고정 파티셔닝과 비슷해보입니다. 그러나 페이징은 매우 작은 크기의 파티션을 갖는다는 점과, 하나의 프로세스가 여러 파티션을 점유한다는 점에서 고정 파티셔닝과 다릅니다. 페이징은 이러한 원리를 통해 파편화를 줄이고, 연속된 공간에 프로세스가 할당되어야 한다는 제약을 없애 더 많은 프로세스가 메모리에 적재되어 있도록 합니다.
0
Like
0
share