微内核、宏内核、混合内核,三者到底有什么区别?

最近几年,随着国内大厂纷纷发布自研操作系统,大家对这些操作系统的出身和相貌吵得不可开交。然而,本文并不打算陷入这种无尽的争论之中。

在计算机技术的发展历程中,所有的技术都是在不断的迭代和发展中形成的,无论是基于商业还是技术考虑,参考已有的成熟方案是非常自然的选择。

今天,我要分享的是操作系统内核的基本知识,主要是微内核、宏内核和混合内核的概念。

什么是操作系统内核?

操作系统内核,你可以把它想象成一个繁忙城市的交通指挥系统。就如同交通指挥系统管理着城市的道路、桥梁和交通信号灯,以确保交通顺畅,内核同样管理着计算机的各种硬件资源,如处理器、内存、硬盘等,以保障操作系统的正常运行。而当我们谈到进程管理和文件系统管理时,这就像是交通指挥系统要确保各个方向的车辆能按照规定的路线行驶,防止交通混乱。总的来说,内核就像是交通指挥系统的角色,它在幕后默默工作,确保计算机的硬件资源能有序、高效、安全地服务于各种上层应用程序。

举几个例子:

  1. 内存管理:内存管理是操作系统内核的一项基本任务。当你打开一个应用程序,比如浏览器,操作系统内核会分配一定的内存给它,这就像是给浏览器一个工作台,它可以在这个工作台上放置需要的数据和工具。当你关闭这个应用程序时,操作系统内核会回收这部分内存,就像是清理掉工作台,然后这个工作台又可以分给其他程序使用。通过内存管理,程序就可以有序的使用内存,而如果让程序各自相互协调,程序越多,沟通成本越高,还容易发生混乱。
  2. 网络通信:当你在浏览器中输入一个网址,比如 www.google.com,按下回车键后,浏览器就会向操作系统内核发出一个请求,要求连接到这个网址。操作系统内核会通过网络协议栈(主要就是TCP/IP协议处理程序),处理这个请求,然后通过网络接口,比如以太网卡或者WiFi适配器,发送出去。当接收到来自远程服务器的响应时,操作系统内核会把数据再传递给浏览器,然后浏览器就可以把网页显示出来了。如此,上层应用就不需要关心数据在网络中是怎么传输的,只需要调用操作系统提供的网络API就可以完成网络数据请求。
  3. 文件读写:比如在Windows系统中,当你使用“记事本”打开一个文件,比如一个.txt文件,“记事本”会向操作系统内核发出一个请求,要求读取这个文件的内容。操作系统内核会通过文件系统,找到这个文件在硬盘上的位置,然后把数据读取到内存中,再传递给“记事本”。当你在“记事本”中修改了文件,然后保存时,“记事本”会向操作系统内核发出一个请求,要求把修改后的内容写入到文件中,操作系统内核会把数据写入到硬盘上的相应位置。如果操作系统内核发现当前的用户没有访问这个文件的权限,内核就会向应用程序报错。

内核分类

宏内核

宏内核是大而全的管理者。

宏内核,也被称为单体内核,是一种把所有的服务都集中在一起的内核设计。它的优点是性能高,因为所有服务都在内核中运行,调用过程简单,效率高。但是,这种设计也有缺点,如果内核中的一个服务出现问题,可能会影响到整个系统的稳定性。

就像一个城市的交通系统,所有的道路、桥梁、交通信号灯都是由一个中央指挥系统控制。这种方式的优点是效率高,因为所有的交通运输都在同一个系统内部进行调度,所以调度速度快,交通流畅。然而,缺点也很明显,如果中央指挥系统出现问题,那么整个城市的交通都可能会受到影响,导致严重的交通拥堵。

宏内核的代表有Unix,Linux等。

微内核

微内核是小而美的服务商。

微内核,只提供最基本的服务,如进程调度、内存管理等,其他的服务,如文件系统、网络协议等,都在内核之外的用户空间中运行。这种设计的优点是结构简单,容易理解和修改,如果一个服务出现问题,也不会影响到其他服务。但是,这种设计的缺点是性能较低,因为服务之间的调用需要在内核和用户空间之间进行切换,效率较低。

