프로세스 주소 공간
프로세스 주소 공간(Process Address Space)은 운영 체제가 각 프로세스에 할당하는 가상 메모리 공간을 의미한다. 이 공간은 프로세스가 실행되는 동안 필요한 코드, 데이터, 스택 등을 저장하기 위한 구조로, 프로세스가 접근할 수 있는 가상의 주소 범위로 구성된다. 프로세스 주소 공간은 일반적으로 다음과 같은 세부 영역으로 나누어진다:
1. 코드 영역 (Text Segment)
- 프로세스가 실행할 프로그램의 기계어 코드를 포함한다.
- 일반적으로 읽기 전용으로 설정되어, 코드가 실행 중에 변경되는 것을 방지한다.
2. 데이터 영역 (Data Segment)
- 전역 변수와 정적 변수 같은 데이터를 저장한다.
- 프로그램의 실행이 시작될 때 생성되고, 프로그램이 종료될 때까지 유지된다.
- 초기화된 데이터는 초기화된 데이터 세그먼트에, 초기화되지 않은 데이터는 BSS(Block Started by Symbol) 세그먼트에 저장된다.
3. 힙 영역 (Heap Segment)
- 동적 메모리 할당을 위해 사용되는 영역이다. 예를 들어, C언어에서
malloc()
함수로 할당한 메모리나 C++에서 new
연산자로 생성한 객체가 이 영역에 저장된다.
- 힙 영역의 메모리는 프로그래머가 직접 관리해야 하며, 사용이 끝난 메모리는 해제해주어야 한다.
4. 스택 영역 (Stack Segment)
- 함수의 매개변수, 반환 주소, 지역 변수 등이 저장되는 영역이다.
- 함수 호출 시 해당 함수의 스택 프레임이 스택에 푸시(push)되며, 함수가 반환될 때 스택 프레임이 팝(pop)된다.
- 스택 영역은 프로그램의 실행 흐름을 관리하는 데 중요한 역할을 한다.
주소 공간의 중요성
- 가상 메모리: 프로세스 주소 공간은 실제 물리 메모리보다 큰 주소 범위를 제공할 수 있다. 운영 체제는 가상 메모리를 물리 메모리와 디스크 공간에 매핑함으로써, 제한된 물리 메모리 리소스를 효율적으로 사용한다.
- 보안 및 격리: 각 프로세스는 독립된 주소 공간을 가지므로, 한 프로세스가 다른 프로세스의 메모리 영역에 임의로 접근하는 것을 방지한다. 이는 시스템의 안정성과 보안을 향상시킨다.
프로세스 주소 공간은 프로그램의 실행을 위해 필요한 다양한 리소스와 데이터를 효율적으로 관리하고, 프로세스 간 격리를 통해 시스템의 안정성을 유지하는 데 중요한 역할을 한다.