操作系统的体系结构:宏内核和微内核

在这里插入图片描述

操作系统的体系结构是一个开放的问题。操作系统在核心态为应用程序提供公共的服务,那么操作系统在核心态应该提供什么服务、怎样提供服务?有关这个问题的回答形成了两种主要的体系结构:宏内核和微内核

在这里插入图片描述

宏内核:大而全

宏内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。
在这里插入图片描述

特点

  • 性能优越:由于宏内核的各个功能模块直接运行在核心态,因此它们之间的通信和调度开销较小,可以获得较高的性能。
  • 简单高效:宏内核的设计相对简单,模块之间的交互直接,易于实现和调试。
  • 扩展性差:由于所有模块都运行在核心态,因此新功能的引入或修改需要对整个内核进行修改和重新编译,扩展性较差。

但随着体系结构和应用需求的不断发展,需要操作系统提供的服务越来越多,而且接口形式越来越复杂,操作系统的设计规模也急剧增长,操作系统也面临着“软件危机”困境。为此,操作系统设计人员试图按照复杂性、时间常数、抽象级别等因素,将操作系统内核分成基本进程管理、虚存、I/O与设备管理、IPC、文件系统等几个层次,继而定义层次之间的服务结构,提高操作系统内核设计上的模块化。但是由于层次之间的交互关系错综复杂,定义清晰的层次间接口非常困难,复杂的交互关系也使得层次之间的界限极其模糊。

微内核:小而美

为解决操作系统的内核代码难以维护的问题,于是提出了微内核的体系结构。它将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。而那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。

微内核结构有效地分离了内核与服务、服务与服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可以独立地优化和演进,从而保证了操作系统的可靠性。微内核结构的最大问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销偏大。因此有的操作系统将那些频繁使用的系统服务又移回内核,从而保证系统性能。但是有相当多的实验数据表明,体系结构不是引起性能下降的主要因素,体系结构带来的性能提升足以弥补切换开销带来的缺陷。为减少切换开销,也有人提出将系统服务作为运行库链接到用户程序的一种解决方案,这样的体系结构称为库操作系统。

特点

  • 模块化:微内核将操作系统的功能划分为不同的服务,每个服务运行在用户态,通过消息传递等方式实现模块间的通信,使得内核本身非常精简。
  • 扩展性高:由于微内核的设计更加模块化,因此内核的扩展和修改相对容易,可以根据需要添加新的服务或者替换现有的服务。
  • 性能开销大:由于模块间的通信和调度需要在用户态和内核态之间切换,因此微内核的性能通常比宏内核略低。

Linux 借鉴了微内核精髓的宏内核结构

经过上面这些描述之后,我们很容易把宏内核和微内核的特征想象成软件开发中的单体架构和微服务架构。单体架构最大的特点就是函数调用方便,不需要借助额外的通信机制。而微服务的架构之间的调用链路会比较长,可拓展性比较强。这两种不同的内核结构有不同的支持者,就和有些人认为单体架构好,有些人认为微服务架构模式好。

这就像对编程语言的争论一样,你说 Python 、Go、Java 以及其他语言哪个好?管他哪个好,最终都会戏谑的称 PHP 是这个世界上最好的语言。所以,这些争论本没有意义,但是很有趣的是,这种争论常常让人想起前几年在 CPU 领域中 RISC 和 CISC 之间的斗争。

现代成功的 CPU 设计包括这两种技术中的任何一种,就像 Linux 内核是微内核和宏内核的混合产品一样。可能有些人认为 Linux 它不就是个宏内核结构么,但实际上 Linux 不单单只是一个纯碎的集成内核。

Linux 是一个借鉴了微内核精髓的宏内核结构,Linux 支持模块化的设计、抢占式内核、对内核线程的支持以及动态加载内核模块的能力。不仅如此,Linux 还避免了其微内核设计的性能损失,允许一切运行在内核模式下,直接调用函数,无需消息传递。

所以综合一点来讲,Linux 是一个模块化、多线程和内核可调度的操作系统。

  • 模块化的设计:Linux 支持内核模块的动态加载,尽管 Linux 内核也是单核,但它允许在需要时动态删除和加载一些内核代码。

  • 可抢占性:Linux 内核支持可抢占

总结

宏内核和微内核各有其优劣势,适用于不同的应用场景和需求。宏内核适用于对性能要求较高、需求稳定的系统,而微内核适用于对灵活性和可维护性要求较高的系统。在实际应用中,选择合适的内核架构需要根据具体的系统需求、性能要求和可维护性等方面进行综合考量。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024蓝桥杯国赛C++研究生组游记+个人题解

Day0 开始复习,过了一遍大部分板子 本来打算再学一遍SAM,但是想到去年考了字符串大题今年应该不会再考了吧。。 过了一遍数据结构和图论,就1点了 两点的时候还没睡着,舍友打游戏好像打到2点过。。 Day1 相当困 第一题&…

word里面没有Acrobat选项

加载项被禁止,选择项里面,没有Acrobat选项 文件-》选项 加载项-》com加载项-》转到 添加Acrobat 出现Acrobat选项

[Qt]关于QListWidget、QScrollArea 为什么在QDesigner上设置了之后界面上仍然不生效的问题

前言 最近做了一些有关QListWidget和QScrollArea的控件,我去,这两个控件是真的坑,明明我在QDesigner的操作界面上对这两个控件的界面进行了修改,但是编译出来的软件就是看上去什么都没有,很坑,Gpt也没解决…

【linux】宝塔,首页挂载磁盘,显示使用情况

