- 스레드 스위칭을 통해 환상을 만들도록 함
-> 각 프로세스는 혼자 CPU를 사용하고 있다고 착각
-> 실제로는 스케줄러가 스위칭
- 시스템 콜 호출
- 프로세스는 디바이스 또는 파이프 I/O 대기
- 일반적으로 타이머 인터럽트 또는 다른 인터럽트
- 인터럽트(ex. 10ms 타이머 인터럽트)
- 대부분이 에너지 절약 때문에 tick-less 커널로 동작
- 공정하게 진행
- CFS(Complete Fair Schedular) 스케줄러의 철학
- Lost wakeup
- Termination running
- 타겟 프로세스는 아마도 실행 중
- 여전히 프로세스의 kernel stack, page table, proc[] entry를 사용중
- 리눅스는 바로 실행중인 프로세스를 종료하지 않는다
Linux는 스스로 자살하도록 구현
- flag만 세팅
- 타겟 스레드는 trap이나 exit 시 flag를 체크
- exit()에서 FD들을 close
- Yields CPU -> parent process
- Task's kernel stack, page table은?
- ZOMBIE 상태로 변경
- 부모 프로세스는 wait() 시스템 콜로 kernel stack, page table을 free
- 어떠한 정책으로 스레드의 타임 슬라이스를 결정하는지
- 스레드에 주어진 시간
- 타이머 (HZ)에 영향을 받음
- 최적화가 어려움
-> Latency 향상을 위해 너무 작게 잡으면 poor throughput -> context switch overhead
-> Throughput 향상을 위해 너무 크게 잡으면 poor latency
- 어떤 스레드를 어떻게 선택할 지