세그먼테이션은 메모리를 프로세스 관점으로 지원하는 메모리 관리 방법이다.
페이징과는 달리 세그먼테이션은 물리적인 크기의 단위가 아닌 논리적 내용의 단위로 분할하기때문에 각 크기가 일반적으로 같지 않다.
세그먼테이션은 프로세스를 자르는 방법을 제외하고 메모리에 할당하는 방법에 있어서 페이징과 유사하다.
세그먼테이션은 프로세스에 따라 세그먼트 크기가 다르기 때문에 메모리를 크기가 일정한 페이지 프레임으로 나누지 않고 가변 분할 방법으로 할당한다. 이 때문에 외부 단편화가 일어난다.
외부 단편화를 해결하기 위해 세그먼테이션은 충분한 공간이 생길때까지 기다리거나 압축을 해 큰 공간을 만든다. 세그먼테이션은 동적 대치 알고리즘이기 떄문에 원할 때마다 메모리를 압축할 수 있다. 외부 단편화의 정도는 세그먼트의 크기에 따라 결정된다. 세그먼트의 크기가 클 수록 단편화가 심해지고, 작을 수록 완화된다.
페이징 | 세그먼테이션 | |
프로그래머의 기술 인식 | 아니오 | 예 |
선형 주소 공간 | 1 | 많음 |
물리적 주소를 초과하는 총 주소 공간 | 예 | 예 |
프로시저와 데이터 분리, 보호 여부 | 아니오 | 예 |
수용할 수 있는 테이블 크기가 심하게 변화 | 아니오 | 예 |
사용자 공유가 용이 | 아니오 | 예 |
페이지화된 세그먼테이션
페이징은 내부 단편화가 발생할 수 있지만, 메모리를 효율적으로 사용할 수 있다.
반면에 세그먼테이션은 외부 단편화가 발생할 수 있지만, 가변적인 데이터 구조와 모듈 처리, 공유와 보호의 지원이 편리하다.
이러한 장단점을 취합한 방법이 페이지화된 세그먼테이션이다.
프로세스를 일단 세그먼트 단위로 분할한다. 이는 보호와 공유를 하는 측면에 이점을 가진다. 하지만 외부 단편화가 발생할 수 있기 때문에 분할한 세그먼트를 다시 고정된 간격인 페이지 단위로 자르는 페이징을 한다. 그래서 메모리에 적재하면 페이징의 일정 단위로 다시 분할되었기 때문에 외부 단편화가 발생하지 않는다. 하지만 이 경우에는 두 가지 테이블을 거쳐야 하므로 속도가 비교적 느리다.
프로세서는 논리적 주소의 세그먼트 번호와 STBR(세그먼트 테이블 기준 레지스터)을 이용해 세그먼트 테이블을 확인한다. 그리고 해당 세그먼트 페이지 테이블에서 페이지 번호를 찾아 이에 대응하는 페이지 프레임을 찾는다. 그런 다음 페이지 프레임을 오프셋과 결합하여 메모리 주소를 생성한다.
각 프로세스에는 세그먼트 테이블이 하나 있고, 세그먼트에는 자신의 페이지 테이블이 있다. 그러므로 특정 프로세스가 실행중일 때 레지스터 하나는 프로세스 세크먼트 테이블의 시작 주소를 갖는다. 특히 각 세그먼트의 마지막 페이지는 완전히 차지 않아서 내부 단편화를 가져올 수 있다.
페이지화된 세그멘테이션은 세그먼트와 페이지를 함께 사용해 복잡하지만, 세그먼트를 페이징하여 외부 단편화 문제를 제거하면서 할당 과정을 쉽게 해결한다는 장점이 있다.
'운영체제' 카테고리의 다른 글
[운영체제 공부] 입출력 모듈 (0) | 2020.03.02 |
---|---|
[운영체제 공부] 가상 메모리 (0) | 2020.02.27 |
[운영체제 공부] 페이징 (0) | 2020.02.24 |
[운영체제 공부] 메모리 관리 - 연속 메모리 할당 (0) | 2020.02.24 |
[운영체제 공부] 메모리 관리 - 메모리의 구조와 매핑 (0) | 2020.02.20 |