- 프로세스(process): 실행 중인 프로그램
- 프로그램: 동작을 하지 않는 정적·수동적 개체
- 저장장치에 들어있으며, 프로그램 실행에 필요한 명령어를 담고 있음
- 프로세스: 동작을 하는 능동적 개체
- 명령어 이외에도 데이터 등이 담김
- 프로세스 자체의 사이즈는 프로그램 사이즈보다 큼
- 운영체제로부터 자원을 할당 받아 동작
- 자원: CPU, 메모리, 입출력장치, 파일 등
- CPU 자원을 할당 받아야 동작을 할 수 있음
- 동작: CPU가 프로세스의 명령을 실행
- 운영체제(프로세스 관리자)가 처리하는 작업
- 프로세스를 생성 및 종료
- 프로세스를 실행시키기 위한 스케줄링 작업
- 프로세스의 상태 관리
프로세스는 메모리 구조와 프로세스 제어 블록의 두 가지로 구성됨
각 영역에 따라 저장되는 데이터의 특징이 다름
- 정적 데이터 영역 : 상수, 전역 변수 등 프로그램 시작부터 끝까지 관리되어야 하는 데이터
- 스택 영역 : 서브 프로그램 호출 시 사용되는 지역변수 등
- 힙 영역 : 동적 변수 사용자가 수동으로 할당하는 것들
운영체제가 프로세스 하나를 관리하기 위해서는 단순히 코드와 데이터 뿐만이 아니라,
특정 프로세스를 다른 프로세스와 구분해서 처리해줄 또다른 정보가 필요함
| 상태 | 설명 |
|---|---|
| 생성 | 처음 작업이 시스템에 주어진 상태 (PCB를 만들고, 메모리 공간을 할당 받음) |
| 준비 | 실행 준비가 되어 CPU 할당을 기다리는 상태 |
| 실행 | 프로세스가 처리되는 상태 |
| 대기 | 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당받을 때까지 보류되는 상태 |
| 종료 | 프로세스가 더 이상 실행되지 않도록 끝난 상태 |
종료로 가게 되면, 그 프로세스는 더 이상 아무 작업도 할 수 없음
프로세스 생성 시스템 호출
- UNIX, Linux:
fork()
- 자식 프로세스는 부모 프로세스의 복제본
- PID를 제외한 나머지는 모두 동일 (PC가 가리키는 명령어 주소도 동일)
- UNIX, Linux:
exec()
- 자식 프로세스는 부모 프로세스와는 다른 프로그램 실행
- PID를 제외한 코드, 데이터, PCB 영역 모두 바뀜
- Windows:
CreateProcess()
- 자식 프로세스는 새로운 프로그램으로 생성
전통적인 프로세스
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위
- 하나의 메모리 구조
- 디스패칭의 단위
- 하나의 제어흐름
- 프로세스 내에서 다중처리 불가능
- 전통적인 프로세스
- 하나의 PC로 디스패칭하는 형태
- 쓰레드 있는 프로세스
- 프로세스 안의 쓰레드가 PC를 별도로 가짐
다중 쓰레드 = 멀티 쓰레드