本所讲述的是指内核模式下的内核模块,也就是指内核部分的中间层,位于硬件抽象层HAL和执行体层的中间的一层,内核层(或微内核)。内核的上两层执行体和内核部分都位于内核模块ntoskrnl.exe文件中,执行体位于上层,微内核部分位于下层,最接近HAL层。是内核的最核心部分了,它负责线程调度和中断的响应、异常的处理。在多处理器的情况下,还负责多处理器之间的行为协调,从而优化系统的性能。这层的核心任务是:让系统中所有的处理器尽可能地忙和高效。内核层可以在多个处理器上并发执行,主要的开发语言是C,有些特殊要求的要汇编语言编写。
windows内核实现了抢占式线程调度机制,按照优先级顺序将线程分配到处理器上,并且允许高优先的线程或中断抢占低优先级的线程。每个处理器上的线程切换在内核中实现,按照调度规则让处理器放弃当前线程,选择下一个要执行的线程。每个线程有一个基本的优先级(base priority)这个优先级是在创建线程时就被指定了的;除此以外,每个线程还有一个动态优先级值,是在线程执行过程中根据各种条件在基本优先级基础上由内核来调整的,目的是让系统更快的响应用户的动作,以及在系统服务和其他低级优先级进程之间平衡处理器资源的分配。
windows的内核按照面向对象的思想来设计,它管理两种类型的对象:分发器对象(sipatcher object)和控制对象。分发器对象实现了各种同步功能,这些对象的状态会影响线程的调度。windows内核的分发器对象有:事件(event),突变体(mutant),信号量(Semaphore),进程(process),线程(thread),队列(queue)门(gate)和定时器(timer)等。控制对象用于控制内核的操作,但是它不影响线程的调度,它包括异步过程调用(APC)、延迟过程调用(DPC),以及中断对象等。
内核层位于HAL之上,但鉴于内核所提供功能与硬件体系结构的紧密关联性,不可避免地引入一些与体系结构相关的代码,如在线程切换时,保存和恢复线程的执行环境取决于处理器的体系结构,但如何选择下一个线程是与体系结构无关的。内核有义务将windows所支持的各种硬件体系结构进行抽象,使得体系结构的差异对于windows代码的影响尽可能的小,并且有些功能可以通过HAL来实现,因为HAL是真正的硬件抽象层。如自旋锁和中断的功能是在HAL中实现的,内核只需简单的使用HAL提供的导出函数就可以。