1. 세그멘테이션 Segmentation
1) 세그멘테이션 이란?
세그멘테이션이란 프로세스를 논리적 내용(=세그먼트)으로 잘라서 메모리에 배치하는 방법을 말한다. 즉, 페이징처럼 프로세스를 일정한 크기단위로 자르는 것이 아니라 의미 단위로 자르는 것을 말한다. (프로세스를 나눈 것을 세그먼트라고한다.)
페이징은 외부 단편화를 해결할 수 있지만, 내부 단편화가 발생할 수 있다.
세그멘테이션은 내부 단편화를 해결할 수 있지만, 외부 단편화가 발생할 수 있다.
MMU 내의 재배치 레지스터 값을 바꿔서 CPU가 프로세스가 연속된 메모리 공간에 위치해있다고 착각하게하는 방법은 동일하다.
다른 점은, 페이지 번호 대신 세그먼트 번호와 한계값(limit)를, 페이지 테이블 대신 세그먼트 테이블(Segment table) 을 사용한다.
2. 주소 변환(Address Translation)
1) 논리주소 (Logical address)
CPU가 내는 주소는 segment 번호(s) + 변위(d)
2) 주소변환 : 논리주소 → 물리주소(Physical address)
- 세그멘트 테이블 내용 : base(시작주소) + limit (세그멘테이션의 길이)
그래서 아래 예제처럼 2차원 배열의 형태를 갖게 된다.
- 세그멘트 번호(s)는 세그멘트 테이블 인덱스 값
- s에 해당되는 테이블 내용으로 시작 위치 및 한계값 파악
- 한계(limit)를 넘어서면 segement violation 예외 상황 처리
- 물리주소 = base[s] + d // 즉, 시작주소에 떨어진 거리(d)를 더한다.
3) 예시
3-1) 논리주소 (2,100)은 물리주소로 무엇인가?
3-2) 논리주소 (1, 500)은 물리주소로 무엇인가?
Limit | Base |
1000 | 1400 |
400 | 6300 |
400 | 4300 |
1100 | 3200 |
1000 | 4700 |
3-1) 2번 세그먼트의 base 주소 4300 + d 100 = 4400
3-2) 1번 세그먼트 base 주소 6300 + d 500 = 6800 (d > limit) 이므로 segmentation violation 발생한다.
해당 주소를 요청하면 세그먼트 테이블이 CPU interrupt 신호를 일으켜 프로세스가 중지된다.
3. 세그멘테이션의 장점과 단점
1) 장점 : 보호와 공유
페이징과 마찬가지로 세그멘테이션으로 보호와 공유에 활용할 수 있고 의미 단위로 자르기 때문에 더 나은 방법이지만, 대부분의 운영체제는 페이징을 사용한다. 그 이유는 외부 단편화 문제 때문이다.
2) 단점 : 외부 단편화
세그먼트의 크기는 고정이 아니라 가변적이다. 그러므로 외부 단편화 문제가 발생한다.
크기가 다른 세그먼트를 메모리에 올리려면 동적 메모리 할당이 필요하다.
이대 First-Fit, Best-fit, Worst-fit, Compaction 압축 등 문제가 발생한다.
-> 세그멘테이션으로 내부 단편화 문제를 해결할 수 있지만, 외부 단편화 문제가 발생할 수 있다.
외부 단편화는 memory loss가 크다
3) 해결방법 : 세그멘테이션 + 페이징 Paged segmentation
세그멘테이션은 보호와 공유면에서 효과적이고, 페이징은 외부 단편화 문제를 해결한다.
따라서 이 둘의 장점을 합쳐 세그멘트를 페이징한다.
이를 Paged segmentation 라고 하는데, 프로세스를 세그먼트로 자르고(code, data, stack), 각 세그먼트를 페이로 자르는 방법이다.
논리 주소가 세그먼트 테이블과 페이지 테이블을 거쳐 물리 주소로 바뀌기 때문에 주소 변환하는데 단계가 늘어났으므로 시간적으로 부담이 늘어난다.
'CS > OS' 카테고리의 다른 글
[운영체제] 페이지 교체 Page Replacement (0) | 2024.12.13 |
---|---|
[운영체제] 가상메모리 Virtual Memory (0) | 2024.12.13 |
[운영체제] 페이징을 사용한 보호와 공유 (0) | 2024.12.13 |
[운영체제] 페이징 Paging (0) | 2024.12.13 |
[운영체제] 가상 기억장치 (0) | 2024.12.13 |