프로세스란?
프로세스(Process)는 CPU가 처리하는 작업(Task)이며 실행중인 프로그램을 의미한다.
구체적으로는, 디스크
에 저장되어 있던 실행 가능한 프로그램
이 메모리
에 적재되어 운영체제
가 관리하는 상태를 의미한다.
프로세스 스케줄링
스케줄링이란?
CPU는 한번에 한가지 작업만을 처리할 수 있다. 하나의 작업이 끝나면 다음 작업을 수행해야 하는데, 이때 OS는 프로세스 스케줄링 알고리즘을 이용하여 다음에 실행할 프로세스를 선택한다.
- 선점(Preemptive) 스케줄링
- 프로세스가 CPU를 점유하고 있는 동안 (I/O 이벤트 또는 인터럽트가 발생한 것이 아니고 작업이 끝난 것도 아닌 상태에서) 다른 프로세스가 해당 CPU를 강제로 점유할 수 있다.
- 비선점(Non-preemptive) 스케줄링
- 한 프로세스가 CPU를 점유하면 (I/O 이벤트 발생 또는 프로세스가 종료될 때까지) 다른 프로세스가 CPU를 점유하지 못한다.
프로세스 상태
- 다수의 프로세스가 CPU를 서로 차지하려는 것을 관리하기 위해서는 상태(state) 정보가 필요
- 준비(Ready) → 실행(Running) → 대기(Waiting) → 종료(Terminated)

- 준비(Ready)
- 프로세스가
메인 메모리에 할당
되고, (초기화 같은 작업을 통해) 실행될 준비를 마친 단계
- 여러개의 프로세스가 생성된 경우 준비 큐(
ready queue
)에 프로세스들이 연결 리스트 형태로 저장된다.
- 프로세스가
- 실행(Running)
CPU
가 해당 프로세스를 실행하는 상태
- 대기(Waiting)
- 프로세스가 완료되지 않은 시점에서
I/O 작업
이 필요하거나 다른event
가 먼저 실행되어야할 때 CPU를 사용하지 않고 다른 작업을 하는 단계
- 대기 상태가 끝나면(I/O or event completion) 다시 준비(Ready) 상태로 이동 (
wait queue
→ready queue
)
- 프로세스가 완료되지 않은 시점에서
- 종료(Terminated)
- 프로세스가 완료되거나 다른 이유로 실행을 중단해야할 때, 해당 프로세스는 종료되며
메모리에서 해제
됨
- 프로세스가 완료되거나 다른 이유로 실행을 중단해야할 때, 해당 프로세스는 종료되며
실행 프로세스가 교체되는 경우
- 실행 중인 프로세스가 끝났을 때
- 실행 중인 프로세스가 혼자 너무 오래 일하고 있을 때
- 준비(Ready) 상태로 전환
context switch
발생
- 프로세스 실행 중 I/O 처리 등의 다른 일이 진행될 때
- 대기(Waiting) 상태로 전환
- PCB를 ready queue에서 wait queue로 이동시킴
context switch
발생
- 대기 상태가 끝나면(I/O or event completion) 다시 ready queue로 이동되어 실행 순서를 기다림
프로세스 제어
- OS는 프로세스가 시작되고 종료될 때까지 PCB(Process Control Block)를 생성해서 관리
- PCB에는 스케줄링 정보, 실행되고 있는 주기억 장치의 주소 정보 등을 포함
- 여러개의 프로세스가 생성되면 여러개의 PCB가 큐에 연결 리스트 형태로 저장되어 순서대로 실행
- PCB는 메모리 상에서 준비큐(ready queue)나 대기큐(wait queue)에 위치
스케줄링 방식
- 기한부 스케줄링(deadline scheduling)
- 각 작업들에게 주어진
마감 시간
까지 완성하도록 계획하는 스케줄링
- 각 작업들에게 주어진
- 우선순위 스케줄링(priority scheduling)
우선 순위가 높은
프로세스를먼저
실행하는 방식
- 고정 우선순위(static priority) : 우선 순위가 바뀌지 않는다.
- 노화(aging) 기법: 우선 순위가 고정이면 낮은 우선순위가 계속 밀려 기아 문제가 발생할 수 있으므로 기다리는 시간이 길어지면 우선순위를 조금씩 높여 언젠가 가장 높은 우선순위를 가지게 하는 방식
- FIFO 스케줄링
- 프로세스가 생성된 순서대로 실행하는 방식
- 비선점형 스케줄링 방식
- SJF 스케줄링(Shortest Job scheduling)
- 작업에 필요한 실행 시간이 가장 작은 것부터 먼저 실행하도록 스케줄링하는 방식
- 비선점형 스케줄링 방식
- 라운드로빈 스케줄링(Round Robin scheduling)
- 선점 스케줄링 방식
- FIFO처럼 순차적으로 실행하지만, CPU에서 제어하는 시간을 일정하게 나눠서 스케줄링
스레드
프로세스 안에서 각각의 Stack
을 할당받아 실행되는 독립적인 단위
멀티스레드의 경우 Stack을 제외한 나머지 자원
(코드, 메모리 주소 공간, 운영체제 리소스)은 공유
스레드 풀(Thread Pool)이란?
스레드 풀은 주어진 작업을 처리하기 위해 미리 생성된 스레드들의 집합으로, 멀티스레드 프로그래밍에서 효율적인 작업 처리를 위해 사용되는 기법이다.
OS 입장에서는 매번 스레드 생성을 위해 메모리를 할당하면 시스템 자원이 낭비되므로 스레드 풀을 만들어 스레드를 재사용하는 것이 효율적이다.
스레드 풀의 동작 방식
- task queue에 task가 추가됨
- thread pool이 task를 가져와서 thread에 작업 할당
- 각 thread는 작업 진행
- 완료된 thread는 완료 상태로 존재