포스트

임베디드 스터디 - 세그멘테이션과 메모리 할당 기법

임베디드 스터디 - 세그멘테이션과 메모리 할당 기법

세그멘테이션(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 라이센스를 따릅니다.