Computer Science
[CS] 운영체제가 사용하는 메모리 영역
돼지표
2025. 7. 14. 12:10
운영체제가 사용하는 메모리 영역
운영체제는 사용자 프로그램(프로세스)을 실행할 때, 각 프로세스마다 독립적인 가상 메모리 공간을 제공한다. 이 공간은 목적에 따라 여러 영역으로 나뉘며, 크게 사용자 공간과 커널 공간으로 구분된다.
사용자 공간
일반적인 프로세스는 아래와 같은 구조로 메모리를 사용한다:
Code(Text) Segment
- 실행 가능한 기계어 코드가 저장되는 영역.
- 보통 읽기 전용으로 설정되며, 실행 도중 변경되지 않는다.
- 보안을 위해 실행 권한만 있고 쓰기 권한은 없는 경우가 많다.
- 공유 라이브러리를 사용할 경우, 여러 프로세스가 이 영역을 공유할 수 있다.
Data Segment
- 초기값이 있는 전역 변수나 static 변수가 저장된다.
- 프로그램 실행 시 운영체제가 이 영역을 메모리에 로드하며, 런타임 내내 유지된다.
- 읽기/쓰기가 모두 가능하며, 프로그램 종료 시까지 값이 유지된다.
- 예: int count = 3; 같은 전역 변수
BSS Segment
- 초기값이 없는 전역 변수나 static 변수가 저장된다.
- 실행 시 운영체제가 이 영역을 0으로 초기화한다.
- Data Segment와 마찬가지로 런타임 동안 유지된다.
- 예: static int total; 처럼 초기값이 없는 정적 변수
Heap
- 동적 메모리 할당에 사용되는 영역.
- malloc, calloc, realloc, new 등을 통해 런타임 중에 메모리를 할당한다.
- 사용자가 명시적으로 해제(free, delete)하지 않으면 메모리가 계속 점유된다.
- 위 방향으로 확장되며, 필요한 만큼 커질 수 있다.
- 힙 오버플로우나 메모리 누수 등 문제가 발생하기 쉬운 영역이기도 하다.
Stack
- 함수 호출 시 생성되는 지역 변수, 매개변수, 리턴 주소 등이 저장되는 영역.
- 함수가 호출될 때마다 스택 프레임이 쌓이고, 리턴 시 자동으로 해제된다.
- 아래 방향으로 확장되며, 용량이 제한적이기 때문에 너무 깊은 재귀 호출은 스택 오버플로우를 발생시킬 수 있다.
- 스택은 일반적으로 빠르고 자동 관리되므로, 지역 변수 저장에 적합하다.
커널 공간
운영체제 커널이 사용하는 메모리 영역으로, 사용자 프로세스에서는 직접 접근할 수 없다.
커널 공간에는 다음과 같은 것들이 포함된다:
- 커널 코드 및 데이터
- 시스템 콜 처리 루틴
- 장치 드라이버
- 프로세스 및 스레드 관리 정보
- 페이지 테이블, 파일 시스템, I/O 버퍼 등
현대 운영체제는 사용자 공간과 커널 공간을 분리해, 사용자 프로세스가 시스템 자원에 무단 접근하지 못하도록 보호한다.
메모리 보호 및 관리
- 운영체제는 스택과 힙이 충돌하지 않도록 영역을 관리한다.
- 메모리는 페이지 단위로 관리되며, 페이지 테이블을 통해 접근 권한이 제어된다.
- 각 프로세스는 독립적인 가상 주소 공간을 가지므로, 서로 다른 프로세스의 메모리를 침범할 수 없다.