14操作系统的运行机制与体系结构
# 1.1_4_操作系统的运行机制与体系结构
各位同学大家好,在这个小节当中,我们会学习操作系统的运行机制和体系结构,首先来看一下小节的知识框架:
我们首先会介绍运操作系统运行机制的几个基本概念,会从两种指令,特权指令和非特权指令出发,分别引出与这两种指令相对应的两种处理器状态和两种程序。
之后我们会根据内核程序来引出操作系统内核的概念,并且会介绍操作系统内核大致需要实现哪些功能。
在之后我们会根据操作系统内核的不同类别来讲解操作系统的体系结构问题,分别为大内核和微内核这两种体系结构,我们会按照从上至下的顺序来依次进行讲解。
# 什么是指令
首先来看第一个问题,在聊指令之前,我们来看一个跨考的同学可能不太清楚的问题,什么是指令?指令和我们平时所说的代码有什么区别,其实在我们平时用 c 语言写的代码,写完代码之后,这些代码会经过一系列的处理,最后会翻译为一系列等价的机器语言指令。而这个机器语言指令是用二进制来表示的,因为计算机硬件其实只能识别二进制数,而一条高级语言代码翻译过来可能会对应很多条机器语言指令
比如说在我们在 c 语言当中写了 x=x+1,这样一一条一行代码,那么这行代码经过翻译之后,就会翻就会对应这样三条具体的指令,而每一条指令其实就是让 CPU 干一件具具体的事情,然后这三个事情依次做完之后,才完成了 x=x+1 这样一个操作。所以其实简单来说,指令就是指处理器或者说 CPU 能够识别和执行的最基本的命令。比如说加法指令其实就是让 CPU 进行加法运算,
经过刚才的讲解,相信大家对指令已经有了一个比较直观的认识,其实指令就是让 CPU 干一件具体的事情,那么有的指令,比如说加减乘除这种普通的运算指令,让一个程序执行,这样的指令并不会影响整个系统的安全性,但是又有的指令它可以有很高的权限,比如说内存清零这样的指令,如果说所有的用户程序都可以使用内存清零指令的话,那么就意味着任何一个用户程序都可以把其他用户的内在内存当中的数据给随意的清零,这其可想而知,这是很危险的,会严重的影响到系统的安全性。
因此为了解决这个问题,我们会把指令分为特权指令和非特权指令两种,其中特权指令是不允许普通的用户程序来使用的,比如说刚才提到的内存清零指令,它就不允许用户程序来使用,那么 CPU 在执行的时候,在执行这些指令的时候,就会先进行判断一下当前是否允许执行特权指令。
那么由此引出一个新的问题,CPU 又是怎么判断当前是否可以执行这个特权指是否可以执行特权指令的?为此我们规定了 CPU 或者说处理器的两种状态,分别是用户态和核心态,其中用户态又可以称为目态,而核心态又可以称为管态,如果说 CPU 处于用户态的话,那么就意味着此时 CPU 只能执行非特权指令。而如果 CPU 处于核心态的话,那么此时 CPU 就可以执行特权指令,也可以执行非特权指令。
而 CPU 的这两种状态,其实是用程序状态字寄存器或者英文缩写叫 PSW,用寄存器当中的某一个标志位来标识的。比如说如果标志位设为 0 的话,就表示此时 CPU 是处于用户态,如果标志位设为 1 的话,那么就意味着此时 CPU 是处于核心态的,这就是课本当中提到的两种处理器状态。
那么经过刚才的讲解,我们知道系统当中存在着特权指令和非特权指令两种,有的程序需要使用特权指令,而有的程序只能使用非特权指令,因此计算机系统又把这些程序分为了两种,分别是内核程序和普通的应用程序,其中内核程序其实就是操作系统的核心的内容,它是系统资源的管理者,所以内核程序它既可以执行特权指令,也可以执行非特权指令,而内核程序由于需要执行特权指令,所以它是运行在核心态的。
而普通的应用程序它我们为了保证这个系统的运行的安全,所以我们不允许让普通的应用程序使用特权指令,因此这些普通的应用程序它只能执行非特权指令,所以它是运行在用户态的。
那么来简单回顾一下,刚才我们聊了两种指令,特权指令和非特权指令,其中特权指令需要在处理器状态的核心态下才可以执行,而非特权指令既可以在核心态下执行,也可以在用户态下执行,而需要使用特权指令的程序,我们把它称之为内核程序。另外的普通的程序称之为应用程序,内核程序由于需要使用特权指令,所以它需要执行在呃核心态。那么我们在接下我们再深入考虑下一个问题,既然操作系统当中的程序分为了两种,一个是内核程序,一个是应用程序,那么操作系统的哪些功能应该由所谓的内核程序来实现?这就引出了操作系统内核的概念。
# 操作系统内核
首先我们来看一个简单的生活例子,当我们在安装完 windows 操作系统之后,我们会发现这个操作系统当中其实提供了各种各样的功能,比如说它系统自带了一个记事本的功能,还有任务管理器这样的功能,但是其实像任务管理器这样的功能,它并不是必不可少的,即使没有任务管理器,我们仍然可以很方便的使用计算机使用这个操作系统。所以可以看到操作系统当中并不是所有的东西都是核心的,并不是所有的东西都是必须存在必备的。
那么我们来结合低前面几个小节提到的计算机系统的层次结构,我们知道操作系统是基于用户和硬件之间的一个中间层次,但是其实操作系统它还会再细分为一些更细小的层次,比如说最接近硬件的部分,这些层次就是所谓的操作系统内核,这才是操作系统当中最重要的最核心最基础的一些功能,这是就是内核的功能,然后在上面还会再铺设一些非内核的功能
而操作系统的内核又可以及进一步细分为和硬件紧密相关的,比如说时钟管理,中断处理,还有原语这些功能,其中时钟管理其实就是用于实现计算机的计时功能,我们的所有的进程切换,还有进程的调度,所有的这些管理工作都是需要基于计时的功能才可以实现的,所以时钟管理可想可想而知是非常重要的,
而言原语它其实是一种特殊的程序,比如说设备驱动,还有 CPU 切换,这些都是用原语来实现的。原语它是最接近硬件的部分,这些程序运行具有原子性,所谓的原子性是指这些这种程序,要么就不执行,要么就刚开始执行就一直得执行到结束,得一气呵成,中间不能被中断,这就是所谓的原子性。
而除了离硬件最近的这三个部分之外,内核当中通常还包含着像进程管理、存储器管理,还有设备管理这些和系统资源管理相关的一些功能,它们也属于内核功能。
我们再用文字的方式来总结一下,内核它是计算机上配置的底层软件,为什么是底层软件?刚才层次结构图当相信大家也已经看出来了,它是最接近硬件的一个部分,它是操作系统最基本最核心的部分。而实现操作系统内核功能的那些程序,就是我们之前所提到的内核程序,所以操作系统内核可以分为这样 4 个大部分,其中时钟管理,中断处理和原语是最接近,这个是与硬件关系最紧密的模块。而原语它有一个很重要的特性,就是原语这种特殊的程序,它的运行具有原子性,它的运行只能一气呵成,不可以被中断。
而除了这三个部分的功能之外,对系统资源进行管理的功能,比如说进程管理、存储器管理和设备管理,它也会被划分到所谓的操作系统内核当中,但是有的操作系统并不认为并不把这些功能划分为操作系统的内核功能,也就是说不同的操作系统,它的内核功能可能划分方式是不一样的,有的操作系统只包含上面这些基本的部分,而有的操作系统有可能还会包含这些部分,甚至还有可能包含其他的更多的部分。
# 操作系统体系结构
那么由此便引出了所谓的操作系统体系结构的问题。操作系统的体系结构比较经典的分法是把它分为大内核和微内核两两种类型。
比如说刚才我们提到的就是包含了进程管理、存储器管理这些各种各样的功能,如果把这些功能都放到操作系统的内核当中,那么这个操作系统的内核就会变得比较大,那么它就是一种大内核的体系结构。
而如果说操作系统的内核当中只包含一些最基本的必不可少的功能,那么这种体系结构就称之为微内核的体系结构。
所以其实所谓的大内核,将操作系统当中的各种主要的功能模块都作为了系统内核,都放到了系统内核当中,而这些系统内核功能都需要运行在处理器的核心态。与此相对的,微内核它只是把最基本的一些功能保留在了系统的内核当中,而把其他一些不必要的功能放到了内核之外
大内核的优点是高性能,但是缺点是内核的代码庞大,结构混乱难以维护。微内核的优点与它恰好相反,使内核的功能少,结构清晰方便维护,但是缺点又是需要在核心态和用户台之间频繁的切换,它的性能会比大内核更低。
其实这样讲解可能大家不太容易理解。我们来看一个生活当中的例子,其实操作系统的体系结构问题和我们的企业当中的管理问题是很相似的,内核其实就相当于是企业的管理层,他会负责一些很重要的工作,只有管理层才可以执行特权指令,而普通员工只能执行非特权指令,而我们的用户态核心态之间的切换,其实可以相当于是普通员工和管理层之间的工作安排。
大内核的体系结构其实就类似于我们在刚开始创办一个企业的时候,由于企业的体量并不大,所以说管理层的人会负责大部分的事情,比如说你和你的小伙伴合伙办了创办了一个公司,你们公司只有两个人,你们俩都是管理层的人,那么当你负责公司的采购这件事情的时候,你可以自己列一个采购清单,之后由于你本身就是公司的管理层,所以你可以直接用公司的账户给对方付款,然后把那些东西买回来之后放回公司,所以整个过程当中你作为管理层的人,你不需要和任何一个人申报,所以这种做事方式的优点很显然就是效率高,你不需要和其他人进行工作交接,所有的工作由你一个人由管理层一个人就可以全部进行。但是这种结构的缺点就是组织结构混乱,什么意思?你和你的朋友两个人都是公司的原始创始人,那么采购这有的时候采购这件事到底是由你负责还是由他负责?这种情况下可能就会导致你们之间的分工不明确,组织结构混乱。而当一些事情出现了问题之后,就不知道这个责任到底应该是由谁来承担,所以这是大内核带来的一个问题。
而如果采用的是微内核的体系结构的话,就类似于你们的公司越办越大。那么由于整个公司的体量越来越大,管理层不可能所有的事情都亲力亲为,管理层只会负责一些最核心的工作,比如说给普通员工授权,那么还是以刚才的采购那件事情为例子,如果说采用的是微内核结构,那么一个普通员工负责采购的事情,他首先会列出一个采购清单,之后会把采购清单交给管理层的某个负责人进行审批,然后他觉得没问题,然后签字之后员工才可以用拿着采购清单去订货,最后在付款的时候,由于员工没有权限,所以他依然需要向管理层申请,给我批一点钱,我要去付款.
所以可以看到如果采用微内核这种方式的话,其实缺点特别明显,就是员工和管理层之间需要进不停的进行工作的交接,也就是所谓的用户态和核心态之间的切换,那么不停的进行工作交接,会导致整个工作的推进进度会变得更慢,效率会变低。
但是优点也特别明显,由于管理层它组织结构是特别清晰的,我们的公司越做越大之后,管理层可能会分为财务问题,你就可以直接找 CFO,然后什么产品运营的问题,你直接找 COO,每一个管理层的人都会有自己负责的一部分内容,所以这就是它的优点。组织结构清晰,可以很方便的维护整个组织,所以这就是大内核和微内核的一个优点缺点,还有它们之间的区别。
# 小结
好的,那么我们来回顾一下刚才小节的内容。首先我们介绍了两种指令,特权指令和非特权指令,其中特权指令需要在处理机状态的核心态下才能够执行,然后特权指令是只能由内核程序使用的指令,那么刚才所说的这两个知识点,其实也是小节当中最容易考的两个知识点。
除此之外,核心态和用户台之间的切换也是很容易作为考题进行考察的,但是这个部分后续会有别的视频来进行讲解
之后,我们根据操作系统的哪些功能需要由内核程序来实现这个问题,引出了操作系统内核的概念,来介绍了操作系统内核应该包含的哪些功能,其中时钟管理,中断处理和原语,这三部分的功能是最接近硬件的层次。
而对于系统资源进行管理的这些功能,有的操作系统把这个部分认为是操作系统内核的一个部分,而有的操作系统并不把这个部分的功能归为操作系统的内核,由此我们引出了操作系统的两种体系结构,大内核结构和微内核结构。大内核结构就是指在操作系统内核当中需要处理很多的事情,很多功能都推进了操作系统的内核当中,而微内核结构是指我们在操作系统的内核当中只保留一些最核心最基本的功能,而把其他一些非必要的功能移到内核之外,他们的优点和缺点可能会作为选择题来进行考察。好的,那么这就是小节的全部内容。