ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 메모리 불연속할당 - (2) 세그먼테이션
    OS 2021. 12. 1. 18:37

     

    [OS] 메모리 불연속할당 - (2) 세그먼테이션


    안녕하세요? 장장스입니다.

    실제 물리적 메모리는 크게 연속할당 방식 불연속할당 방식으로 나뉩니다.

    오늘은 메모리 불연속할당 방식중 하나인 세그먼테이션에 대해 정리해보겠습니다.

     

     

     

    세그먼테이션


    세그먼테이션은 프로세스의 주소공간을 의미 단위의 세그먼트(segment)로 나누어 물리적 메모리에 올리는 방법이다. 

    프로세스의 주소 공간은 일반적으로 코드, 데이터, 스택 등의 의미 있는 단위들로 구성이 된다. 세그먼트는 이와 같은 주소 공간 전체를 크게는 하나의 세그먼트로 보기도 한다. 일반적으로 코드, 데이터, 스택 등의 기능 단위로 세그먼트를 정의하며, 프로그램을 구성하는 함수 하나하나를 각각 세그먼트라고 정의할 수도 있다. 주의할 점은 논리적 단위로 나눈 것이기 때문에 세그먼트의 크기가 균일하지 않다는 점이다. 

     

     

    세그먼트 테이블


    세그먼테이션 기법에서는 주소 변환을 위해 세그먼트 테이블을 사용한다. 세그먼트 테이블의 각 항목은 기준점(base)과 한계점(limit)을 가지고 있다.

    • 기준점(base) : 물리적 메모리에서 세그먼트의 시작 위치
    • 한계점(limit) : 세그먼트의 길이

     

    세그먼테이션 기법에서는 세그먼트 길이가 균일하지 않으므로 세그먼트의 시작 위치 정보뿐 아니라 길이 정보도 함께 보관하고 있는 것이다.

     

    페이징 기법에서는 주소 변환을 위해 기준 레지스터(PTBR)와 테이블 길이 레지스터(PTLR)를 사용했듯이 세그먼테이션 기법에서도 세그먼트 테이블 기준 레지스터(STBR)세그먼트 테이블 길이 레지스터(STLR)를 사용하게 된다.

    • 세그먼트 테이블 기준 레지스터(STBR) : 프로세스의 세그먼트 테이블 메모리 위치(시작 주소)
    • 세그먼트 테이블 길이 레지스터(STLR) : 프로세스 세그먼트의 총 개수

     

    세그먼트 테이블 주소 변환


     

    세그먼테이션 기법에서는 논리적 주소를 물리적 주소로 변환하기 전에 두 가지 항목을 체크합니다.

     

    1. 요청된 세그먼트의 번호가 STLR 미만의 값인지 확인합니다. 만약 그렇지 않다면 존재하지 않는 세그먼트에 대한 접근으로 예외상황을 발생시켜 메모리에 접근 봉쇄합니다.

    2. 논리적 주소의 오프셋 값이 그 세그먼트의 길이보다 작은 값인지 확인합니다. 만약 그렇지 않다면 세그먼트 테이블의 길이를 넘어서는 오프셋 위치에 대한 접근으로 예외상황을 발생시켜 메모리에 접근 봉쇄합니다.

     

     

     

    장단점


    세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 페이징 기법에 비해 효과적이다. 주소 공간의 일부를 공유하거나 특정 주소 공간에 접근 제어를 할경우 크기가 아니라 의미 단위로 공유되기 떄문이다.

     

    세그먼테이션은 프로세스를 의미 단위로 나누어 메모리에 적재하기 때문에 세그먼트의 길이가 균일하지 않다. 따라서 물리적 메모리 관리에서 외부조각이 발생하게 되며, 세그먼트를 어느 가용 공간에 할당할 것이지 결정하는 문제가 발생한다.

     

     

     

     

     

    Post


    References


    • KOCW 운영체제 강의 - 반효경 교수

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    댓글