- 일정 시간이 되면 스스로 CPU 자원을 포기하는 방식
- 해당되는 OS
- Windows 95/NT 이전의 Windows, 16비트 애플리케이션을 하위호환으로 수행하는 Windows 9x, Mac OS X 이전의 Mac OS, NetWare (up to v6.5), RISC OS
- 문제점
- 특정 태스크가 CPU 자원을 포기하지 않는다면?
- pre-emption은 실행 중인 CPU 태스크에 잠시 인터럽트를 거는 행위를 의미함
- 협력을 구하는 방식이 아니라 나중에 그 태스크를 다시 시작할 의도로 실행을 멈추고 CPU 자원을 빼앗음
- 이런 의미에서라면 “선점”이라는 번역보다는 “탈취”라는 의미에 가깝지 않을까?
- pre-emption이 발생하여 실제로 CPU 자원을 할당받아 실행되는 태스크가 바뀌면 context-switch가 발생함
- pre-emption을 실제로 수행하는 주체는 privileged task 또는 pre-emptive scheduler임
- 커널 함수나 서비스 인터럽트는 pre-emptible하지 않음
- pre-emptible하면 race condition이 발생하여 deadlock이 될 수 있음
- scheduler는 커널 함수를 수행하고 있는 태스크를 건드리지 않음
- 이런 예외 사항이 있어서 OS 설계가 간단해짐
- 그러나 일부 OS는 pre-emptive kernel로 설계되어 있어서 커널 모드에 있는 태스크도 pre-empt함
- ex) Solaris 2.0/SunOS 5.0, Windows NT, Linux kernel 2.6/3.x, AIX, NetBSD (since v5)