임베디드 스터디 - 세그멘테이션과 메모리 할당 기법
임베디드 스터디 - 세그멘테이션과 메모리 할당 기법
세그멘테이션(Segmentation)
- 페이징과의 핵심 차이:
| 페이징 | 세그멘테이션 | |
|---|---|---|
| 분할 크기 | 고정 크기 | 가변 크기 |
| 분할 기준 | 물리적 | 논리적 (코드/스택/힙 등) |
세그먼트 테이블
- 각 세그먼트는 두 가지 정보를 가짐:
- Base — 세그먼트의 물리 메모리 시작 주소
- Limit — 세그먼트의 크기
- 물리 주소 변환:
1
2
3
논리 주소 = <세그먼트 번호, 오프셋>
→ 오프셋 < Limit → 물리 주소 = Base 주소 + 오프셋
→ 오프셋 ≥ Limit → Segmentation Fault 발생 → OS가 프로세스 강제 종료
- Limit 검사가 필요한 이유: 범위를 벗어난 접근 시 오버플로우 영역에 잘못된 데이터를 쓸 수 있음
단편화(Fragmentation) 비교
| 종류 | 발생 위치 | 발생 원인 | 해당 기법 |
|---|---|---|---|
| 내부 단편화 | 할당 공간 안 | 고정 크기 할당 시 남는 공간 | 페이지 |
| 외부 단편화 | 할당 공간 밖 | 할당/해제 반복으로 빈 공간이 흩어짐 | 세그먼트 |
1
2
3
4
페이지 크기: 4KB / 실제 사용: 3KB → 낭비 1KB ← 내부 단편화
[세그A: 10KB] [빈: 2KB] [세그B: 8KB] [빈: 3KB]
→ 빈 공간 합계 5KB지만 5KB 세그먼트 삽입 불가 ← 외부 단편화
C에서 malloc/free 반복 시 heap이 조각나는 현상 = 외부 단편화
메모리 할당 기법
빈 공간에 세그먼트를 할당할 때 어느 공간을 선택하는지에 따라 3가지로 구분:
| 기법 | 선택 기준 | 장점 | 단점 |
|---|---|---|---|
| First-Fit | 첫 번째로 크기가 맞는 공간 | 탐색 빠름 | 앞쪽 메모리 단편화 |
| Best-Fit | 가장 작은 적합 공간 | 낭비 최소 | 탐색 느림, 작은 조각 양산 |
| Worst-Fit | 가장 큰 공간 | 남은 공간이 커서 재사용 용이 | 큰 공간 소진 빠름 |
예시
1
2
3
4
5
6
빈 공간: [2KB] [10KB] [5KB] [8KB]
넣을 세그먼트: 4KB
First-fit → 10KB 공간에 삽입
Best-fit → 5KB 공간에 삽입
Worst-fit → 10KB 공간에 삽입
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.