코드네임 :
⚙️ 운영체제 - CPU 스케줄링 기본 ⚙️ 본문
< CPU 스케줄링이 실행되는 4가지 상황 >
1. 스레드가 시스템 호출 끝에 I/O를 요청하여 블록될 때
- 스레드가 입출력(I/O) 작업을 요청하면, CPU는 더 이상 해당 스레드가 필요하지 않기 때문에 해당 스레드를 블록 상태로 만듦
➡️ CPU의 활용률 극대화 목적
2. 스레드가 자발적으로 CPU를 반환할 때
: 스레드가 자발적으로 yield() 호출을 통해 CPU를 반환
: 커널은 현재 스레드를 준비 리스트에 넣고, 새로운 스레드 선택
➡️ 균등한 CPU 분배 목적
3. 스레드의 타임 슬라이스가 소진되어 타이머 인터럽트 발생
: 스레드가 정해진 타임 슬라이스를 모두 사용하면, 타이머 인터럽트가 발생하고 현재 스레드를 중단시키고 준비 리스트에 있는 다음 스레드로 CPU를 할당
➡️ 균등한 CPU 분배 목적
4. 더 높은 순위의 스레드가 요청한 입출력 작업 완료, 인터럽트 발생
: 현재 스레드를 강제 중단(preemption)시켜 준비 리스트에 넣고높은 순위의 스레드를 깨워 스케줄링
➡️ 우선순위를 지키기 위한 목적
[ CPU 스케줄링과 디스패치 ]
< CPU 스케줄링 코드의 실행 >
스케줄링 코드의 위치: CPU 스케줄링은 커널 내에 위치한 함수
- 독립된 스레드가 아님
- 시스템 호출이나 인터럽트 서비스 루틴이 끝날 때 호출됨
스케줄링 코드가 실행되는 시점 : 시스템 호출 또는 인터럽트 서비스 루틴이 끝난 시점
<디스패처 코드의 실행 >
디스패처의 역할: 스케줄러에 의해 선택된 스레드를 CPU에서 실제로 실행하도록 함
컨텍스트 스위칭을 담당
이 과정에서 커널 모드에서 사용자 모드로 전환됨
➡️ 스케줄러와 디스패처 모두 실행 시간이 짧도록 작성
4. 스케줄링과 디스패칭 과정
- 스레드 A 실행 중: 시스템 호출을 통해 스레드 A가 실행되던 중, 시스템 호출 처리 루틴 또는 인터럽트 서비스 루틴이 발생합니다.
- 스케줄링 코드 실행: 스레드 A가 블록되거나 타임 슬라이스가 소진되면, 스케줄링 코드가 실행되어 준비 리스트에서 새로운 스레드(B)를 선택합니다.
- 디스패처 코드 실행: 선택된 스레드 B의 레지스터 값을 복구하고 스레드 A의 레지스터 값을 저장하는 컨텍스트 스위칭이 발생합니다. 그 후 스레드 B가 CPU에서 실행되기 시작합니다.
< 선점 스케줄링 vs 비선점 스케줄링 >
비선점 스케줄링
: 현재 실행중인 스레드를 강제로 중단시키지 않고 계속 실행하는 방식
: 실행 중인 스레드가 완료될 때까지 다른 스레드가 CPU를 사용할 수 없음!
- 스케줄링 시점
: CPU를 더 이상 사용할 수 없게 된 경우 (예: I/O 요청으로 블록 상태로 전환될 때, sleep 등)
: 자발적으로 CPU 양보할 때 (예: yield() 호출)
: 종료할 때
선점 스케줄링
: 현재 실행 중인 스레드를 강제로 중단시키고, 준비 상태에 있는 다른 스레드를 실행하는 방식
- 스케줄링 시점
: 타임슬라이스가 소진되어 타이머 인터럽트가 발생될 때
: 인터럽트나 시스템 호출 종료 시점에서 더 높은 순위의 스레드가 대기 상태일 때
차이점 요약 :
- 비선점 스케줄링: 스레드가 CPU를 자발적으로 반환하거나, I/O 요청으로 블록 상태가 될 때만 스케줄링이 발생합니다. 현재 스레드가 완료되기 전에는 다른 스레드가 CPU를 사용할 수 없습니다.
- 선점 스케줄링: 타임 슬라이스에 기반한 스케줄링으로, 스레드가 CPU를 일정 시간 동안 사용하면 다른 스레드로 전환되며, 더 높은 우선순위를 가진 스레드가 있을 경우 현재 스레드가 강제로 중단됩니다.
'컴퓨터와 함께해요 > 운영체제' 카테고리의 다른 글
⚙️ 운영체제 - 메모리 ⚙️ (0) | 2024.11.06 |
---|---|
⚙️ 운영체제 - 스케줄링 정책 (알고리즘)⚙️ (0) | 2024.10.17 |
⚙️ 운영체제 - CPU 스케줄링 ⚙️ (0) | 2024.10.16 |
⚙️ 운영체제 - 프로세스 스케줄링 ⚙️ (1) | 2024.10.16 |
⚙️ 운영체제 - 기아상태 & 해결방안 ⚙️ (0) | 2024.10.16 |