Segmentation은 Paging과 달리 프로세스가 할당 받은 메모리 공간을 논리적 의미 단위인 Segment로 나눠서 연속되지 않은 물리 메모리 공간에 할당될 수 있도록 하는 메모리 관리 기법이다.
Paging 기법은 사전에 미리 메모리를 나누어 두는 기법이라고 한다면 Segementation은 프로세스가 할당 받은 메모리 공간 만큼 메모리를 나누어 주는 기법이라고 보면 된다.
즉, 프로세스가 필요로 하는 메모리 작업 공간 만큼의 크기를 제공한다. 맞춤형 이라고 보면 된다.
Segmentation은 코드, 데이터, 힙, 스택
등의 기능 단위로 segment(단위)를 정의하는 경우가 많으며 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 segment table을 갖게 된다.
# | base | limit |
---|---|---|
0 | 4000 | 200 |
1 | 1000 | 300 |
이렇게 테이블이 있을 때 base
가 물리적 메모리의 주소를 말하고 limit
는 메모리의 크기를 말 한다고 보면 된다.
Paging 기법에서 내부 단편화의 문제가 있듯이 Segmentation도 단편화 문제가 있다.
Segmentation은 쉽게 말해서 맞춤형 메모리를 제공한다고 했다. 하지만 이 맞춤형 메모리가 독이 되는 경우인데 자세한 과정은 아래와 같다.
1. 메모리의 총 공간은 10이라고 가정한다.
2. 프로세스 A와 B가 각각 메모리 5씩 차지해서 메모리 공간을 풀 사용중이다.
3. 프로세스 A가 작업을 마치고 나가서 5의 메모리 공간이 남게 되었다.
4. 이번에는 프로세스 C가 들어와서 메모리 공간 4를 사용하기 시작했다.
5. 지금 상황을 보면 프로세스 B가 메모리 5만큼 사용 중이고 프로세스 C가 4만큼 사용중이기 때문에 남은 메모리 공간은 1이 된다.
6. 이때 갑자기 프로세스 D가 2만큼의 메모리 공간 사용을 원한다 하지만 남은 공간은 1이다.
7. 남는 메모리 공간이 있음에도 들어오려는 프로세스의 크기가 커서 사용되지 못 하는 낭비가 발생하게 된다.
8. 이런 낭비를 외부 단편화라고 한다.
Paging은 크기 단위로 나누고 Segmentation은 기능 단위로 물리 메모리에 할당한다. 또, Paging은 내부 단편화가 발생할 수 있고, Segmentation은 외부 단편화 문제가 발생할 수 있다.
Segmentation을 기본으로 하면서 Page 크기로 다시 나눠 물리 메모리에 할당하는 메모리 관리 기법이다. 프로그램을 의미 단위의 Segment로 나누고 개별 Segment의 크기를 Page의 배수가 되도록 하는 방법으로 외부 단편화를 해결하고 Segment 단위로 프로세스간 공유와 접근 권한 보호가 이뤄지면서 Paging의 단점을 해결한 방법이다.