3) 세그멘테이션(Segmentation)
* 프로세스를 논리적 내용(=세그멘트)으로 잘라서 메모리에 배치
: 프로세스는 세그멘트(segment)의 집합
* 동일한 크기를 갖는 페이징과는 달리 메모리를 프로그램을 구성하는 메인루틴, 서브루틴(Sub-Routine), 프로시저(Procedure), 함수(Function) 또는 모듈(Module), 전역 변수, 스택(Stack) 등의 각각 다른 크기를 갖는 세그먼트로 나눔.
: 각 세그먼트는 연관된 기능을 수행하는 하나의 모듈 프로그램임으로 논리적 구조화가 쉬움.
: 각 세그먼트가 페이징처럼 메모리에서 서로 인접할 필요는 없음.
* 논리 주소 vs 물리 주소
* 메모리 보호(Protection)
: 모든 주소는 세그먼트 테이블을 경유하도록 한다.
: 세그먼트 테이블 엔트리(각 열)마다 r(읽기), w(쓰기), x(시행) 비트를 둔다.
: 논리적 단위로구분되어 있어서 페이징 보다 훨씬 수월하다.
* 메모리 공유(Memory Sharing)
: 같은 프로그램을 쓰는 여러 종류의 프로세스들은 Code를 공유할 수 있다.
(단, pure code = reentrant code = non-selfmodifying code)
즉, 프로세스의 세그먼트 테이블 코드 영역이 같은 곳을 가리키도록 한다.
: 논리적 단위로구분되어 있어서 페이징 보다 훨씬 수월하다.
* 문제점
: 연속 메모리 할당과 같은 메모리 할당 기법을 고려해야한다.
이로 인해 외부 단편화 문제가 존재한다.
: 따라서 세그멘테이션 보다는 페이징 기법이 더 일반화되어 사용된다.
4) 페이지드 세그멘테이션(Paged Segmentation)
* 프로세스를 나눌 때 세그먼트 단위로 나눈다.
그리고 각 세그먼트를 페이지 단위로 다시 일정하게 나눈다.
* 장점은 보호와 공유가 용이하고 외부 단편화를 없앨 수 있다.
* 단점은 세그먼트 테이블과 페이지 테이블이 필요하게 됨으로 주소 변환과정이 더 복잡해지고 시간이 오래 걸리게 된다.
댓글 없음:
댓글 쓰기