쓰레드(Thread)와 스케줄링
쓰레드란?
- 프로세스 내에서 다중처리를 위해 제안된 개념
- 하나의 프로세스는 하나 이상의 쓰레드를 가지고 있음
- 하나의 쓰레드는 하나의 실행점만 존재함 (디스패칭의 단위)
- 실행에 필요한 최소한의 정보만 가지며, 자신이 속해있는 프로세스의 실행환경을 공유
다중 쓰레드의 장점
멀티 CPU
혹은멀티코어 시스템
에서 병렬처리 가능- 처리 속도 별로 쓰레드가 나눠진 경우 효율적인 처리 가능
스케줄링 단계
실제 작업에 필요한 요구사항을 파악해둠
상위 단계 스케줄링
- 시스템에 들어오는 작업들을 선택하여 프로세스를 생성한 후
프로세스 준비 큐
에 전달 - 선택 기준: 시스템의 자원을 효율적으로 이용할 수 있게 하는 것
- 입출력(I/O) 중심 작업과 연산 중심 작업을 균형있게 선택
하위 단계 스케줄링
- 사용 가능한 CPU를 준비상태의 어느 프로세스에게 배당할지 결정함
- CPU를 배당받은 프로세스는 실행상태가 되어 프로세스가 처리됨
- 수행 주체: 디스패처(dispatcher)
중간 단계 스케줄링
- 프로세스를 일시적으로 메모리에서 제거하여 중지시키거나 다시 활성화시킴
- 시스템에 대한 단기적인 부하를 조절
스케줄링의 목표
- 공정성: 모든 프로세스가 적정 수준에서 작업할 수 있게 함
- 균형: 시스템의 자원들이 충분히 활용될 수 있게 함 (CPU, 입출력 등의 분배)
운영체제에 따른 목표
- 일괄처리 운영체제
- 처리량의 극대화
- 반환시간의 최소화
- CPU 활용의 극대화
- 대화형 운영체제
- 빠른 응답시간
- 과다 대기시간 방지
- 실시간 운영체제
- 즉각적인 반응을 위해서 처리 기한을 맞춰줌
스케줄링 정책
선점(Preemptive) 스케줄링 정책
- 진행 중인 프로세스에 인터럽트를 걸고 다른 프로세스에 CPU를 할당하는 전략
- 높은 우선순위의 프로세스를 긴급하게 처리하는 경우에 유용
- 대화식 시분할 시스템에서 빠른 응답시간을 유지하는데 유용
- 문맥 교환에 따른 오버헤드가 발생함
문맥: CPU의 모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스의 상태
문맥 교환: 실행중인 프로세스의 문맥을 PCB에 저장하고 다음 프로세스의 PCB로부터 문맥을 복원하는 작업
비선점(Nonpreemptive) 스케줄링 정책
- 작업 자체가 I/O 인터럽트를 걸거나 작업을 종료할 때까지 실행상태에 있게 됨
- 모든 프로세스가 순서에 따라 실행됨 (응답시간 예측 가능)
- 짧은 프로세스가 긴 프로세스를 기다리게 될 수 있음