内核架构
在分析之前我们先明确这个内核架构概念,操作系统的内核结构可以分为三类:
- 模块结构,也叫做单内核结构,整个系统是一个大模块,而可以被划分为几个逻辑上的模块。包括处理器管理、存储器管理、文件管理,模块之间的交互通过直接调用其他模块的函数来实现
- 层次结构,这种内核架构是把操作系统划分为内核和若干个模块或者进程,这些模块或者进程被划分为多个层次,层次之间只能是单项依赖或者单向调用的关系,不会构成循环调用(可以理解为类似于计算机网络的五个层次结构,从高到低是应用层、传输层、网络层、数据链路层、物理层)
- 微内核结构,核心思想是内核只保留少量基本功能,而其他模块分离出来,不与他们耦合。各个模块和微内核之间通过通信机制进行交互,因此运行效率较低。[3]
内核架构名 | 模块 | 微内核 |
优点 | 灵活性好,效率高 | 未使用不运行,减少内存消耗,方便第三方扩展 |
缺点 | 高耦合 | 效率低 |
Window用的何种内核架构?
Windows使用NT内核,而NT内核是一种宏内核,可以理解为是模块结构。
宏内核定义:
宏内核同样管理着用户程序和硬件之间的系统资源,但是和微内核不一样的是,在宏内核架构中,用户服务和内核服务在同一空间中实现。具体一点,就是内核可以代表内核进程运行代码,就是通常的内核进程;当用户进程经过系统调用或者中断进入到内核态时,内核也可以代表它运行代码。这样一来,宏内核需要管理的资源多于微内核,其大小就相对大一些了。
在宏内核架构当中,内核管理着CPU调度,内存管理,文件管理和系统调用等各模块的的工作,由于用户服务和内核服务被实现在同一空间中,这样在执行速度上要比微内核快。然而,宏内核的劣势也是显而易见的,那就是当内核中的某个服务崩溃了,整个内核也会崩溃。另一点,想要在内核中添加新的功能就意味着内核中的各个模块需要做相应的修改,因此其扩展性很弱。
如果一个内核,只在Kernel Mode模式里放置IPC(进程通讯),MM(内存管理),Scheduling(调度)。那么就认为是微内核,反之,如果把其它的东西,比如file system, VFS, device drivers放到Kernel Mode,那么就认为是宏内核。简单来说,判断一个内核就是看它在Kernel Mode中运行了哪些东西。
Windows NT is like a microkernel in the sense that it has a core Kernel (KE) that does very little and uses the Executive layer (Ex) to perform all the higher-level policy. Note that EX is still kernel mode, so it's not a true microkernel.[5]
翻译一下:Windows NT有点像微内核,因为它里面的Core Kernel(简称KE)只是负责很少的工作,其它的事呢都交给执行层(简称Ex)来完成。要强调一下,因为Ex是在Kernel Mode下运行的,所以Windows NT不是一个真正的微内核。
为了不让程序任意存取资源,大部分的CPU架构都支持Kernel mode与User mode两种执行模式。当CPU运行于Kernel mode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于User Mode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。