운영체제 - 프로세스
- 1. 프로세스(Process)
- 2. 프로세스의 구성 요소
- 3. 프로세스의 상태
1. 프로세스(Process)
컴퓨터에서 실행되고 있는 프로그램, 프로그램이 실제로 동작하는 상태 라고 볼 수 있다.
2. 프로세스의 구성 요소
2.1 프로세스 메모리(Process Memory)
코드 섹션 (Code Section 또는 Text Section):
프로그램의 실행 코드가 저장되는 영역. 읽기 전용 영역이며, CPU는 해당 위치에 저장된 명령어를 읽어서 실행한다.
데이터 섹션 (Data Section):
정적인 데이터와 전역 변수들이 저장되는 영역. 읽기/쓰기가 이뤄질 수 있으며, 상수나 초기화된 변수들을 포함한다.
스택 (Stack):
함수 호출과 관련된 지역 변수, 반환 주소, 함수 호출 시 사용되는 파라미터 등이 저장되는 영역. 스택은 후입선출(LIFO) 구조를 가지고 있어서 가장 최근에 호출된 함수가 가장 먼저 종료된다. 스택은 주로 임시 데이터를 저장하고 함수 호출을 관리하는 데 사용된다.
힙 (Heap):
동적으로 할당되는 메모리가 저장되는 영역으로, 프로세스 실행 중에 동적으로 할당된 데이터가 저장된다. 힙은 개발자가 메모리를 직접 할당하고 해제할 수 있는 공간이다.
2.2 프로세스 제어 블록(Process Control Block, PCB)
프로세스에 대한 정보를 저장하는 데이터 구조. 각 프로세스마다 하나의 PCB가 할당되며, 프로세스의 상태 및 실행에 필요한 모든 정보를 추적한다. PCB는 프로세스의 상태 변화에 따라 업데이트 되며, 스케줄러 및 다른 운영체제의 서비스가 이 정보를 활용해 프로세스를 관리한다.
PCB에는 아래와 같은 정보들이 포함되어 있다.
프로세스 식별자(Process ID)
각 프로세스는 고유한 식별자를 가지며, 이는 시스템 내에서 프로세스를 식별하는 데 사용된다.
프로세스 상태(Process State)
현재 프로세스의 상태. 이를 기반으로 스케줄러가 프로세스를 관리한다.
프로그램 카운터(Program Counter):
다음에 실행될 명령어의 주소를 가리키는 레지스터 값. 프로세스가 다시 실행될 때 이 위치에서부터 명령어가 실행된다.
레지스터 상태:
프로세스가 일시 중단되거나 다시 실행될 때 레지스터 값이 PCB로 저장되어 관리된다.
프로세스 우선순위(Process Priority):
프로세스의 중요도나 우선순위를 나타내는 값. 스케줄러는 이 값을 기반으로 CPU를 할당하는 우선순위를 결정한다.
프로세스 계정 정보(Process Accounting Information):
프로세스의 실행 시간, CPU 사용량 등과 같은 성능 관련 정보를 저장.
메모리 관리 정보(Memory Management Information):
프로세스가 사용하는 메모리 영역에 대한 정보를 포함하며 코드 섹션, 데이터 섹션, 스택, 힙 등의 정보가 여기에 기록된다.
입출력 상태 및 정보(I/O Status and Information):
프로세스가 사용하는 입출력 장치와 관련된 상태 및 정보를 저장한다. 프로세스가 대기 상태로 전환되었을 때 이 정보는 입출력 완료를 기다리는 동안 사용된다.
3. 프로세스의 상태
생성 (Creation) 상태
프로세스가 생성되고, 초기화 작업이 이루어지는 단계. 이 단계에서는 PCB(Process Control Block)가 생성되고 초기 상태로 설정된다.
준비 (Ready) 상태
프로세스가 실행을 기다리며, CPU를 할당받을 준비가 된 상태.
실행 (Running) 상태
CPU를 할당받아 명령어를 실행하는 상태. 프로세스가 CPU에서 명령어를 수행하는 상태.
대기 (Waiting 또는 Blocked) 상태
프로세스가 어떤 이벤트를 기다리는 동안에 있는 상태.
종료 (Termination) 상태:
프로세스가 작업을 마치고 종료되거나, 다른 이유로 인해 종료된 상태. 종료된 프로세스는 시스템에서 제거된다.