프로세스
간단하게 말하자면, 프로세스는 실행 중인 프로그램을 의미한다.
프로그램 자체는 단지 명령어가 저장된 파일에 불과한 수동적인 존재이지만, 이것이 메모리에 적재되어 실행될 때 프로그램 카운터와 메모리, 레지스터 같은 자원을 가진 능동적인 존재, 프로세스가 된다.
프로세스의 현재 활동의 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타낸다.
프로세스의 메모리 구조
프로세스는 메모리에서 다음과 같은 네 가지 주요 섹션으로 나뉜다.
- 텍스트(Text): 실행할 프로그램 코드가 저장되는 곳으로, 실행 중 크기가 변하지 않는다.
- 데이터(Data): 전역 변수와 같은 데이터가 저장되는 곳으로, 초기화된 데이터와 초기화되지 않은 데이터로 나뉠 수 있다.
- 힙(Heap): 프로세스 실행 중 동적으로 할당되는 메모리가 저장되는 공간으로, 크기가 실행 중에 동적으로 변경된다.
- 스택(Stack): 함수 호출 시 임시 데이터(함수 매개변수, 복귀 주소, 지역 변수 등)를 저장하는 공간으로, 함수 호출 및 복귀에 따라 크기가 변한다.
스택과 힙 영역이 충돌하지 않도록 운영체제가 관리해야 한다.
프로세스의 상태 변화
프로세스는 실행되면서 상태가 변한다. 상태의 이름은 운영체제마다 다를 수 있다.
- New: 프로세스가 생성되고 있는 상태.
- Running: 실제 CPU에서 명령어가 수행되는 상태.
- Waiting: 입출력 또는 특정 이벤트가 발생할 때까지 기다리는 상태.
- Ready: 실행될 준비가 되었지만 CPU가 할당되지 않은 상태.
- Terminated: 프로세스의 실행이 종료된 상태.
운영체제는 이러한 상태를 관리하면서 프로세스가 원활히 수행되도록 한다.
프로세스 제어 블록(PCB)
프로세스의 모든 정보는 운영체제 내부에서 PCB(Process Control Block) 에 저장된다. PCB는 프로세스의 신분증과 같은 역할을 하며 다음 정보를 포함한다.
- 프로세스 상태: 현재 상태(New, Running, Waiting, Ready, Terminated 등)
- 프로그램 카운터(PC): 다음 실행할 명령어의 주소
- 레지스터 정보: CPU 레지스터 상태
- 메모리 관리 정보: 메모리 할당 정보(페이지 테이블 등)
- CPU 스케줄링 정보: 프로세스의 우선순위 및 스케줄링 정보
- 입출력 상태 정보: 열린 파일 목록 등 프로세스가 사용하는 입출력 자원 정보