Stack
Heap
Data
Code(Text)
프로세스에는 상태(state)라는 것을 가지고 있다
new, ready, running, waiting, terminated, suspended
new : 프로세스가 만들어지는 과정의 상태로 PCB도 같이 생성된다.
ready : 프로세스가 CPU를 기다리는 상태이다. 프로세스가 필요한 자원을 모두 얻어 메모리에 적재된 상태이다. CPU를 할당 받으면 바로 실행 가능한 상태이다. ready 상태를 가지는 여러 프로세스가 존재할 수 있다.
running : 프로세스가 CPU를 할당받아서 명령어를 수행중인 상태이다. 프로세스가 여러개여도 일반적으로 CPU는 하나이기 때문에 매 시점 실행중인 프로세스는 1개이다.
terminated : 프로세스가 다 수행되어서 종료할 때 생기는 상태이다. 종료될 때 CPU는 반납하고, PCB는 남아있다.
blocked : 프로세스가 I/O작업 등을 처리중이기 때무에 CPU를 할당 받아도 당장 실행할 수 없는 상태이다.
suspended : 프로세스 중지 상태로 특정한 이유로 프로세스 메모리가 강제로 빼앗겨 수행이 중지된 상태이다. 외부에서 다시 재개시키지 않는 이상 다시 활성화 할 수 없다.
blocked / suspended
차이
blocked
: 잠시 중지 되었다 끝나면 다시 ready상태로 돌아옴
suspended
: 잠시 중지 되었다 재개 할려면 외부에서 재개 시켜줘야 ready로 돌아온다.
작업큐 (Job Queue)
시스템의 모든 프로세스를 관리하기 위한 큐이다. 프로세스 상태와ㅏ 무관하게 현재 시스템 내에 있는 모든 프로세스를 관리한다.준비큐 (Ready Queue)
CPU를 할당 받기 위해 대기하고 있는 프로세스를 관리한다. 준비큐에 있는 프로세스들은 ready 상태에 있게 된다.장치큐 (Device Queue)
각 장치마다 서비스를 기다리며 줄 서 있는 프로세스를 관리한다. 여기에 속한 프로세스들은 blocked 된다.
new -> ready
os에서 승인을 받아 프로세스가 생성되면 준비큐에 올라온다.
ready -> running
준비큐에 있는 프로세스 중에 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당 받는다.
running -> ready
CPU를 할당받고 작업을 하다 특정 이유로 다른 프로세스에게 CPU를 주고 다시 CPU를 기다린다.
running -> blocked
수행중인 프로세스가 I/O 작업을 해야할 경우 CPU를 반납하고 장치큐에 들어가게 된다.
blocked -> ready
장치큐에 있던 프로세스가 일을 하고 한 일을 메모리에 올려놓고 프로세스는 다시 준비큐에 들어간다.
running -> terminated
프로세스 실행이 완료되어 반납 상태
blocked, ready -> suspended blocked, suspended ready
blocked, ready 상태에 있 프로세스들이 어떤 이유로 인해 suspended 상태로 바뀐다. suspended blocked 상태인 프로세스 blocked 조건들을 만족하게 되면 suspended ready로 바뀌게 된다.
예시
- CPU에 어떤 긴급한 프로세스를 처리해달라고 요청이 오면 기존에 작업하던 프로세스를 어딘가에 임시로 저장한 다음에 급한 작업을 완료하고 기존 프로세스를 불러와야한다. 이 때 필요한 저장소가 PCB다.
interrupt 되면 P0가 running -> ready 과정으로, 다른 프로세스(P1)에게 CPU를 준다는 의미이다
Process
- 무거운 연산
- 각각 고유의 메모리 공간을 가진다
- IPC 통신을 통해 프로세스 간의 통신을 한다
- 문맥 교환 오버헤드가 크다
- 메모리 공유를 하지 않는다
Thread
- 가벼운 연산
- 자신이 속한 프로세스 자원을 공유한다
- 프로세스 메모리를 공유하기 때문에 IPC통신보다 속도가 빠르다
- 프로세스 내의 쓰레드간 교체는 오버헤드가 덜하다
- 같은 프로세스에 있는한 쓰레드는 서로 메모리를 공유한다