메모리 세그먼트
정의
메모리 세그먼트는 컴퓨터 시스템에서 주소 공간을 논리적 단위로 나누어 관리하기 위해 사용되는 메모리 영역을 의미한다. 각 세그먼트는 연속된 주소 범위를 가지며, 일반적으로 프로그램 코드, 데이터, 스택, 힙 등 특정 용도에 따라 구분된다.
주요 특징
-
주소 변환
- 논리 주소(세그먼트 번호와 오프셋) → 물리 주소 변환 과정에서 세그먼트 베이스 주소와 오프셋을 결합한다.
- 세그먼트 레지스터(예: x86 아키텍처의 CS, DS, SS 등)와 세그먼트 디스크립터를 이용해 변환이 수행된다.
-
보호 및 권한 관리
- 각 세그먼트마다 읽기, 쓰기, 실행 등 접근 권한을 설정할 수 있다.
- 운영체제는 세그먼트 테이블을 통해 권한 검사를 수행한다.
-
다중 프로세스 지원
- 프로세스마다 독립된 세그먼트 공간을 할당함으로써 메모리 격리를 제공한다.
대표적인 세그먼트 종류
| 구분 | 설명 |
|---|---|
| 코드 세그먼트 (Code Segment) | 실행 가능한 프로그램 명령어가 저장되는 영역. 보통 읽기 전용으로 설정된다. |
| 데이터 세그먼트 (Data Segment) | 초기화된 전역 변수와 정적 변수가 위치하는 영역. |
| BSS 세그먼트 | 초기값이 0인 전역 변수와 정적 변수가 저장되는 영역(일부 시스템에서는 데이터 세그먼트와 구분). |
| 힙 세그먼트 (Heap) | 동적 메모리 할당(malloc, new 등)으로 사용자가 요구하는 메모리를 제공하는 영역. |
| 스택 세그먼트 (Stack) | 함수 호출 시 사용되는 지역 변수, 반환 주소, 프레임 포인터 등을 저장하는 영역. |
역사적 배경
세그멘테이션은 초기 컴퓨터 아키텍처(예: Intel 8086)에서 물리 메모리 제한을 극복하고, 프로그램의 논리 구조를 반영하기 위해 도입되었다. 이후 32비트 및 64비트 시스템에서도 가상 주소 공간의 관리를 효율화하기 위해 세그멘테이션과 페이지 매핑이 결합된 형태가 일반화되었다.
현대 시스템에서의 활용
- x86 실사용: 현대 x86-64 운영체제는 기본적으로 페이지 기반 가상 메모리를 사용하지만, 여전히 세그멘테이션 구조가 보존되어 특정 보안 기능(예: 수퍼바이저 모드의 세그먼트 레지스트리)이나 호환성을 위해 활용된다.
- 임베디드 시스템: 메모리 자원이 제한된 환경에서 세그멘테이션을 이용해 메모리 구획을 명확히 함으로써 효율적인 자원 관리가 가능하다.
- RTOS 및 마이크로컨트롤러: 일부 실시간 운영체제는 세그멘테이션을 사용해 메모리 보호와 태스크 격리를 구현한다.
관련 용어
- 페이지(Page): 세그멘테이션과 함께 사용되는 메모리 관리 단위로, 고정 크기의 블록이다.
- 가상 메모리(Virtual Memory): 물리 메모리와 독립된 주소 공간을 제공하며, 세그멘테이션과 페이지 매핑을 조합해 구현된다.
- 세그먼트 테이블(Segment Table): 각 세그먼트의 베이스 주소와 한계(limit)를 저장하는 데이터 구조이다.
참고
- 세그멘테이션은 하드웨어와 운영체제 수준에서 지원되는 메모리 관리 기법이며, 프로그래머가 직접 세그먼트를 조작할 필요가 없는 경우가 많다. 현대 고수준 언어와 런타임은 대체로 페이지 기반 메모리 관리에 의존한다.