메모리를 관리하는 기법에는 대표적으로 1) 세그멘테이션, 2) 페이징이 있다. 그리고 이 둘을 혼합한 Segmented Paging이나 Paged Segmentation이라는 개념도 있다. 이 중, Linux를 포함한 현대 시스템에서는 주로 페이징이 쓰인다고 한다.
세그멘테이션(Segmentation)
세그먼테이션은 논리적 메모리 영역을 기반으로 프로세스의 데이터를 나누고, 이러한 세그먼트들을 물리적 메모리에 저장하는 방식이다.
세그멘테이션을 수행하는 주요 단계는 다음과 같다:
논리적 구조 기반 분할: 세그멘테이션은 프로그램의 논리적 구조(예: 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트 등)를 반영하여 메모리를 나눈다. 각 세그먼트는 프로그램의 특정 논리적 단위(함수, 데이터 구조 등)를 포함한다.
연속적 물리적 메모리 할당: 세그멘테이션에서는 각 세그먼트가 물리적 메모리 상에 연속적으로 할당된다. 예를 들어, 하나의 세그먼트가 메모리의 연속적인 블록을 차지한다.
세그먼테이션은 다음과 같은 특징을 지닌다:
세그먼트 크기의 다양성: 세그먼트의 크기는 해당 세그먼트에 저장되는 데이터의 양에 따라 다를 수 있으며, 고정된 크기가 아니다. 이는 페이징에서 모든 페이지가 같은 크기를 가지는 것과 대조된다.
주소 변환: 세그멘테이션에서는 세그먼트 번호와 세그먼트 내 오프셋을 사용하여 메모리 주소를 나타낸다. 이는 세그먼트 테이블을 통해 물리적 주소로 변환된다.
세그먼테이션 방식의 장단점
장점:
논리적 구조 반영: 세그멘테이션은 프로그램의 논리적 구조(함수, 배열 등)에 따라 메모리를 나눈다. 이는 프로그램의 구조와 메모리 구조 간의 일치성을 높여준다.
보호 및 공유 용이: 각 세그먼트는 독립적인 보호와 공유 규칙을 가질 수 있어, 메모리 접근 제어가 용이하다.
단점:
외부 단편화: 세그멘테이션에서는 다양한 크기의 세그먼트가 메모리에 할당되고 해제됨에 따라, 메모리에 빈 공간이 생길 수 있고 이를 효율적으로 사용하기 어려울 수 있다.
관리 복잡성: 마찬가지의 이유로 세그먼트 관리, 메모리 할당과 회수 절차가 더 복잡해질 수 있다.
세그멘테이션은 프로그램의 논리적 구조를 메모리 관리에 반영한다는 점에서 효과적이지만, 외부 단편화와 관리의 복잡성 때문에 현대의 많은 운영 체제들은 주로 페이징 방식을 사용한다. 페이징은 메모리를 고정 크기의 블록으로 나누어 관리하여 외부 단편화 문제를 줄이고 메모리 관리를 단순화하는 장점이 있다.
페이징(Paging)
페이징(Paging) 기법에서는 데이터를 일정한 크기의 페이지(4kb ~ 2mb)로 나누고, 이 페이지들을 물리 메모리에 매핑한 후, 가상 주소 공간에서 프로그램이 보기에는 연속적으로 보이는 방식으로 처리한다.
페이징을 수행하는 주요 단계는 다음과 같다:
프로세스의 가상 주소 공간: 프로그램이 실행될 때, 운영 체제는 프로세스에 대한 가상 주소 공간을 생성한다. 이 공간은 논리적으로 연속적이며, 코드, 데이터, 힙, 스택 등의 세그먼트로 구분된다.
페이지 분할: 프로그램의 각 부분(코드, 데이터 등)은 다시 고정된 크기의 페이지로 나누어진다. 각 페이지는 독립된 메모리 블록으로 취급된다. 운영 체제는 이 페이지들을 가상 주소 공간(VAS) 내에 할당하며, 각 페이지는 고유한 가상 주소 범위를 갖는다.
물리 메모리에의 매핑: 이 페이지들은 가상 주소 공간에서 물리적 메모리의 주소로 매핑된다. 매핑은 페이지 테이블에 의해 수행되며, 페이지 테이블은 OS가 관리한다. 보다 정확히 말하자면 OS가 메모리를 할당하고, 매핑 정보를 페이지 테이블을 기록한다. 후에 페이지 테이블은 가상 주소를 물리 주소로 변환하는 데 사용된다.
이러한 매핑 방식은 메모리 관리에 유연성을 제공하며, 메모리의 효율적인 사용을 가능하게 한다. 예를 들어, 필요에 따라 페이지들을 물리적 메모리와 스왑 공간 사이에서 이동시킬 수 있다.
페이징은 다음과 같은 특징을 지닌다:
연속성 in 가상 주소 공간: 가상 주소 공간 내에서 프로세스는 각 세그먼트가 연속적으로 배치된 것처럼 인식한다. 예를 들어, 코드 세그먼트 다음에 데이터 세그먼트가 이어진다. 이는 물리적 메모리 상의 실제 페이지 위치와는 독립적이다.
불연속성 in 물리적 메모리: 물리적 메모리 내에서, 이 페이지들은 연속적이지 않을 수 있다. 즉, 가상 주소 공간에서 연속적인 페이지들이 물리적 메모리 상에서는 서로 다른 위치에 할당될 수 있다.
메모리 관리 유닛(MMU): CPU는 메모리 접근 시 MMU를 사용하여 가상 주소를 물리 주소로 변환한다. MMU는 페이지 테이블을 참조하여 이 변환을 수행한다.
페이징 방식의 장단점
장점:
외부 단편화 해결: 페이지는 고정된 크기를 가지므로, 외부 단편화 문제를 상당 부분 해결하다.
메모리 관리 단순화: 고정된 크기의 페이지로 인해 메모리 관리가 더 단순하고 예측 가능해진다.
단점:
내부 단편화: 페이지 크기보다 작은 메모리 요청이 있을 경우, 페이지의 나머지 부분이 낭비될 수 있다.
페이지 테이블 메모리 요구: 각 페이지의 매핑 정보를 저장하는 페이지 테이블이 필요하며, 이는 추가적인 메모리 공간을 요구한다.