认识 微内核架构

news2024/11/19 5:51:03

微内核架构

1 说明背景

在这里插入图片描述
关于宏内核、微内核、混合内核,都是相对而言的概念。

  • 宏内核: 通用的操作系统,将操作系统内核的所有模块放置在内核态运行,具备直接操作硬件的能力。例如 UNIX/Linux, FreeBSD 等
  • 微内核: 简单的操作系统,将单个功能或模块从宏内核中解耦放置到用户态运行,内核态保留核心的 IPC 功能。例如 Harmony/Mach/QNX/MINIX/L4/seL4/Zircon 等
  • 混合内核: 宏内核和微内核混合的内核。例如 Windows/Macos/RT-thread Smart 等

2 微内核架构

2.1 基本信息

  • 设计: 最小化、模块化、可扩展性、确定性、安全性
  • 机制: Basic IPC、Virtual Memory、Scheduing
  • 优点: 灵活、移植、可靠、安全
  • 缺点: 性能较差、生态缺陷
  • 应用: 弹性扩展能力、硬件异构性、功能安全、信息安全、确定性时延
  • 系统: L4、MINIX、seL4、Zircon 等

2.2 IPC 模型

seL4 系统的 IPC 模型实现机制: send process、endpoint、recv process
在这里插入图片描述

  • 寄存器传递: 通过栈和寄存器
    • 数据流通过 seL4_send - sendIPC - register - recvIPC - seL4_recv
    • 控制流通过 seL4_send - sendIPC - wake - scheduler - wake - recvIPC - seL4_recv
  • 共享内存传递: 通过共享内存
    • 数据流通过 seL4_send - sendIPC - endpoint - recvIPC - seL4_recv
    • 控制流通过 seL4_send - sendIPC - wake - scheduler - wake - recvIPC - seL4_recv

2.2 IPC 优化

  • FastPath: 用户态调用到内核态,原先线程唤醒的环节需要通过调度器,该优化让线程在内核态不经过调度器切换到目标线程的上下文。
  • SkyBridge: 原先不同进程间通信需要进出内核态,该优化让进程直接在用户态调用另一个进程的代码段。

3 收集问答

QA001: 微内核需要体系结构的特殊支持吗?
HINZER:微内核是一个OS,需要体系结构的特殊支持吗?比如,它能在 X86 上运行吗?它能在 ARM 上运行吗?它能在 RISC-V 上运行吗?
ChatGPT:微内核是一种操作系统架构,它将系统内核设计为最小化,并将更多的功能转移到用户空间中的服务进程上。在这种架构下,微内核本身并不需要特定的体系结构支持,它可以在多种不同的体系结构上运行,包括 x86、ARM 和 RISC-V 等。

QA002: 微内核的设计原则一般有哪些?
HINZER:微内核的设计原则一般有哪些?
ChatGPT:
- 最小化:微内核本身应该尽可能小,只包含最基础的功能,其他功能应该转移到用户空间中的服务进程中实现。
- 模块化:微内核的各个部分应该分离,以便于更方便的维护和扩展。
- 可扩展性:微内核应该具有良好的可扩展性,以便于满足不同用户的需求。
- 确定性:微内核的执行应该具有可预测性,以便于更好地控制系统的安全性和性能。
- 安全性:微内核应该具有良好的安全性,以便于保护系统免受恶意攻击。

QA003: 微内核的通用实现机制有哪些?
HINZER:微内核 seL4 的实现机制有哪些?
ChatGPT:seL4 是一个微内核,它的实现主要基于两种机制:类型安全性和内存保护。类型安全性意味着系统只允许在编译时执行的操作,并且内存保护机制确保每个程序只能访问其被授权的内存区域。这两种机制的结合使 seL4 成为一个高度安全和可信的微内核。