挂载前: 挂载后: 数据无价,建议:备份需要挂载的磁盘,或者使用新磁盘来进行操作。 1、下载自动挂载磁盘的脚本: wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh 2、给脚本添加执行权限&a…

Re0:从零开始的C++游戏开发 【下】

Re0:从零开始的C游戏开发 (下) 这是蒟蒻观看B站upVoidmatrix的课程从零开始的提瓦特幸存者的个人笔记【自用】 前言:采用适用于小白的easyx图形库。 第三集 提瓦特の幸存者(下) 3.1 用户界面实现和设计模式基础 3…

省级交通运输行政执法综合管理平台项目实施方案

背景 党的十八届四中全会提出全面推进依法治国的总目标和重大任务。全会通过的《中共中央关于全面推进依法治国若干重大问题的决定》,开启了中国法治建设的新时代,依法治国已经成为党领导人民治理国家的基本方略。 为了贯彻和落实《交通运输信息化“十三…

资深人士称:AI开发游戏会降低游戏成本和体验,不会降低就业率

易采游戏网6月1日最新消息:本周在TD Cowen会议上,R星的母公司Take-Two的CEO Strauss Zelnick对于人工智能(AI)是否会影响游戏开发行业表达了自己的看法。他坚定地认为,AI绝对会改变游戏的制作方式,但不会降低游戏行业的就业水平。…

Maven打包错误:无效的源发行版:17

1. 报错问题 在用maven进行打包时(clean & install),报如下错误: 一开始让我很摸不着头脑,我确定我的pom.xml,还有IDEA中的Project Settings是正确的。 2. 排查 尽管确定,但还是一个个排…

秒杀基本功能开发(显示商品列表和商品详情)

文章目录 1.数据库表设计1.商品表2.秒杀商品表3.修改一下秒杀时间为今天到明天 2.pojo和vo编写1.com/sxs/seckill/pojo/Goods.java2.com/sxs/seckill/pojo/SeckillGoods.java3.com/sxs/seckill/vo/GoodsVo.java 3.Mapper编写1.GoodsMapper.java2.GoodsMapper.xml3.分别编写Seck…

在浏览器里面输入 url,到浏览器显示页面中间发生了什么?

当用户在浏览器中输入URL(例如https://www.example.com)按下回车键,到浏览器显示页面,这中间浏览器会执行以下步骤: 浏览器解析URL:浏览器解析URL,提取出协议(如HTTP或HTTPS&#xf…

每天一个数据分析题(三百四十二)

根据量化对象是业务行为结果还是财务行为结果,可以将指标分为业务指标及财务指标两大类,以下说法正确的是? A. 财务指标是按照财务规则来对财务情况进行量化的指标 B. 业务指标是按照业务规则来对业务情况进行量化的指标 C. 业务指标需要按…

VS(visual studio)搭建QT开发环境插件安装

优先安装QT Qt6 官网QtCreator 下载与安装方法win10_qt6下载-CSDN博客 如果安装vs2019,打开installer,安装c环境 选择c 下载vsix后,双击安装即可。 插件下载: Index of /qtproject/official_releases/vsaddin/ 创建QT项目: 创建完成&…

4K高刷显示器 - 蚂蚁电竞ANT27VU

可以毫不夸张地说,每一局游戏最终能够取得胜利,实际上都与一套极为优秀的电竞 PC 有着紧密的关联,因为其能够提供强大的性能支持与流畅的体验。同样的道理,一套优秀的电竞 PC 若想发挥出最佳的效果,那也都离不开一台能…

leetCode-hot100-数组专题之求和+数学定理+其他

数组专题之求和数学定理其他 求和1.两数之和15.三数之和 数学定理169.多数元素 其他4.寻找两个正序数组的中位数128.最长连续序列 求和 数组求和问题,即计算数组中所有元素的总和,是编程中常见的任务。以下是一些常用的解决方法: 1. 循环遍历…

介绍一下js的节流与防抖

在JavaScript中,节流(Throttling)和防抖(Debouncing)是两种常用的优化高频率触发事件的策略。它们主要用于限制函数的执行频率,以避免因频繁触发导致的性能问题。 1. 防抖(Debouncing&#xff…

numpy.ndarray是什么类型

numpy.ndarray是什么类型 numpy.ndarray 类型的特点创建 numpy.ndarray示例代码总结 numpy.ndarray是什么类型 numpy.ndarray 是 NumPy 库中的一个核心数据类型,用于表示多维数组。它是 NumPy 中最重要的数据结构之一,提供了高效的数值计算能力。下面是对…

PPP与HDLC的异同

PPP(点对点协议)与HDLC(高级数据链路控制)都是数据链路层协议,用于在两点间提供可靠的通信链接,但它们在设计目标、应用场景、功能特性等方面存在一些显著的异同: 相同点: 目的相似…

nn.Embedding使用

nn.Embedding使用 Embedding.weight会从标准正态分布中初始化成大小为(num_embeddings, embedding_dim)的矩阵 PE矩阵的作用就是替换这个标准正态分布 input中的标号表示从矩阵对应行获取权重来表示单词 # 1.设置embedding结构 max_seq_len 1000 # 句…

配合busco训练Augustus

使用BUSCO的结果来训练Augustus包括以下几个步骤。这些步骤会帮助你利用BUSCO评估的高质量基因来优化Augustus的基因预测模型。 步骤1:运行BUSCO 首先,你需要运行BUSCO来评估你的基因组或转录组。BUSCO会生成一些包含高质量单拷贝直系同源基因的信息文件…

【Java】面向对象的三大特征:封装、继承、多态

封装 什么叫封装? 在我们写代码的时候经常会涉及两种角色: 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了,这样就降低了类使用者的学习和使用成本&a…