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

news2024/11/19 15:34:03

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

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

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

什么是操作系统内核?

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

举几个例子:

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

内核分类

宏内核

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

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

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

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

微内核

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

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

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

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

混合内核

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

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

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

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

比较

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

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

发展趋势

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

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

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

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

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


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

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

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

相关文章

win10在启动游戏时报错,提示“d3dx9_25.dll文件丢失”,怎么办?d3dx9_25.dll丢失如何自动修复

一、d3dx9_25.dll文件是什么? d3dx9_25.dll是DirectX的一部分,DirectX是一种由微软开发的专门处理与多媒体、游戏程序和视频相关的应用程序接口。d3dx9_25.dll文件是DirectX9中一个重要的dll文件,主要负责处理3D图形程序,作用是帮…

python高校舆情分析系统+可视化+情感分析 舆情分析+Flask框架(源码+文档)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

图片双线性插值原理解析与代码 Python

一、原理解析 图片插值是图片操作中最常用的操作之一。为了详细解析其原理,本文以 33 图片插值到 55 图片为例进行解析。如上图左边蓝色方框是 55 的目标图片,右边红色方框是 33 的源图片。上图中,蓝/红色方框是图片,图片中的蓝/红…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时,我是用的是极狐官网推荐安装的步骤,具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

java通过okhttp方式实现https请求的工具类(绕过证书验证)

目录 一、引入依赖包二、okhttp方式实现的https请求工具类2.1、跳过证书配置类2.2、okhttp方式的 https工具类 三、测试类 一、引入依赖包 引入相关依赖包 <!--okhttp依赖包--> <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>…

书生·浦语大模型实战营-学习笔记2

目录 轻松玩转书生浦语大模型趣味Demo1. 大模型及 InternLM 模型介绍2. InternLM-Chat-7B 智能対话 Demo3. Lagent 智能体工具调用 Demo4. 浦语•灵笔图文创作理解 Demo5. 通用环境配置实验记录6. 课后作业 视频地址&#xff1a; (2)轻松玩转书生浦语大模型趣味Demo 文档教程&a…

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能&#xff1a;注册用户可已查看电影场次评价选座订票退票&#xff0c;影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序&#xff1a; https://www.bilibili.com/video/BV11W4y1A7mK/?shar…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换&#xff0c;注意括号2.宏的优缺点 优点&#xff1a; 1.增强代码的复用性 2.宏函数不用建立栈帧&#xff0c;提高性能 缺点&#xff1a; 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…

一起学习python类的属性装饰器@property

之前文章我们介绍了class的一些通用功能&#xff0c;比如类属性/类方法/实例属性/实例方法等&#xff0c;之前的属性可以直接修改和访问&#xff08;设置私有属性&#xff0c;不能直接访问,可通过对象名._[类名][属性名]的方式访问&#xff09;&#xff0c;没有一些权限的控制逻…

Linux第24步_安装windows下的VisualStudioCode软件

Visual Stuio Code是一个编辑器&#xff0c;简称 为 VSCode&#xff0c;它是微软出的一款免费编辑器。 VSCode有 Windows、 Linux和 macOS三个版本的&#xff0c;是一个跨平台的编辑器。VSCodeUserSetup-x64-1.50.1是Windows系统中的VSCode软件&#xff0c;而“code_1.50.1-160…

大创项目推荐 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

212. 单词搜索 II(字典树的另一种类型)

大致思路是&#xff1a; 根据words列表建立字典树&#xff0c;其中注意在单词末尾&#xff0c;将原来的isEnd变量换成存储这个单词的变量&#xff0c;方便存储到ans中&#xff0c;另外&#xff0c;字典树的字节点由原来的Trie数组变为hashmap&#xff0c;方便检索字母。 建立…

React之自定义路由组件

开篇 react router功能很强大&#xff0c;可以根据路径配置对应容器组件。做到组件的局部刷新&#xff0c;接下来我会基于react实现一个简单的路由组件。 代码 自定义路由组件 import {useEffect, useState} from "react"; import React from react // 路由配置 e…

(超详细)4-YOLOV5改进-添加ShuffleAttention注意力机制

1、在yolov5/models下面新建一个SE.py文件&#xff0c;在里面放入下面的代码 代码如下&#xff1a; import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def __…

软件测试|使用Python打印五子棋棋盘

简介 五子棋是我们传统的益智类游戏&#xff0c;在制作五子棋时&#xff0c;我们需要先将棋盘打印出来&#xff0c;本文就来介绍一下使用Python打印五子棋棋盘。 步骤一&#xff1a;打印空棋盘 首先&#xff0c;我们需要在Python中定义一个棋盘函数&#xff0c;该函数将打印…

Confluence跨大版本升级记录

初始版本7.4.18最终升级到了目前的最新版本8.7.1&#xff0c;在升级过程中遇到了很多问题&#xff0c;庆幸的是最后都解决了&#xff0c;记录一下。 背景 初始环境&#xff1a; OS&#xff1a;CentOS8.5 DB&#xff1a;10.8.8-MariaDB Confluence&#xff1a;7.4.18 公司…

数据驱动下的LLM优化:如何从数据集中发掘最大价值?

来源&#xff0c;公众号&#xff1a;芝士AI吃鱼 本文聚焦于通过使用精心策划的数据集对LLM进行微调&#xff0c;以提升其建模性能。具体来说&#xff0c;本文强调了涉及修改、使用或操纵数据集进行基于指令的微调的策略&#xff0c;而不是改变模型架构或训练算法。本文还将解释…

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

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

【LeetCode:200. 岛屿数量 | DFS 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

JavaEE中的Controller的每一个Handler如何确定返回值与形参?

在JavaEE中&#xff0c;特别是在基于Spring框架的JavaEE应用中&#xff0c;Controller是用来处理HTTP请求的组件。Controller中的每一个Handler方法都是负责处理特定的请求&#xff0c;并确定返回值与形参。以下是一般情况下的Handler方法的确定返回值与形参的详细说明&#xf…