QA004: 微内核系统中用户层能管理硬件吗?
HINZER:微内核似乎是将宏内核中子系统和驱动程序的实现放到用户层实现,这意味用户层的进程直接管理硬件吗?如果这样做,如何保证安全的呢?
ChatGPT:微内核架构提倡将内核中的部分子系统和驱动程序的实现移到用户空间来执行。这种做法的目的是为了让内核的代码尽可能的小,从而使内核更容易维护和开发。用户空间的进程可以直接管理硬件资源,但是需要通过一定的机制来保证安全。例如,用户空间的进程可以通过系统调用来请求内核对硬件资源进行管理,内核会在满足一定的安全条件后才会执行该请求。这样可以防止用户空间的进程绕过安全机制来不当地访问硬件资源。

QA005: 有哪些服务必须要在内核层实现,为什么呢?
HINZER:微内核有哪些服务必须要在内核层实现,为什么呢?
ChatGPT:微内核的服务通常需要在内核层实现,因为它们是系统的核心功能,对于系统的安全和可靠性至关重要。例如,内存管理、进程管理、设备驱动程序和网络协议栈通常都是由内核实现的。这些服务在用户空间中实现可能会导致安全漏洞或系统故障,因此必须在内核层进行实现。

QA006: 绕过内核,还有其他什么较好的方式?
HINZER:微内核的ipc问题可以采用栈和寄存器传递参数和上下文给对方,绕过内核,还有其他什么较好的方式?
ChatGPT:还有一种常见的方法是通过内存映射来传递参数和上下文。在这种情况下,发送方将所有需要传递的信息拷贝到一个共享的内存区域,然后告诉接收方该内存区域的地址。接收方通过将该内存区域映射到它的地址空间来访问信息。这种方法可以在系统调用期间避免使用栈和寄存器,从而减少上下文切换的次数,提高系统性能。

QA007: ISR 有什么好的优化方式或者设计方式?
HINZER:微内核的ISR有什么好的优化方式或者设计方式?
ChatGPT:一种常见的优化方式是采用分时多任务的方式来实现 ISR。在这种情况下,内核会为每个 ISR 分配一个独立的任务,并在中断触发时启动该任务进行处理。这种方法可以让 ISR 在不影响其他任务的情况下运行,提高系统的实时性。另一种常见的优化方式是采用预先分配内存的方式来管理 ISR 中的数据。在这种情况下,内核会为每个 ISR 预先分配一块内存,在 ISR 触发时直接使用该内存来存储数据,避免在 ISR 运行时申请内存带来的性能损耗。

QA008: 微内核可以结合虚拟化技术吗?
HINZER:微内核结合虚拟化技术有什么用呢?
ChatGPT:微内核可以结合虚拟化技术来实现虚拟机。在这种情况下,微内核会作为虚拟机管理程序的一部分,负责管理虚拟机之间的内存和设备资源,保证每个虚拟机只能访问其被授权的内存和设备。这种方式可以有效利用微内核的安全性和可信性特点,提高虚拟机的安全性和隔离性,使得多个虚拟机可以在同一台物理机上安全地运行。

QA009: 混合内核是否能同时发挥微内核/宏内核的优点?
HINZER:采取混合内核是否能兼顾二者的优点?或者基于微内核兼顾宏内核,是否能同时发挥二者的优点?
ChatGPT:采用混合内核的方式可以在一定程度上兼顾二者的优点,但也存在一些局限性。混合内核通常是将宏内核的部分功能和微内核的部分功能结合起来,形成一种新的内核架构。这种架构可以在一定程度上兼顾宏内核的性能和微内核的安全性,但它也会增加内核的复杂度和代码量,导致更多的安全隐患和系统故障。因此,在实际应用中,需要权衡二者的优缺点,选择最适合的内核架构方案。

QA010: 是否可以根据不同场景构建相应的通信原则?
HINZER:微内核为人诟病的性能问题,是否可以根据不同场景构建相应的通信原则?
ChatGPT:微内核的性能问题主要是由于其内核与用户空间之间的频繁通信所造成的。为了解决这个问题,可以根据不同场景构建相应的通信原则,以减少内核与用户空间之间的通信频率。例如,在系统调用过程中,可以通过内存映射的方式传递参数和上下文,避免使用栈和寄存器,减少内核与用户空间之间的切换。此外,在 ISR 的处理过程中,可以采用预先分配内存的方式,避免在 ISR 运行时申请内存,降低内核与用户空间之间的通信频率。通过这些措施,可以有效提高微内核的性能。

