물리 메모리, 세그먼트 Segment

infoqoch·2021년 3월 3일
0

운영체제

목록 보기
13/15

1. 세그먼트란? Segment Segmentation

  • 페이지는 고정 분할의 기법을 사용함. 세그먼트는 의미 단위를 기준으로 가변 분할함.
  • 크게는 프로그램 전체를 하나의 세그먼트라 하며, 작게는 code, data, stack 으로 나눔.
  • 세그먼트는 의미 단위로 분리하기 때문에, 페이징 기법에서 사용하기에 까다로운 데이타의 공유 Shared Page와 페이지의 접근 제한(Protected bit)을 활용하기에 적합.
  • 다만, 공간 할당의 문제가 발생. hole이 발생하며, 세그먼트의 할당 전략(first fit, best fit 등)이 필요.
  • 페이징 기법의 페이지 테이블은 1M개의 엔트리로 구성. 하지만 세그먼트의 경우 의미단위로 나누기 때문에 세그먼트 테이블의 엔트리가 매우 적음.
  • MMU의 레지스트리는 각각 세그먼트의 테이블의 물리 주소와 세그먼트의 갯수를 가짐.

2. 세그먼트의 주소 변환

  • cpu는 세그먼트의 번호(s)와 offset(d)을 가짐.
  • cpu는 세그먼트 테이블의 세그먼트 번호를 통해 해당 엔트리의 limit과 base를 구함. limit은 해당 세그먼트의 길이이며 base는 세그먼트의 시작 위치임. base를 기준으로 d를 위치한 값이 물리 메모리임.
  • 만약 세그먼트의 번호가 MMU의 세그먼트의 갯수보다 크면 trap 발생.
  • 만약 세그먼트의 offset이 세그먼트 테이블에서 참조한 limit을 넘어가면 trap 발생.

3. Sagmentation with Paging

  • 세그먼트와 페이징 기법을 혼합.
  • 세그먼트를 가지며, 해당 세그먼트는 페이징 처리 됨. 이를 통해 hole과 allocation 문제를 해소.
  • (위의 그림에 따라 해당 기법을 설명하면) 논리 주소는 세그먼트s와 offset(d)를 가짐. 세그먼트 테이블을 통해 세그먼트 테이블을 구함. d를 통해 해당 세그먼트의 주소를 찾고, 해당되는 페이지를 주소를 구함. 해당 페이지 주소를 통해 page table for segment의 인덱스를 구함. 기존의 d값을 페이지로 나누면 해당 페이지의 offset 엔트리가 구해짐. 이를 통해 물리 주소를 찾음.
profile
JAVA web developer

0개의 댓글