나의 브을로오그으

#21. 세그멘테이션(Segmentation) 본문

Computer Science/운영체제

#21. 세그멘테이션(Segmentation)

__jhp_+ 2022. 9. 8. 07:56

보호와 공유

- 보호 (Protection): 해킹 등 방지

  * 모든 주소는 페이지 테이블을 경유하므로,

  * 페이지 테이블 엔트리마다 r, w, x 비트 두어

  * 해당 페이지에 대한 접근 제어 가능

 

- 공유 (Sharing): 메모리 낭비 방지

  * 같은 프로그램을 쓰는 복수 개의 프로세스가 있다면,

  * code + data + stack 에서 code 는 공유 가능 (단, non-self-modifying code = reentrant code = pure code인 경우)

  * 프로세스의 페이지 테이블 코드 영역이 같은 곳을 가리키게

  * 페이징보다 우월

 

 

세그멘테이션(Segmentation)

- 프로세스를 논리적 내용 (=세그멘트)으로 잘라서 메모리에 배치

  * 프로세스는 세그멘트(segment)의 집합

  * 세그멘트의 크기는 일반적으로 같지 않다.

- 세그멘트를 메모리에 할당

  * MMU 내의 재배치 레지스터 값을 바꿈으로써

  * CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각

  * MMU는 세그멘트 테이블(segment table)이 된다.

(세그먼트는 크게 code, data, stack의 구조를 가지고 있기 때문에 각 세그먼트의 크기가 다르다.)

(세그멘트 테이블 역시 페이징과 유사하게 동작한다. 그러나 차이가 있다면 세그먼트는 각각 크기가 다르기 때문에 base, limit 주소를 둔다. 만약에 displacement가 너무 커서 segment  table에 매핑된 주소와 displacement의 합이 limit 주소를 넘어선다면 이것은 메모리에 잘못된 접근에 해당하므로 CPU에 interrupt 신호를 보내고 OS내부 interrupt service routine이 동작하여 프로세스를 강제종료 시킨다.)

 

주소 변환 (Address Translation)

- 논리주소 (Logical address)

  * CPU가 내는 주소는 segment 번호 (s) + 변위 (d)

- 주소변환: 논리주소 -> 물리주소 (Physical address)

  * 세그먼트 테이블 내용: base + limit

  * 세그먼트 번호(s)는 세그먼트 테이블 인덱스 값

  * s에 해당되는 테이블 내용으로 시작 위치 및 한계값 파악

  * 한계(limit)를 넘어서면 segment violation 예외 상황 처리

  * 물리주소 = base(s) + d

 

예제

Limit Base
1000 1400
400 6300
400 4300
1100 3200
1000 4700

- 논리주소 (2, 100)는 물리주소 무엇인가? 4400번지

- 논리주소 (1, 500)은 물리주소? violation