Windows: Nonpreemptive vs. Preemptive Scheduling (11248)
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) 3.0
- Microsoft Windows Software Development Kit (SDK) 3.1
This article was previously published under Q11248 SUMMARY
Preemptive scheduling, which Windows DOES NOT do, is defined in the
following way:
Between any two application instructions, N instructions may
execute in another application's context, where N is greater than
or equal to zero.
A nonpreemptive system, such as Windows, will guarantee that this
number N will always be zero.
MORE INFORMATION
In nonpreemptive scheduling, an application is not forced out of
context asynchronously (that is, it is not preempted). Instead, the
application runs until it explicitly gives up control. Windows-aware
applications give up control through various system calls. Although
they are not aware of it, MS-DOS-based applications give up control
whenever they attempt various I/O functions.
MS-DOS-based applications running under Windows version 3.0 are in fact
preemptively multitasked. In contrast, all Windows-based applications are
nonpreemptively multitasked. When the system is viewed from a Win386
perspective, Windows runs in the system virtual machine (VM) and that VM
competes for time slices along with the rest of the MS-DOS-based
applications running in other virtual machines. Keep in mind that unlike MS-
DOS-based applications, all Windows-based applications run inside the
system VM, and are not given their own virtual machine.
NOTE: An interrupt is not considered to be a form of preemption unless
there is an application context switch during the interrupt. An
interrupt takes the execution stream into the kernel, which returns
back to the same place without running another application, much in
the same way a call would.
Modification Type: | Major | Last Reviewed: | 10/29/2003 |
---|
Keywords: | kb16bitonly KB11248 |
---|
|