본문 바로가기
  • 책과 글
CS/운영체제

16. Segmentation

by twfnm67 2019. 11. 23.

전체 address space에 대해 base/bound register를 단 한 쌍만 사용하여 논리주소와 물리주소를 mapping하는 것은 굉장히 'WASTEFUL'한 방식이다.

=> 프로세스들을 할당하고 나면 그 사이사이에 낭비되는 빈 공간들(free spaces)이 생기기 때문


16.1 Segentation: Generalized Base/Bounds

 - 위와 같은 문제를 해결하기 위해, segmentation이라는 개념 도입

 -segment마다 base/bound 쌍을 이용함 (ex. code 영역, stack 영역, heap 영역 각각 독립적으로)

출처 : Operating Systems_Three Easy Pieces
출처 : Operating Systems_Three Easy Pieces

 - 위와 같은 방식으로 구현(code, heap, stack을 따로따로 관리)

 

16.2 Which Segment Are We Referring To?

 - 그렇다면 하드웨어로 하여금 어떤 segment인지, 얼만큼의 offset을 가지는지에 대한 정보는 어떻게 알게 할 수 있을까?

 - explicit approach : 다음과 같이 segment와 offset정보를 담은 주소 공간을 만든다.

출처 : Operating Systems_Three Easy Pieces

 - 위 예시 설명 : segment는 총 세 개 있으므로 segment구분 비트는 2비트를 활용(0,1,2,3)

  : 00 은 code 영역 / 01은 heap 영역 / 11은 stack 영역

  : 나머지 12비트는 offset 정보. 위 예시에서는 104 만큼의 offset

 

 - implicit approach

 

16.3 What About The Stack?

 - stack은 특이 사항이 있음 : 다른 영역과 반대 방향으로 할당됨(ex. 힙 영역과 스택 영역은 서로 반대 방향으로 할당됨을 앞서서 공부했음)

 - 그렇다면 이 '방향'에 대한 정보는 어떻게 전달할까?

출처 : Operating Systems_Three Easy Pieces

 

16.4 Support for Sharing

 - 메모리를 더 효율적으로 사용하기 위해서, 메모리 공간을 'share'하는 방법도 있다.

 - 특히, code영역을 share하는 것이 일반적이다.

 - 이 때 중요한 것은, protection bits이다.

 - 코드 영역을 'read-only'로 설정해 놓음으로써, 몇 개의 프로세스가 동시에 코드 영역에 접근할 수 있다.

 - 그러면서도, 각각의 프로세스가 독립적인 코드 영역을 가진 것과 같은 illustion은 그대로 유지할 수 있다.

 - 즉,  다음과 같은 상황 가능

하나의 physical address에 여러 개의 논리 주소 매핑 가능
출처 : Operating Systems_Three Easy Pieces

16.5 Fine-grained vs. Coarse-grained Segmentation

 

16.6 OS Support

 - 요컨대, 기존에는 전체 주소 공간에 하나의 base/bound pair만 존재하는 개념을 공부한 것이고, 이번 단원에서는 각 segment들마다 각각 따로 독립적인 base/bound pair와 주소 공간이 존재하는 개념을 공부한 것임

 - 그러나 이 segmentation 기법에는 여러 issue 가 존재한다.

  : 1. context switching 때 OS는 무엇을 해야 하는가? - OS는 해당 프로세스를 추후에 다시 실행할 때 이런 레지스터 정보를 정확하게 세팅해야 한다.

  : 2. 물리 주소 공간에서의 free space를 어떻게 관리할 것인가? - 특히, 각각의 세그먼트들이 다른 크기를 가질 때

 - 가장 일반적인 problem은, 작은 free space들이 여러 군데 군데 생기는 것이다. 이런 문제점을 external fragmentation이라고 한다.(외부 단편화)

 - 한 가지 해결법은, compact하는 것(아래 그림 참조)

출처 : Operating Systems_Three Easy Pieces

 - 그러나 compaction은 그에 따른 큰 비용이 발생한다.

 - 더 간단한 방법은, free-list management algorithm이다.

 

 

 

-출처-

<OPERATING SYSTEMS three easy pieces>

 

REMZI H. ARPACI-DUSSEAU

ANDREA C. ARPACI-DUSSEAU

UNIVERSITY OF WISCONSIN-MADISON

'CS > 운영체제' 카테고리의 다른 글

17. Free-Space Management(2)  (0) 2019.12.10
17. Free-Space Management(1)  (1) 2019.11.23
15. Mechanism: Address Translation  (0) 2019.11.10
14. Interlude: Memory API  (0) 2019.11.10
13. The Abstraction: Address Spaces  (0) 2019.11.08

댓글