전체 address space에 대해 base/bound register를 단 한 쌍만 사용하여 논리주소와 물리주소를 mapping하는 것은 굉장히 'WASTEFUL'한 방식이다.
=> 프로세스들을 할당하고 나면 그 사이사이에 낭비되는 빈 공간들(free spaces)이 생기기 때문
16.1 Segentation: Generalized Base/Bounds
- 위와 같은 문제를 해결하기 위해, segmentation이라는 개념 도입
-segment마다 base/bound 쌍을 이용함 (ex. code 영역, stack 영역, heap 영역 각각 독립적으로)
- 위와 같은 방식으로 구현(code, heap, stack을 따로따로 관리)
16.2 Which Segment Are We Referring To?
- 그렇다면 하드웨어로 하여금 어떤 segment인지, 얼만큼의 offset을 가지는지에 대한 정보는 어떻게 알게 할 수 있을까?
- explicit approach : 다음과 같이 segment와 offset정보를 담은 주소 공간을 만든다.
- 위 예시 설명 : 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. 힙 영역과 스택 영역은 서로 반대 방향으로 할당됨을 앞서서 공부했음)
- 그렇다면 이 '방향'에 대한 정보는 어떻게 전달할까?
16.4 Support for Sharing
- 메모리를 더 효율적으로 사용하기 위해서, 메모리 공간을 'share'하는 방법도 있다.
- 특히, code영역을 share하는 것이 일반적이다.
- 이 때 중요한 것은, protection bits이다.
- 코드 영역을 'read-only'로 설정해 놓음으로써, 몇 개의 프로세스가 동시에 코드 영역에 접근할 수 있다.
- 그러면서도, 각각의 프로세스가 독립적인 코드 영역을 가진 것과 같은 illustion은 그대로 유지할 수 있다.
- 즉, 다음과 같은 상황 가능
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하는 것(아래 그림 참조)
- 그러나 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 |
댓글