CHS_01.1.4+操作系统体系结构 一
- 操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题
- 操作系统的内核
在这个小节中 我们会学习
操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题
那这个小节的内容我们只需要做简要的了解就可以了 我们考试中常考的是这样的两种体系结构 一种叫大内核 一种叫微内核
那经过我们之前的学习 我们知道计算机系统的层次结构是这样子的 但是操作系统的内部其实还可以再进行进一步的划分
一部分是内核的功能 另一部分是非内核的功能 操作系统最核心的那些功能需要放在操作系统的内核当中
操作系统的内核
比如说时钟管理 中断处理 还有原语另外呢 还有之后我们要学习的进程管理 存储器管理 设备管理等等
这些功能都是要放在操作系统内核当中的 那那这儿提到的时钟管理其实就是用我们之前提到过的时钟中段来实现了
计算机计时的功能想要实现程序并发 就必然离不开始终管理这个
很重要的内核功能 那中断处理呢就不再多解释了 之前已经举了很多例子 另外呢 还有一种特殊的程序叫做原语
原语这种程序 它具有原子性 所谓的原子性就是说这种程序要么就一气呵成的全部运行完成 要么就是不运行
它的执行过程是不可被中断的 也就是说 在执行原语的这一小段程序的过程当中
即使有外部中断信号过来了 那cpu也会继续把原语执行完成 才去处理那个外部中断信号
总之 我们这儿列举的最下面这一层的这三个东西 适合硬件结合最为紧密的
所以他们必须放在操作系统的内核当中 那其实像Ubuntu、CentOS等等这些我们耳熟能详的linux操作系统
这些系统的开发团队 他们主要干的事情其实是在实现非内核的功能 而这些个操作系统的内核使用的就是linux的内核
那同学如果不知道这些什么东西的话也无所谓 这个不需要深究 总之 内核是操作系统最核心最基本的部分
它由一系列的内核程序组成 这些内核程序必须运行在内核态
那刚才我们提到的最底层的这三个部分是与硬件关联最紧密的模块
这些功能是必须放在内核当中的 还有一些管理相关的功能 向进程管理 存储器管理
对于这些功能的管理更多的是对数据结构的一个操作 而不会直接涉及到硬件
所以 有的操作系统并不把这些管理功能放在内核当中 而只在内核当中保留与硬件接触最紧密的这些部分
因此 这就引出了两种截然不同的内核的设计方法 把所有的这些功能都包含在操作系统内核当中的
这种结构就叫做大内核 而如果内核当中只保留与硬件关系最紧密的这些部分
那么这种内核就叫做微内核 那我们需要注意的是 如果采用的是微内核的这种结构的话
那么 属于内核的这些功能是需要运行在内核态的 而不属于内核的上面的这些功能就需要运行在用户态
这会对我们系统的性能造成一定的影响 那我们用更直观的例子来体会这一点
那假设现在有两种体系结构的系统 第一个系统 它采用的是大内核的体系结构
那么 由于进程管理 存储管理等等这些这些功能都是被划分在内核当中的 所以这些功能的处理都需要运行在内核态
而只有应用程序是运行在用户台的 而对于采用微内核结构的操作系统来说
只有和硬件联系最紧密的 这些功能被划分在了内核当中 只有这些功能是需要在内核太下才可以执行的
而其他的这些功能模块在用户态下就可以运行 那现在来看这样一个故事
假设现在这个应用程序想要请求操作系统的服务 并且这个服务的背后需要同时涉及到进程管理 存储管理 设备管理这几个功能
如果采用的是大内核的体系结构的话 那么应用程序向操作系统提出服务的请求
这个时候 cpu会从用户他切换为核心态 然后开始运行这一系列的内核程序
而如果采用的是v内核的体系结构的话 应用程序向操作系统提出服务的请求
接下来 操作系统的这几个模块都需要为应用程序服务 而进程管理这个模块 在处理应用程序的请求的时候 他同样也需要得到内核的支持 所以这个模块对内核的访问就涉及到了
cpu从用户态转到内核态 服务完成了之后又会从内核态再转回用户态
然后 同样的存储管理和设备管理这两个模块 他们也在完成相应的工作的时候 同样也需要得到内核的支持 因此每一个模块都需要请求内核的服务
那每一次请求内核的服务都会涉及到一个cpu状态转换的过程 因此 如果我们采用的是大内核的
体系结构的话 那么应用程序的这个请求只需要两次变态就可以了 这一次 这一次
而如果采用的是v内核的体系结构的话 那么整个过程的处理就需要有六次变态
这需要注意的是 这个cpu的状态转换 这个过程其实是有成本的 需要消耗不少的时间 因此频繁的切换cpu的状态是会降低系统性能的
对了 这个地方也需要强调一下 大家在考试的时候不要使用变态这个词 这个只是我们为了方便描述 然后使用的一种描述方式
大家在考试答题的时候需要写的正规一点 就是要说成是cpu状态的转换
好的 那么这个小姐 我们介绍的是操作系统的体系结构 分为大内核和微内核相 通过刚才例子相信大家也能够体会他们俩的
一个区别大内核的优点就是性能高 因为应用程序在请求内核服务的时候 这个变态的过程会比较少
而v内核的缺点呢是需要频繁的在核心态和用户态之间切换 所以它的性能会更低一些
不过 非内核的优点呢是 它的内核功能很少 所以结构清晰 方便程序员维护
而大内核 由于他们把很多很多功能都放在内核里 所以内核代码就会变得比较庞大 结构混乱 难以维护
这也不难理解 那典型的大内核操作系统 像linux unix这些都是大内核的
然后 微内核的操作系统的话 大家可以去看一下windows NT 当然这些并不是考试考察的重点 考试的时候只会考察
啊 这两种体系结构 它们的优缺点 大家只要能够有个印象就可以好的
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习