2017년 5월 13일 토요일

14. 메모리 관리3


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)
 * 프로세스를 나눌 때 세그먼트 단위로 나눈다.
   그리고 각 세그먼트를 페이지 단위로 다시 일정하게 나눈다.
 * 장점은 보호와 공유가 용이하고 외부 단편화를 없앨 수 있다.
 * 단점은 세그먼트 테이블과 페이지 테이블이 필요하게 됨으로 주소 변환과정이 더 복잡해지고 시간이 오래 걸리게 된다.







댓글 없음:

댓글 쓰기