프로세스 구조는 운영체제에서 실행 중인 프로그램을 구성하는 기본 요소로, 프로세스가 제대로 동작할 수 있도록 여러 구성 요소로 이루어져 있다.
코드(텍스트) 섹션
- 실행될 프로그램 코드가 저장되는 영역이다.
- 읽기 전용으로 설정되어 있어 다른 프로세스가 임의로 수정할 수 없다.
- 함수, 명령어, 상수 등이 포함된다.
데이터 섹션
- 프로그램에서 사용하는 전역 변수와 정적 변수가 저장되는 영역이다.
- 초기화된 데이터와 초기화되지 않은 데이터로 나뉜다:
- 초기화된 데이터: 프로그램 시작 전에 값이 설정된 전역 변수.
- 초기화되지 않는 데이터(BSS): 선언되었지만 초기화되지 않은 전역 변수.
힙(Heap)
- 동적으로 메모리를 할당받는 영역.
- 런타임 중 프로그램에 의해 메모리가 할당되고 해제된다.
- 크기는 변할 수 있으며, 메모리 누수(memory leak)가 발생하지 않도록 관리가 필요하다.
스택(Stack)
- 함수 호출과 관련된 지역 변수, 반환 구조, 매개변수가 저장되는 영역이다.
- LIFO(Last in, First Out) 구조로 작동하며, 함수가 호출되거나 종료될 때마다 스택 프레임이 추가되거나 제거된다.
- 스택 오버플로우(Stack Overflow)는 스택 크기가 제한을 초과할 때 발생한다.
프로세스 제어 블록(PCB)
- 운영체제가 관리하는 구조체로, 프로세스의 메타데이터를 저장한다.
- 주요 정보:
- 프로세스 상태: 실행, 대기, 준비 등.
- 프로세스 ID(PID): 프로세스를 고유하게 식별하는 번호.
- CPU 레지스터 값: 프로세스 중단 시 현재 상태를 저장.
- 메모리 관리 정보: 페이지 테이블, 세그먼트 정보 등.
- I/O 상태 정보: 열려 있는 파일, 입출력 장치 정보.
파일 및 리소스 정보
- 프로세스가 사용하는 파일, 네트워크 연결, 하드웨어 리소스 등의 정보가 포함된다.
- 이를 통해 프로세스가 필요한 데이터를 읽거나 저장하고, 외부 자원에 접근할 수 있다.
프로세스 상태
- 프로세스는 실행 중, 대기 중, 준비 상태 등 다양한 상태를 가질 수 있다.
- 상태 전환은 프로세스 스케줄러와 운영체제에 의해 제어된다.
프로세스 구조의 특징
- 메모리 공간은 각 프로세스가 독립적으로 소유하며, 다른 프로세스와 직접적으로 간섭하지 못한다.
- 운영체제는 다중 프로세스를 효과적으로 관리하기 위해 컨텍스트 스위칭과 메모리 보호를 제공한다.
이 구조는 운영체제가 프로세스를 관리하고 효율적으로 자원을 배분할 수 있도록 돕는 핵심 개념이다.