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

在这里插入图片描述

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

在这里插入图片描述

宏内核:大而全

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

特点

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

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

微内核:小而美

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

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

特点

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

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

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

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

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

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

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

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

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

总结

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试题-004】ArrayList 和 LinkList区别

ArrayList 和 LinkedList 都是 Java 中常用的动态数组实现,都实现了 List 接口,但它们在内部数据结构和性能方面有所不同: 内部数据结构: ArrayList 是基于动态数组的数据结构,它允许快速随机访问。数组的大小在创建时…

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载:pri…

【Self-Attention——Transform—Bert】相关的基础理论

1.Self-Attention模型图解 传统的循环神经网络,如上左图1,并不能解决并行化的问题,右图就是一个self-Attention可以实现并行化,并且能解决对于所有信息的读取利用。 将self—Attention替换相应的GRU或者RNN,就能实现从…

C#WPF数字大屏项目实战09--机器产量统计

1、区域布局 2、柱状图 Live chart 是一个跨平台的图表库 .Net,这是一个简单、灵活、交互式、强大的跨平台图表库,支持Maui、Uno Platform、Blazor-wasm、WPF、WinForms、Xamarin、Avalonia、WinUI、UWP。提供超过60多种图表类型,包括&#…

NumPy应用(一)

NumPy学习篇1 NumPy是一个强大的Python库,它提供了高效的多维数组对象和各种用于数组操作的函数。以下是NumPy学习大纲,详细介绍了NumPy的核心功能和概念。 1. NumPy 简介 NumPy是一个用于处理多维数组的Python库,它提供了一个强大的数组对…

【启程Golang之旅】从结构到接口揭秘Go的“面向对象”面纱

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

基于ssm校园自行车租赁系统-计算机毕业设计源码82064

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,学校当然也不例外。基于ssm的校园自行车租赁系统是以实际运用为开发背景,运用软件工程原理和开发方法&#…

《已解决》F12显示已在程序中暂停

首先打开F12-->源代码 最后一步:

C#WPF数字大屏项目实战08--生产量/良品统计

1、区域划分 生产量/良品统计这部分位于第二列的第二行 2、livechart拆线图 定义折线图,如下: <lvc:CartesianChart> <lvc:CartesianChart.Series> <!--设置Series的类型为 Line 类型, 该类型提供了一些折线图的实现--> <lvc:LineSeries/>…

【安装】VMware虚拟机安装windows操作系统,VM的相关操作

目录 引出报错&#xff1a;press any key to boot form cd激活调整显示 在VMware上新建虚拟机&#xff0c;并安装Windows1、新建虚拟机2、装载 ISO 镜像3、安装Windows server 20164、开机初始化 虚拟机操作1、虚拟机基本操作2、虚拟机快照3、虚拟机克隆4、VMware Tools 总结 引…

vue-标签选择

效果 选中后 代码 <span :class"[item.bealtrue?p_yx_span span_active :span p_yx]" click"onTagSelect(index)" v-for"(item,index) in tagList" :key"index" >{{item.name}} </span> // 列表值 tagList:[ {id: 1, na…

设计模式(九)结构型模式---外观模式

文章目录 外观模式简介结构优缺点UML图具体实现UML图代码实现 外观模式简介 外观模式 &#xff08;Facade Pattern&#xff09;也叫门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。MyBatis的Configurat…

Java利用POI绘制表格

前提需求 最近公司要求写一些记录的表格&#xff0c;并且带有导出功能。再深入学习后&#xff0c;表格的底层其实就是list遍历塞值&#xff0c;导出功能的话可以由前端&#xff0c;后端实现&#xff0c;但技多不压身嘛&#xff0c;这里我自己就写了后端的导出功能&#xff0c;…

【固定资产管理】软件系统建设方案体系文档(Word原件)

固定资产管理系统解决方案 1系统概述 1.1需求描述 1.2需求分析 1.3重难点分析 1.4重难点解决措施 2系统架构设计 2.1系统架构图 2.2关键技术 3系统功能设计 3.1功能清单列表 3.2资产采购 3.3资产验收 3.4资产入库 3.5资产领用 3.6资产出库 3.7资产维修 3.8资产…

【ARM-Linux篇】内核编译

一、Linux内核的主要功能 Linux内核的主要功能&#xff1a;进程管理、内存管理、驱动、系统调用 Linux操作系统框架 二、Linux内核编译流程 方法一&#xff1a; 1. 运行 build.sh 脚本&#xff0c; 记得加 sudo 权限 gyjgyj-virtual-machine:~/orangepi-build$ sudo ./buil…

如何跨渠道分析销售数据 - 7年制造业销售经验小结

如何跨渠道分析销售数据 - 7年制造业销售经验小结&#xff08;1&#xff09; 【前言】 在我过去7年销售工作生涯中&#xff0c;从第一年成为公司销冠后&#xff0c;我当时的确自满的一段时间&#xff0c;认为自己很了不起。但是第一年的销售业绩并没有拿到提成&#xff0c;最…

图解DSPy:Prompt的时代终结者?!

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba&#xff0c;xLSTM,KAN&#xff09;则提供了大模…

OpenCASCADE开发指南<十四>:OCCT建模类之BRepPrimAPI_MakePipe创建管道

1、OpenCasCade拓扑几何 在Open CASCADE Technology (OCCT) 中,除了基本三维几何体建模类BRepBuilderAPI外,还提供了复杂模型的建模类,常用的有如下几种,他们可以单独使用或相互组合,通过OCCT提供的融合函数进行组装。例如:BRepOffsetAPI_ThruSections、BRepOffsetAPI_Ma…

Quick BI中lod_fixed函数数据计算过程解析

一、lod_fixed函数简介 lod_fixed{[声明维度1][,声明维度2]…&#xff1a;聚合表达式[:过滤条件]} [维度1][,维度2]...&#xff1a;声明维度&#xff0c;一方面如果外部筛选字段若不属于这里的声明维度则无效&#xff0c;另一方面这里声明的维度也内部聚合运算时的分组依据。使…

明日周刊-第12期

以前小时候最期待六一儿童节了&#xff0c;父母总会给你满足一个愿望&#xff0c;也许是一件礼物也许是一次陪伴。然而这个世界上其实还有很多儿童过不上儿童节&#xff0c;比如某些地区的小孩子&#xff0c;他们更担心的是能不能见到明天的太阳。 文章目录 一周热点航天探索火…