References

  • 微内核IPC性能浅析 | 阅码场
  • 微内核十问 | 阅码场
  • 《现代操作系统:原理与实现》

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

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

相关文章

深度学习训练营之海贼王人物识别

深度学习训练营之海贼王人物识别原文链接环境介绍前置工作设置GPU导入数据数据查看数据预处理加载数据可视化数据检查数据配置数据集prefetch()功能详细介绍:归一化查看归一化后的数据构建VGG-16网络网络结构编译模型训练结果可视化原文链接 🍨 本文为&a…

ELK集群部署---ElasticSearch集群的部署

1. 环境规划: 主机名IP地址角色node1192.168.56.111 ElasticSearch(master) Zookeeper Kafka node2192.168.56.112 ElasticSearch(slave) Kibana Zookeeper Kafka node3192.168.56.113 ElasticSearch(slave) Zookeeper Kafka node4192.168.56.114 Logstash Filebe…

4. Json数据传递与接收

由于Json数据传递与接收在以后的开发中是主流&#xff0c;所以把它拿出来独立记一篇笔记&#xff0c;其他的笔记太庞杂了。 1. json数据参数传递实现步骤 1.1 添加json数据转换相关坐标 <dependency><groupId>com.fasterxml.jackson.core</groupId><ar…

HBCPC2022-河北省大学生程序设计竞赛

部分题解7-4 键盘故障7-6 筷子7-8 方7-9 优美的字符串7-4 键盘故障 签到题&#xff0c;直接遍历字符串&#xff0c;相同则跳过&#xff0c;不相同则输出 题目链接&#xff1a;https://pintia.cn/problem-sets/1584003400735793152/exam/problems/1584003481883000835 AC代码&a…

业聚医疗在港交所上市:市值约76亿港元,钱永勋、刘桂祯夫妇控股

12月23日&#xff0c;业聚医疗集团控股有限公司&#xff08;下称“业聚医疗”&#xff0c;HK:06929&#xff09;在港交所上市。本次上市&#xff0c;业聚医疗的发行价为8.80港元/股&#xff0c;全球发行发售5463.30万股&#xff0c;募集资金总额约为4.81亿港元&#xff0c;募资…

java基于ssm,jsp鞋城源码卖鞋服装男鞋商城女鞋商城项目源码

ssm开发的网上鞋城系统&#xff0c;主要有商品分类&#xff0c;列表&#xff0c;详情&#xff0c;加入购物车&#xff0c;订单&#xff0c;收货地址等功能&#xff0c;单商家登录后台可以发布商品&#xff0c;上下架商品&#xff0c;发货退款等管理订单。 演示视频&#xff1a;…

【开源项目】历史数据迁移

历史数据迁移 项目地址&#xff1a;https://gitee.com/xl-echo/dataMigration 历史迁移解决方案。微服务的架构为基础&#xff0c;使用多种设计模式&#xff0c;如&#xff1a;单利、桥接、工厂、模板、策略等。其中涉及的核心技术有&#xff0c;多线程、过滤器等。致力于解决…

django 中间件基础介绍

1、简单的理解&#xff0c;1个中间件就是1个类&#xff0c;中间件一般可以用来检查用户是否登录。 2、用户通过浏览器访问视图函数的内容需要先通过中间件&#xff0c;通过中间件后再到视图函数&#xff0c;返回结果也需要通过中间件&#xff0c;如下草图 3、自定义一个中间件…

一文读懂Linux内核处理器架构中的栈

栈是什么&#xff1f;栈有什么作用&#xff1f; 首先&#xff0c;栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out)&#xff0c;数据只能在串列的一端 (称为&#xff1a;栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据…

基于CNN卷积神经网络 猫狗图像识别

