## Scheduler State

The first three lines and the fifth line of the output show the state of the kernel scheduler. This information is mainly of interest to kernel engineers, although the state of the kernel and the system locks can be useful when debugging device driver crashes.

SCHEDULER @64000348: CurrentThread 640396b0
RescheduleNeeded=00 DfcPending=00 KernCSLocked=00000001
DFCS: next 64000458 prev 64000458
...
SYSLOCK: HoldingThread 00000000 iWaiting 00000000

The values are interpreted as follows:

SCHEDULER @ | This is the address of the kernel’s scheduler instance; this is not very useful.
CurrentThread | The address of the kernel object for the current kernel thread.
RescheduleNeeded | This is set to non-zero by the kernel to force a reschedule, for example if a thread has been signalled
DfcPending | This is non-zero when there are DFCs queued.
KernCSLocked | This is incremented each time the kernel is locked by a call to NKern::Lock(), and decremented by calls to NKern::Unlock(). A value of zero means that the kernel is not locked.
DFCS: | The addresses of the next and the previous items on the DFC queue
HoldingThread | The address of the thread holding the system lock mutex. The system lock is set by call to NKern::LockSystem() and unset by call to NKern::UnlockSystem()
iWaiting | Non-zero, if any thread is waiting for the system lock mutex.

##### Related tasks

- Extracting Kernel Information
- Current Thread State
- Current Process State
- Current Data Section Process