728x90
16장: Segmentation
개요
세그먼트 = 임의의 길이의 연속된 주소 공간
여기서는 Code, Heap, Stack을 세그먼트라 침
주소변환 - 세그먼트 테이블
물리 공간에 배치할 때, 세그먼트 단위로 배치함
즉, 세그먼트마다 Base/Bounds 레지스터 필요
→ 일반화 Base/Bounds 기법
하나의 프로세스는 여러 개의 세그먼트로 구성됨
세그먼트 주소 변환
물리주소 = OffSet + Base
OffSet = 세그먼트 내에서의 위치
가상 주소 공간에서 코드,힙,스택 별로 세그먼트가 있는데
그 세그먼트 시작 지점에서의 위치로 Offset을 따짐
Heap 주소 인코딩
4200 번지의 세그먼트에서 인코딩하기
4200 = 4096 + 104
⇒ 01 | 0000 0110 1000
Stack 주소 인코딩 (반대)
스택은 거꾸로 자라기 때문에,
추가 하드웨어가 필요함
세그먼트의 주소 증가 방향을 표시해줘야 함
- 1이면 긍정적 (아래로)
- 0이면 부정적 (위로)
Offset 계산
Offset - 최대 세그먼트 크기
ex) 15K 번지 = 11 1100 0000 0000
- 세그먼트 = 11
- offset = 1100 0000 0000 (3KB)
- 방향 = 0 (스택, 위로)
물리주소 = 28K + (3K - 4K) = 27K
공유 지원
프로세스들이 세그먼트를 공유할 수 있음
보호비트 필요 (접근 권한 표시)
퀴즈
- Segment는 무엇인가 ?
= 11 - Offset은 무엇인가 ?
14KB = 14 * 1KB = 2^4 + 2^10 = 11 1000 0000 0000
2K 임 - Direction은 어떻게 되는가 ?
위로 진행 = Negative - 물리 주소는 어떻게 되는가 ?
28K + 2K - 4K = 26K
세그먼트 문제점
잦은 할당과 회수로 인해 외부 단편화 발생
→ 압축을 통해 해결 가능
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 18장: 메모리 가상화의 Paging (0) | 2024.06.30 |
---|---|
[OS] 17장: Free-Space Management (0) | 2024.06.29 |
[OS] 15장: 주소 변환의 원리 (0) | 2024.06.27 |
[OS] 13장: Memory Virtualization (0) | 2024.06.26 |
[OS] Cuncurrency: 동시성 개요 (0) | 2024.05.06 |