프로그램이란?
- 파일이 저장장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태이며, 어떠한 작업을 위해 실행할 수 있는 파일(컴퓨터가 실행할 수 있는 명령어들의 집합)
프로세스(Process)란?
- 프로그램이 메모리에 올라와 운영체제로부터 CPU를 할당받고 프로그램이 실행되고 있는 상태.(컴퓨터에서 실행 중인 프로그램)
※ CPU : 명령어를 실행하는 연산장치
프로세스의 특징
- 각각의 프로세스는 독립된 메모리 공간을 할당받는다.
- 메모리 공간에는 명령어들과 데이터를 가지게 된다.
※ 메인 메모리 : 프로세스가 CPU에서 실행되기 위해 대기하는 곳
CPU 스케줄링(Scheduling)
- 프로세스가 생성된 후 종료될 때까지 스케줄링 알고리즘을 통해서 모든 상태 변화를 결정하는 일을 한다.(CPU가 놀지않고 일을할 수 있도록 선택하는 역할)
스케줄링의 선점방식
비선점(Nonpreemptive) 스케줄링
장점
- 프로세스 간의 오버헤드가 적다 -> context switching이 적다.
- 모든 프로세스에 대한 공정한 처리가 가능하다.
단점
- 특정 프로세스를 오래 기다려야 하는 상황이라면, 그동안 이미 실행됐지만, CPU에서는 활동하지 못하는 프로세스는 ready queue에서 기다리고 있기 때문에, 사용자 입장에서는 응답성이 느리다고 느낄 수 있다.
선점(Preemptive) 스케줄링
장점
- 우선순위를 가진 프로세서들을 빠르게 처리할 수 있다.
단점
- 오버헤드가 증가한다 -> context switching이 자주 발생한다
스케줄링의 알고리즘
- FCFS(First Come First Served) : 먼저 도착한 순서대로 처리 ex) Queue방식
- SJF(Shortest Job First) : 프로세스의 다음 CPU burst가 가장 짧은 프로세스부터 실행.
- SRTF(Shortest remaining Time First) : 남은 CPU burst가 가장 짧은 프로세스부터 실행.
- Priority : 우선순위가 높은 프로세스부터 실행.
- RR(Round Robin) : time slice로 나눠진 CPU time을 번갈아가며 실행
- Multilevel Queue : 프로세스를 그룹화해서 그룹마다 Queue를 두는 방식
스레드(Thread)란?
- 프로세스(process) 내에서 실제로 작업을 수행하는 주체. 모든 프로세스는 한개 이상의 스레드가 존재한다.
스레드의 특징
- 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap영역은 공유한다.