| 구분 | 섹션(Section) | 페이지(Page) |
|---|---|---|
| 소속 | 실행 파일(ELF) 내부 구조 | 운영체제가 관리하는 메모리 단위 |
| 역할 | 코드/데이터를 논리적으로 구분 (.text, .data, .bss 등) | 실제 메모리에서 접근 권한과 관리 단위 |
| 크기 | 가변 (몇 바이트 ~ 수 KB) | 고정 (보통 4KB) |
| 권한 | 섹션별로 지정 (r-x, rw-, r--) | 페이지 단위로 적용 (모든 바이트 동일 권한) |
실행 파일은 실제로는 세그먼트(LOAD 단위) 로 메모리에 매핑됩니다.
즉, 섹션은 세그먼트 내부에 포함되는 구조예요.
| 세그먼트 | 포함 섹션 | 접근 권한 |
|---|---|---|
| LOAD #1 | .text, .rodata | r-x 또는 r-- |
| LOAD #2 | .data, .bss | rw- |
➡️ 즉, 권한이 같은 섹션들만 같은 세그먼트(=페이지 영역) 에 묶입니다.
권한이 다르면 세그먼트가 분리되고, 페이지도 분리됩니다.
| 상황 | 결과 |
|---|---|
| 섹션 권한이 같음 | 같은 세그먼트에 포함되어, 필요시 한 페이지에 함께 들어갈 수도 있음 (예: .data + .bss) |
| 섹션 권한이 다름 | 절대 같은 페이지에 배치되지 않음 (예: .rodata(r--) vs .data(rw-)) |
| 섹션 크기가 페이지보다 큼 | 여러 페이지에 걸쳐 저장됨 |
| 섹션 크기가 페이지보다 작음 | 남은 공간은 패딩(padding)으로 채워짐 (낭비 발생) |
| 페이지는 4KB 단위 정렬 | OS가 페이지 경계에 맞춰 매핑함 |
페이지 크기 = 4KB
.rodata = 1KB (r--)
.data = 2KB (rw-)
➡️ 메모리 배치 결과:
[Page 1]
| .rodata (1KB) | [padding 3KB] | ← 권한: r--
[Page 2]
| .data (2KB) | [padding 2KB] | ← 권한: rw-
서로 다른 권한 → 반드시 다른 페이지 사용 (남는 공간은 패딩 처리)
만약 권한이 같고 두 섹션의 크기 합이 페이지 크기보다 작거나 같다면 같은 페이지로 들어갈 수 있다.