就像一个城市的交通系统中,只有最基本的道路和桥梁是由中央指挥系统控制,其他的如公交、出租车等都是由各自的调度系统进行管理。这种方式的优点是稳定性好,因为即使一个服务出现问题,也不会影响到其他的服务。然而,缺点是效率较低,因为服务之间的调度需要在内核和用户空间之间进行切换,这就像各个调度系统之间需要进行协调,导致交通运输的效率降低。

微内核的代表有Mach,据说鸿蒙也是微内核。

混合内核

混合内核是两全其美的选择。

混合内核,基于微内核的架构设计,把一些性能要求高的服务放在内核中,比如设备驱动、应用进程间通信等,而其他的服务则放在用户空间中。这种设计既有宏内核的性能优势,又有微内核的稳定性优势。但是,这种设计的缺点是复杂性高,需要仔细地选择哪些服务放在内核中,哪些服务放在用户空间中。

就像一个城市的交通系统中,主干道和桥梁是由中央指挥系统控制,同时核心的公交、地铁服务也放到了中央指挥系统中,但是其他的如出租车、网约车、私家车等则是由各自的调度系统进行管理。这种方式既有宏内核的性能优势,又有微内核的稳定性优势,就像主干道的畅通和公共交通工具的可用可以保证基本的交通需要,而其它的调度系统则可以灵活地调配资源,提高交通运输的效率。

混合内核的代表有Windows NT,XNU等。

比较

这里对它们做一个比较,主要关注两点:性能和安全性。

  • 性能上,宏内核最好,因为所有服务都在内核中,调用效率高;微内核最差,因为需要频繁地在内核和用户空间之间切换;混合内核介于两者之间。
  • 安全性上,微内核最好,因为各个服务相互独立,一个服务出问题不会影响到其他服务;宏内核最差,因为所有服务都在一起,一个服务出问题可能会导致整个系统崩溃;混合内核介于两者之间。

发展趋势

随着计算机技术的发展,操作系统内核也在不断进化。

在早期的计算机系统中,为了追求高性能,大多数操作系统都使用宏内核。

但是,随着系统的复杂性增加,宏内核的缺点也越来越明显,于是人们开始尝试微内核。

然而,微内核的性能问题也让人们头疼,于是混合内核应运而生。

未来的操作系统内核可能会向更高的性能和更好的稳定性发展,可能会出现全新的内核设计。


希望通过本文,大家对操作系统内核有了更深的理解,对计算机有了更全面的认识。

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

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

相关文章

软件测试|如何在 Python 中比较两个列表

简介 在Python中,比较两个列表是一个常见的任务,可以帮助你找出两个列表之间的差异、共同元素或其他关系。本文将详细介绍如何在Python中比较两个列表的不同方法,包括使用循环、集合操作和列表推导式等。 方法1:使用循环比较列表…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

生成式 AI 如何重塑软件开发流程和开发工具?

生成式AI正在重塑开发流程和开发工具,通过自动化和优化软件开发过程,提高开发效率和质量。它可以帮助开发人员快速生成代码、测试和部署应用程序,同时减少错误和缺陷。此外,生成式AI还可以帮助开发人员快速理解和解决复杂的技术问…

MySQL 5.7.35下载安装使用_忘记密码_远程授权

文章目录 MySQL 5.7.35下载安装使用_忘记密码_远程授权MySQL下载地址mysql安装点击安装,最好以管理员身份运行选择自定义安装选择64位勾选启动自定义产品执行点击同意点击下一步点击执行下一步配置数据库端口号设置登录密码,如果密码忘记,下面…

Fontfabric:一款字体与设计的完美结合

一、产品介绍 Fontfabric是一款由国际字体设计公司Fontfabric开发的字体设计软件。它提供了一整套完整的字体设计工具,让用户可以轻松地创建、设计和定制自己的字体。Fontfabric拥有丰富的字体库,包括各种风格和类型,能够满足用户在不同场景…

[linux]编译一个ko文件并运行

一、需求 有一段代码需要在运行时加载注入内核中&#xff0c;当用户层需要访问时可以提供内核态环境去运行。 二、c代码构建 // #include <errno.h> // #include <string.h> // #include <stdio.h> // #include <fcntl.h> // #include <stdlib.h…

Java中输入和输出处理(三)二进制篇

叮咚&#xff01;加油&#xff01;马上学完 读写二进制文件Data DataInputStream类 FilFeInputStream的子类 与FileInputStream类结合使用读取二进制文件 DataOutputStream类 FileOutputStream的子类 与FileOutputStream类结合使用写二进制文件 读写二进制代码 package 面…

