也许我们会认为Windows系统Linux系统有巨大的差别,但Windows系统整体的设计原理其实与类Unix操作系统是类似的,只是Windows系统对多用户UI应用、系统安全的需求进行了特别的优化。

下图是Windows系统的架构图

windows系统的内核(Windows系统架构内核态部分)(1)

Windows系统的架构图

Linux系统的内核是大内核模式,因为它不仅实现了进程调度、内存管理、中断处理、异常陷阱处理,而且还实现了进程管理、进程通信机制、虚拟内存管理、文件系统驱动和USB、网络、声音等各类设备驱动子系统。

而传言中Windows系统一直采用的是微内核模式,但微软自身认为Windows不是微内核模式。因为对于微内核模式,内核只实现线程调度、消息传递、虚拟内存和设备驱动,其他所有功能都由处于用户模式的管理进程完成。而Windows为了避免用户态和内核态频繁切换带来的效率问题,将许多管理进程设计运行在内核态。

其实自从Linux内核引入了内核线程机制后,Linux内核也在内核态启用了许多系统管理进程(这些进程比较奇特,它们没有独立的进程地址空间,而是直接采用内核地址空间),因此如果你用PS命令来查看进程列表,将看到许多不是采用具体的Command启动的进程,这些进程的Command采用中括号包围,经常以k开头,例如[kthreadd]或[ksoftirqd/0]。

回到Windows系统,从图中,可以看出Windows系统在内核态有以下几个组件:

(1)、 内核kernel:它除了只提供基本的机制,比如线程调度和进程同步服务,也提供低等级与硬件架构相关的功能,比如中断和异常处理。但它只是在内核态运行的其中一小部分。这点与Linux有很大差别,因为Linux的kernel包含了所有在内核态运行的功能模块。

(2)、 HAL层:即硬件抽象层,它隐藏了硬件相关的一些细节,比如I/O接口、中断控制器和多处理器通信机制。而Linux内核其实也有这个功能,这些代码被放置于arch目录,只是没有像Windows一样,以单独的实体hal.dll方式呈现。

(3)、 内核态的管理进程和内核层的功能函数调用接口,统称为excutive。它包含:

* 配置管理器(configuration manager):管理系统注册表。

* 进程和线程管理器:负责创建和结束进程、线程。

* 安全引用监视器(security reference monitor),负责监视系统资源、执行对象的保护和授权。

* I/O管理器:负责分发与设备无关的I/O请求至具体的设备驱动,以完成进一步的处理。

* Plug and Play(PnP)即插即用管理器,它负责在设备枚举过程得到硬件资源信息,然后加载适配的驱动,并分配硬件资源(如I/O端口、中断线IRQs、DMA通道和内存),并向系统上层发出通知。

* 电源管理器:它负责协调电源事件,产生电源管理I/O通知给各个设备驱动。

* cache管理器:对磁盘数据进行缓存,以提升系统性能。

* 内存管理器:虚拟内存管理,以为每个进程提供私有、超过实际物理内存大小的地址空间。

* logical prefetcher预取:在系统启动时,它总是预先加载一些常用的系统数据,这明显提升了系统操作时的一些性能体验。而Linux系统由于没有这种机制,导致系统启动后,许多第1次操作都需要较长的等待时间。

* object管理器:object代表着系统资源项,比如process、thread和各种进程同步对象。

* LPC和RPC,即本地进程通信和远程调用接口。

* 常用的库函数,比如字符串处理、数据类型转换、安全结构处理、内存分配、互斥和自旋锁。

(4)、设备和文件系统驱动:它与Linux是相同的,可支持动态加载。但它比Linux驱动更强大些,至少它并不需要像Linux那样,内核升级一个版本,驱动就需要重新编译以适配。

(5)、图形设备驱动和GDI(graphic device interface):为了改进图形性能,Windows把GDI都放到内核态实现。这与Windows追求高体验UI要求相符。而Linux在此点明显落后很多,为什么Linux系统UI操作总显得更卡点,其中一部分原因是由于Linux的GDI全都运行在用户态空间。

最后,Windows系统也是采用C语言编写,虽然它号称是面向对象,但其实与Linux采用C语言实现面向对象的方法是一致。


相关文章链接:

被C语言重塑的UNIX——脱胎换骨

C语言“大爆炸”——C 、Objective-C、C Sharp

C语言的诞生——上帝的编程语言

不能忘却的C语言之父——丹尼斯·里奇

#后期会介绍更多关于Windows, Linux, C语言等相关知识点,以及牛人的工作经验等相关内容,增加你对IT技术的兴趣!

#本期无法推:“提升一下你的搜商”,原因你懂的,如果有需要的小伙伴可以在评论区留言,我会私信发给你!


觉得不错,请点赞分享或收藏↓↓↓

请关注IT科研室

作者:Kevin一个不端不装有梦有趣的原创文字创作与分享者!

,