目录 一&#xff1a;数据集准备 二&#xff1a;读取自己的数据集 三&#xff1a;搭建网络 训练模型 四&#xff1a;猫狗图像识别 一&#xff1a;数据集准备 从官网下载比较麻烦&#xff0c;可根据以下链接&#xff0c;从百度网盘获取数据集 https://pan.baidu.com/s/13hw4L…

【Docker系列】容器环境配置

个人名片&#xff1a; 对人间的热爱与歌颂&#xff0c;可抵岁月冗长&#x1f31e; Github&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff1a;念舒_C.ying CSDN主页✏️&#xff1a;念舒_C.ying 个人博客&#x1f30f; &#xff1a;念舒_C.ying Docker可以让开发者打包他们…

55.函数的参数传递

55.函数的参数传递 文章目录55.函数的参数传递1.函数的参数2.参数的传递方法3.使用位置参数传递参数4.使用关键字传递参数1.函数的参数 自定义函数有2种参数&#xff1a;形式参数和实际参数。 def语句中的参数不是实际参数&#xff0c;我们称之为形式参数&#xff0c;简称形参…

C51——添加震动开盖功能,使用外部中断优化

void main() {double dis;Timer1Init();Time0Init();SG90_Init();while(1){dis get_dis();if(dis<10 || SW1 0||Vibrate 0){OpenTheLed5();opengaizi(); // }else{CloseTheLed5();closegaizi();}} }像这样只是简单的通过震动模块传给单片机一个让舵机转动&#xff0c;出来…

lvm 制作

壹&#xff1a; 创建LVM 逻辑卷 1&#xff0c;将物理盘格式为pv卷&#xff08;物理卷&#xff09;&#xff0c;使用pvcreate 命令 pvcreate /dev/sdc 或则是 pvcreate /dev/sdc /dev/sdb pvdisplay 或pvs 命令查看 PV 物理卷得创建情况 2,创建卷组 VG 通过vgcreate 命令,将pv加…

《图解TCP/IP》阅读笔记(第六章 6.3、6.4)—— 鼎鼎大名的UDP、TCP

前言&#xff1a; 本篇将要介绍UDP和TCP&#xff0c;篇幅略长&#xff0c;主要是TCP的内容较为复杂 6.3 UDP UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09; 根据此前的了解&#xff0c;UDP不提供复杂的控制机制&#xff0c;其是一种利用IP提…

JavaSE(类和对象、this用法、构造方法)

1. 面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 JAVA是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 面向过程注重的是…

2005-2020年全国及31省绿色信贷水平原始数据及测算

2005-2020年各省绿色信贷水平原始数据及测算 1、时间&#xff1a;2005-2020年 2、来源&#xff1a;整理自统计NJ、工业NJ、2018年经济普查&#xff0c;其中2017年采用插值法填补 3、范围&#xff1a;包括全国及31省市 4、数据内容&#xff1a;包含计算过程和原始数据 5、具…

动态规划——线性dp

基于数字三角形问题扩展 参考闫氏dp分析法参考闫氏dp分析法参考闫氏dp分析法 方格取数 f[i1][j1][i2][j2]表示&#xff08;1,1&#xff09;到&#xff08;i1,j1&#xff09;和&#xff08;1,1&#xff09;到(i2,j2)和的最大值f[i1][j1][i2][j2]表示&#xff08;1,1&#xff09…

ubuntu小技巧29--frp实现通过公网访问内网服务

ubuntu小技巧29--frp实现通过公网访问内网服务1 介绍2 方法步骤3 注意事项4 说明1 介绍 很多时候我们需要在外部网络中访问局域网或者个人家庭主机&#xff0c;以便于实现一个机器在多个地方都能用&#xff0c;此时我们就可以使用 frp 或者其竞品来实现该功能。 frp 是一个专…

11Python面相对象基础语法

面相对象基础语法 01. dir 内置函数 在 Python 中 对象几乎是无所不在的&#xff0c;我们之前学习的 变量、数据、函数 都是对象 在 Python 中可以使用以下两个方法验证&#xff1a; 使用内置函数 dir 传入 标识符 / 数据&#xff0c;可以查看对象内的 所有属性及方法 提示…