盘活存量GPU资源 破局高校算力不足窘境

“凭啥做大模型的优先分配算力&#xff1f;人家1个人4块A800&#xff0c;我们10个人用2块3090&#xff01;这日子没法过了&#xff01;”听着团队成员们的吐槽&#xff0c;某国内顶尖高校非大模型团队带队的博士老W也颇为无奈&#xff1a;“我们虽然不是做大模型的&#xff0c;…

竞赛保研 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

Unity报错:[SteamVR] Not Initialized (109)的解决方法

问题描述 使用HTC vive 头像进行SteamVR插件的示例场景进行测试&#xff0c;发现头显场景无法跳转到运行场景&#xff08;Unity 项目可以运行&#xff0c;仅出现警告&#xff09;。 具体如下&#xff1a; [SteamVR] Not Initialized (109) [SteamVR] Initialization failed…

STL源码阅读总结从小白到大神:vector

一、vector概述 vector的数据格式与array非常相似&#xff0c;两者的差别在于空间的灵活运用&#xff0c;array是静态空间&#xff0c;一旦配置内存空间就不容易更改原来的空间大小。而vector是动态空间&#xff0c;随着元素的加入&#xff0c;它的内部机制就会自动扩容以容纳…

【算法】基础算法001之双指针

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.数组分块&#xf…

NACHI机器人模拟示教器如何切换中文

前言 现在开始学习机器人的编程语言&#xff0c;那么要学习会用首先得用模拟示教器来学习&#xff0c;但是全是英文确实比较难受一些些&#xff0c;没有中文来的直观。所以摸透一下如何给示教器更换语言。 具体步骤 步骤一&#xff1a;将中文的汉化包下载下来。具体的下载链…

JMeter 批量接口测试

一、背景 最近在进行某中台的接口测试准备&#xff0c;发现接口数量非常多&#xff0c;有6、70个&#xff0c;而且每个接口都有大量的参数并且需要进行各种参数验证来测试接口是否能够正确返回响应值。想了几种方案后&#xff0c;决定尝试使用JMeter的csv读取来实现批量的接口…

Window Docker安装

1.下载安装Docker 在Windows上安装Docker桌面_Docker中文网 (dockerdocs.cn)https://dockerdocs.cn/docker-for-windows/install/index.html2.安装完&#xff0c;修改镜像 Docker——Windows版本Docker安装_docker windows-CSDN博客https://blog.csdn.net/weixin_51351637/ar…

【软考中级-软件设计师】day7:图

概述 1-2道选择 图的存储 图的遍历 图的最小生成树 prim算法 kruscal算法 2135476 选7不选6是因为4的先删除&#xff08;vi必须在vj之前&#xff09;跟4有关的删了以后&#xff0c;入度为0的结点只剩下7&#xff0c;所以选7再6

13.若依代码自动生成功能详解

文章目录 1.代码自动生成功能2.功能的使用3. 代码的导出和使用 1.代码自动生成功能 基于若依的目录结构&#xff0c;若依本身提供了代码生成功能&#xff0c;可以根据数据库表的内容&#xff0c;生成一些基本的CRUD的前后端的功能。本文将生成过程中的一些注意事项&#xff0c…

【APACHE】的认识和基础配置参数

#主页传送:江南的江 #每日鸡汤&#xff1a;人生没有如果和假设&#xff0c;只有后果和结果。生活有进有退&#xff0c;输什么也不能输心情。生活简单就是迷人的&#xff0c;学会简单其实就是不简单。要学会平静地接受现实&#xff0c;学会对自己说声顺其自然&#xff0c;学会坦…

如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点

文章目录 前言1. 检查uhttpd安装2. 部署web站点3. 安装cpolar内网穿透4. 配置远程访问地址5. 配置固定远程地址 前言 uhttpd 是 OpenWrt/LuCI 开发者从零开始编写的 Web 服务器&#xff0c;目的是成为优秀稳定的、适合嵌入式设备的轻量级任务的 HTTP 服务器&#xff0c;并且和…

版本控制背景知识

版本控制背景知识 本文是关于 Git 系列文章的导读&#xff0c;我们先介绍一下版本控制的背景知识。 什么是版本控制 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。它将什么时候、什么人更改了文件的什么内容等信息如实记录下来…