294. 세그먼트 테이블 (Segment Table)
핵심 인사이트 (3줄 요약)
- 본질: 세그먼트 테이블 (Segment Table)은 세그멘테이션 기법을 사용하는 시스템에서, 논리적인 세그먼트 번호를 물리적인 시작 주소로 변환해 주는 핵심 매핑 자료구조다.
- 가치: 고정 크기인 페이지 테이블과 달리 가변 크기를 지원해야 하므로, 각 항목마다 시작 주소를 나타내는 **Base (기준값)**와 크기를 나타내는 Limit (한계값) 정보를 필수적으로 포함한다.
- 융합: Limit 값을 초과하는 메모리 접근을 하드웨어 수준에서 원천 차단하여, 프로세스 간의 강력한 격리와 보안(Memory Protection)을 달성하는 일등 공신이다.
Ⅰ. 개요 및 필요성
-
개념: 가상 주소의 세그먼트 번호를 인덱스로 사용하여 해당 세그먼트의 물리적 위치와 크기 정보를 담고 있는 표다.
-
필요성: 세그멘테이션 환경에서 CPU가 던지는 주소는
[세그먼트 번호, 오프셋]형태다. 이때 "세그먼트 2번이 램의 정확히 어디서 시작하는가?"를 알려주는 정보가 Base이고, "그 세그먼트가 어디서 끝나는가?"를 알려주는 정보가 Limit이다. 특히 가변 크기인 세그먼트에서는 Limit 정보가 없으면 남의 데이터를 침범하는지 알 수 없으므로 보안을 위해 절대적으로 필요하다. -
💡 비유: 캠핑장에서 손님(프로세스)에게 자리를 내어줄 때, 관리 대장(세그먼트 테이블)에 **"A 텐트 구역은 10번 구역부터 시작하고(Base), 텐트 크기는 5미터(Limit)다"**라고 적어두는 것과 같습니다.
-
등장 배경: 1960년대 초창기 다중 사용자 시스템에서 프로그램의 논리적 영역(코드, 데이터 등)을 보호하기 위해 Base와 Limit 레지스터 쌍을 테이블화하여 관리하기 시작했다.
┌──────────────────────────────────────────────────────────────┐
│ 세그먼트 테이블(Segment Table)의 논리적 구성 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [ 세그먼트 테이블 ] │
│ ┌────────┬────────┬────────┬──────────────────┐ │
│ │ Index │ Base │ Limit │ Protection Bits │ │
│ ├────────┼────────┼────────┼──────────────────┤ │
│ │ 0 │ 0x1000 │ 0x500 │ Read / Execute │ (Code) │
│ │ 1 │ 0x3000 │ 0x200 │ Read / Write │ (Data) │
│ │ 2 │ 0x5000 │ 0x800 │ Read / Write │ (Stack) │
│ └────────┴────────┴────────┴──────────────────┘ │
│ │
│ * Base: 실제 램의 시작 번지 │
│ * Limit: 이 구역의 총 길이 (넘어가면 에러) │
└──────────────────────────────────────────────────────────────┘
- 📢 섹션 요약 비유: 경비원(MMU)이 손님이 가려는 위치(오프셋)가 허가증(Limit)에 적힌 범위를 넘어서면, 즉시 경보를 울리고 손님을 쫓아내는 철저한 보안 장부 시스템입니다.
Ⅱ. 아키텍처 및 핵심 원리
주소 변환과 보안 검사 (Protection)
세그먼트 테이블은 주소 변환 과정 중에 '경찰' 역할을 수행한다.
- 인덱싱: 가상 주소의 세그먼트 번호를 보고 테이블의 해당 줄을 찾는다.
- 한계 검사 (Limit Check): CPU가 요청한 오프셋(d) 값이 테이블에 적힌 Limit 값보다 작은지 확인한다.
- d >= Limit: Segmentation Fault 발생 및 프로세스 강제 종료.
- d < Limit: 통과.
- 물리 주소 생성:
물리 주소 = Base + 오프셋(d)공식을 통해 최종 램 주소를 만든다.
하드웨어 레지스터: STBR과 STLR
-
STBR (Segment Table Base Register): 현재 실행 중인 프로세스의 세그먼트 테이블이 램의 어디에 있는지 가리킨다.
-
STLR (Segment Table Length Register): 현재 프로세스가 가진 세그먼트의 총 개수를 저장하여, 존재하지 않는 세그먼트 번호를 찌르는 행위를 차단한다.
-
📢 섹션 요약 비유: 호텔에서 방 키(논리 주소)를 줄 때, "당신은 101호 복도 끝까지만 갈 수 있습니다"라고 제약(Limit)을 거는 것과 같습니다. 그 복도를 넘어 102호 문을 발로 차는 순간 경보가 울리게 설계된 장부입니다.
Ⅲ. 비교 및 연결
페이지 테이블 vs 세그먼트 테이블 결정적 차이
| 비교 항목 | 페이지 테이블 (Page Table) | 세그먼트 테이블 (Segment Table) |
|---|---|---|
| 크기 정보 | 불필요 (모든 페이지 크기 동일) | 필수 (세그먼트마다 크기 다름) |
| 항목 구성 | 프레임 번호 (PFN) | Base + Limit |
| 단편화 | 내부 단편화만 존재 | 외부 단편화 발생 원인 |
| 사용자 관점 | 보이지 않음 (기계적) | 프로그램 구조와 일치 (논리적) |
TLB와의 융합
세그먼트 테이블 역시 메인 메모리에 저장되므로 주소 변환 시마다 램을 두 번 방문해야 한다. 이를 막기 위해 자주 쓰는 세그먼트의 Base/Limit 정보는 MMU 내부의 TLB에 캐싱하여 주소 변환 속도를 연산 속도와 일치시킨다.
- 📢 섹션 요약 비유: 도서관에서 책을 찾을 때 매번 사서에게 물어보는(장부 읽기) 것이 아니라, 방금 물어본 5권의 위치를 포스트잇(TLB)에 적어 내 손바닥에 붙여두는 지혜입니다.
Ⅳ. 실무 적용 및 기술사 판단
실무 시나리오
-
멀티태스킹 환경의 컨텍스트 스위칭 프로세스 A에서 프로세스 B로 바뀔 때, 운영체제는 CPU 내부의 STBR 레지스터 값만 프로세스 B의 세그먼트 테이블 주소로 살짝 바꿔준다. 이 동작 하나로 메모리 상의 수많은 세그먼트 주소 체계가 즉시 교체된다. 이 과정에서 이전 프로세스의 세그먼트 정보가 담긴 TLB를 비우는 작업이 동반된다.
-
공유 메모리 (Shared Memory) 최적화 두 프로그램이 대용량 통계 데이터를 공유해야 할 때. 두 프로세스의 세그먼트 테이블에서 각각의 다른 항목이 물리 메모리의 동일한 Base 주소를 가리키게 설정한다. 이렇게 하면 실제 데이터는 램에 하나만 있지만, 두 프로그램 모두 자기 데이터인 것처럼 접근할 수 있어 메모리 효율이 극대화된다.
도입 체크리스트
- 기술적: 세그먼트 개수가 너무 많아져 테이블 자체가 소비하는 램 용량이 관리 임계치를 넘지 않는가?
- 보안적: 각 세그먼트 엔트리의 Protection Bits(R/W/X)가 해당 코드/데이터 성격에 맞게 엄격히 설정되었는가?
안티패턴
-
세그먼트 테이블의 선형적 거대화: 프로그램의 모든 객체를 개별 세그먼트로 관리하려는 무모한 시도. 세그먼트 번호가 수만 개가 되면 세그먼트 테이블 자체가 램을 수 MB씩 차지하게 되어, 차라리 페이징 방식을 쓰는 게 나은 주객전도 상황이 벌어진다.
-
📢 섹션 요약 비유: 이삿짐을 쌀 때 작은 물건 하나하나를 다 맞춤형 박스(세그먼트)에 담으면 박스 목록(세그먼트 테이블) 적는 데만 하루가 다 갑니다. 웬만한 건 규격 박스(페이지)에 담고, 피아노 같은 큰 물건만 맞춤형 박스를 쓰는 유연함이 필요합니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 효과 | 비고 |
|---|---|---|
| 보안성 | 하드웨어 레벨 보호 | Limit 검사로 해킹 시도 즉시 차단 |
| 자원 효율 | 코드/데이터 공유 | 중복 라이브러리 제거로 램 절약 |
| 구조화 | 논리적 분리 | 컴파일러가 스택, 힙을 관리하기 최적 |
미래 전망
- 보안 전용 하드웨어: 하드웨어가 주소뿐만 아니라 '객체의 타입'까지 검사하는 태그드 아키텍처(Tagged Architecture)가 세그먼트 테이블의 발전된 형태로 연구되고 있다.
- 64비트 하이브리드: 현대의 64비트 시스템은 세그먼트 테이블을 '보안 영역 구분'용으로만 쓰고, 실제 공간 관리는 페이지 테이블에 맡기는 하이브리드 방식을 더욱 고도화하고 있다.
결론
세그먼트 테이블은 "메모리에 이름과 경계선을 부여한" 인류의 지혜다. 단순히 주소를 바꾸는 도구를 넘어, 프로그램이 자기 영역을 지키고 서로 협력하는 법을 가르치는 시스템의 헌법과도 같다. 비록 외부 단편화라는 숙제를 안고 있지만, 세그먼트 테이블이 제시한 **'경계(Limit)'와 '보호(Protection)'**라는 가치는 현대 모든 안전한 소프트웨어 생태계의 뿌리가 되었다.
- 📢 섹션 요약 비유: 세그먼트 테이블은 캠핑장의 '구역 배정 장부'입니다. 장부에는 "A 구역은 10번 위치에 있고, 크기는 5미터다!"라고 아주 정확하게 적혀 있습니다. 만약 어떤 텐트가 5미터를 넘어서 남의 자리를 침범하려고 하면, 관리인이 장부를 보고 즉시 삑-! 하고 경고를 울리는 안전 시스템입니다.
📌 관련 개념 맵
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 세그멘테이션 | 세그먼트 테이블을 핵심 엔진으로 사용하는 메모리 관리 기법. |
| Base / Limit | 세그먼트 테이블 엔트리를 구성하는 두 가지 기둥 정보. |
| Segmentation Fault | Limit 범위를 어겼을 때 발생하는 하드웨어 예외이자 보안 장치. |
| 페이지 테이블 | 크기 정보(Limit)가 없는 고정 규격 장부로, 세그먼트 테이블의 경쟁자. |
| STBR | 현재 사용 중인 세그먼트 테이블의 위치를 알려주는 나침반 레지스터. |
👶 어린이를 위한 3줄 비유 설명
- 세그먼트 테이블은 놀이공원 지도예요. 지도에는 "롤러코스터는 북쪽 끝에 있고, 크기는 100m!"라고 적혀 있어요.
- 만약 놀이기구가 정해진 구역을 벗어나려고 하면, 안내원(MMU)이 지도를 보고 "안 돼! 여기까지!" 하고 막아준답니다!
- 그래서 친구들끼리 놀이기구를 아무리 많이 타도 서로 부딪히지 않고 안전하게 놀 수 있게 해주는 고마운 지도랍니다!