第一章 计算机系统概述
操作系统的体系结构
- 大内核/单内核/宏内核
- 微内核
通过之前的学习,我们知道计算机系统的层次结构是这样的。
但是操作系统的内部其实还可以再进一步地划分。
一部分是内核的功能,一部分是非内核的功能。
操作系统最核心的功能,要放在内核当中。比如:时钟管理、中断处理、原语;进程管理、存储器管理、设备管理等等。这些功能都是要放在操作系统内核当中的。
时钟管理:利用时钟中断实现计时功能。
中断处理:略。
原语:原语是一种特殊的程序,具有原子性。也就是说,这段程序的运行必须一气呵成,不可被“中断”。要么就一气呵成的全部运行完成,要么就不运行。它的执行过程是不可被中断的,也就是在执行原语这一段程序的过程当中,即使有外部中断信号过来了,CPU也会继续把原语执行完成,然后才去处理那个外部中断信号。
总之,上图“内核”部分当中,最底层的那三个(时钟管理那一行),是与硬件结合最为紧密的,它们必须放在操作系统的内核当中。
Ubuntu、CentOS的开发团队,其主要工作是实现非内核功能,而内核都是用了Linux内核。
内核是操作系统最基本、最核心的部分。
实现操作系统内核功能的那些程序就是内核程序。
对于那三个最底层的功能,它们是与硬件结合最为紧密的,也必须放在操作系统内核当中。
而进程管理、存储器管理这些管理功能,不会直接涉及硬件,所以,有的操作系统并不把这些管理功能放到内核当中。而只在内核当中保留那些与硬件接触最紧密的部分。
因此,这就引出了两种截然不同的内核设计方法。
把所有的这些功能都包含在操作系统当中的,这种结构就叫大内核;
在内核当中只保留与硬件结合最紧密的这些部分,那么这种结构就叫做微内核。
注意:操作系统内核需要运行在内核态;操作系统的非内核功能运行在用户态。
需要注意的是,如果采用微内核结构的话。
属于内核的这些功能,是需要运行在内核态的。而不属于内核的,上面那些管理功能,就不属于内核,就要运行在用户态。
这会对我们系统的性能造成一定影响。
如何造成影响,我们用一个更直观的例子来体会。
现在,我们有两种体系结构的系统。
第一个系统,采用的是大内核的体系结构,那么,由于进程管理、存储管理等等这些功能都是被划分在内核当中的,所以这些功能的处理都需要运行在内核态,只有应用程序是运行在用户态的。
而如果采用微内核结构的操作系统,只有与硬件联系最紧密的这些被划分在了内核当中,只有这些功能是在内核态下才可以执行的,而其他的功能模块在用户态下就可以运行。
此时有这样一种情况。
假设,现在应用程序想要请求操作系统的服务,这个服务的背后需要涉及到进程管理、存储管理、设备管理这几个功能。
如果采用的是大内核的体系结构的话,那么应用程序向操作系统提出服务的请求,此时CPU会从用户态切换为核心态,然后开始运行这一系列的内核程序。
而如果采用的是微内核的体系结构的话,应用程序向操作系统提出服务的请求,接下来操作系统的这几个模块都需要为应用程序提供服务,而这几个模块之中,进程管理这一个模块在处理应用程序请求的时候,它同样也需要得到内核的支持(如时钟、中断等),所以在进程管理这一个模块服务的过程中,CPU还需要由用户态转为内核态,服务完成之后又会从内核态再转回用户态。同理,存储管理、设备管理这两个模块也是一样的,它们在执行相应工作的时候,同样也需要得到内核功能的支持。因此,每一个模块,都需要请求内核的服务,每一次都需要涉及到一次CPU状态转换的过程。
因此,如果采用的是大内核的体系结构,CPU只需要进行两次状态转变就可以了。
而如果采用的是微内核体系结构,整个过程的处理就需要有六次变态。
需要注意的是,CPU的状态转换,这件事情是有成本的,需要消耗不少的时间。因此,频繁地切换CPU的状态,是会降低系统性能的。
【注意】此处“变态”这个词只是我们为了方便表达,正确的说法应该是“CPU状态的转换”。
小结
典型的 大内核/宏内核/单内核 操作系统:Linux、UNIX
典型的 微内核 操作系统:Windows NT
(了解即可,重要的是知道两种体系结构各自的优缺点)