14. 세그멘테이션(Segmentation)

썹스·2022년 8월 23일
0

운영체제

목록 보기
14/20

1. 세그멘테이션(Segmentation)

페이징(Paging)은 물리적으로 프로세스를 일정 크기 잘라서 메모리에 할당하는 방식이었지만, 세그멘테이션(Segmentation)은 논리적 내용을 기반으로 프로세스를 잘라서 메모리에 할당하는 방법이다.

프로세스를 논리적으로 나눈 것을 세그멘트(segment)라 부르며, 각 세그멘트의 크기는 일반적으로 같지 않다.

세그먼트를 메모리에 할당할 때는 페이지와 동일하게 CPU는 각 세그멘트에게 연속적인 주솟값을 할당해 주려고 하지만, 메모리의 효율성을 위해 MMU의 재배치 레지스터(Relocation register)를 통해 주소를 변경하여 메모리에 적재한다.

이렇게 MMU를 통해 주솟값이 변경하여 재배치한 레지스터를 세그멘트 테이블이라 부르며, 세그멘트 테이블은 세그멘트 번호(n), 시작 주소(base), 세그멘트 크기(limit)의 엔트리를 갖는다.

CPU는 MMU에게 논리적 주솟값을 전달하면 MMU를 통해 물리적인 주솟값으로 변경하여 메모리에 적재한다. 만약 논리적 주솟값의 크기가 맞지 않으면 인터럽트를 통하여 프로세스는 강제로 종료된다.

1-1. 보호와 공유

  • 보호(Protection): 해킹 등 방지
    모든 주소는 세그멘트 테이블을 경유하므로, 세그멘트 테이블 엔트리마다 r(read), w(write), x(execute) 비트를 두어 해당 세그멘트에 대한 접근을 제어하는 방법으로 보호한다. (리눅스의 권한 부여 기능과 비슷)

  • 공유(Sharing): 메모리 낭비 방지
    같은 프로그램을 쓰는 복수 개의 프로세스가 있다면, 해당 프로그램의 code+data+stack에서 code 부분은 공유하여 메모리 낭비를 최소화하는 방법이다. 단, 프로그램의 code가 변하지 않는 프로그램 한에서만 가능하다. 변하지 않는 code를 non-self-modifying code = reentrant code(재진입가능 코드) = pure code라 부른다.

세그먼트는 프로세스를 논리적인 단위로 나누기 때문에 보호와 공유에 있어 세그멘테이션이 페이징보다 우월하다.



Reference

경성대학교 양희재 교수님의 운영체제

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글