当前位置: 首页 > news >正文

解说天下之操作系统

解说天下之操作系统

本文由桌案drawon (https://www.drawon.cn),云晶(https://www.yunjingxz.com)创始人根据多年从业经验, 从操作系统的起源,应用分类, 设计分类,以及资源使用角度对操作系统进行宏观的阐述,通过阅读本篇内容,您将大致对操作系统有更系统、更宏观,更深入的认识。我们每个人每天都在高频次的使用不同的操作系统,有必要对操作系统从宏观,深入浅出的有一个基本的认识和了解。

前后台系统

前后台系统为操作系统的原古时期。 在没有操作系统诞生之前,基本计算机系统就是前后台系统架构模型。

前后台系统的概念

在没有操作系统出现之前的系统为前后台系统,比如现在大多数嵌入式系统中所是用的MCU可以运行简单的C语言程序的单片机在裸跑的时候,我们认为为前后台系统,下面一张图介绍了前后台系统的模型:

 

从图中,我们可以看到,有如下特点

应用程序是一个无限的循环, 一般在主函数中,会写一个死循环,这个循环会有一定的延时,每隔一段时间循环执行一次。 循环中调用相应的函数,完成相应的操作, 这部分可以看成是后台的行为(background)。无限循环扫描,就是一个轮询 。

后台系统,总是会运行,(The background is always running)这个Main函数是不会停止的。

当有紧急任务需要处理时, 则MCU提供一种中断机制, 每个中断向量挂接一个中断处理函数, 进行紧急的处理。这种中断处理程序的行为,我们称之为前台行为(Foreground)。当紧急事件发生时, 中断处理机制会立即捕获它。 而紧急事件,一般都是外部IO触发, 触发行为有高电平变低触发,低电平变高触发,还有上升沿或者下降沿触发。 还有一种内部定时触发等。

如下为前后台系统的变成模型

{void main () {for(;;) {InitSystem();InitUartIsr(OnUartDataReceived);for(;;) {LED0 = ON;DelayMillisecs(500);LED1 = OFF;DelayMillisecs(500);}}} void OnUartDataReceived(byte[] buffer, int count) {// doing something.}
}

前后台系统的优点

前后台系统的机制相对简单, 对编程人员要求比较低。 只要学点C语言, 了解点基础硬件相关的知识, 就能干点事情,如点亮LED灯。灯。 可以基于单片机来学习前后台系统。

如下推荐一些单片机的书籍, 可以借助这些书籍去学习前后台系统。

 

如下为前后台系统的优点:

  • 成本低, 一般情况下, 几毛钱,甚至几块钱就能买到一个单片机。
  • 需求量非常大, 只要带一些简单的控制逻辑的系统,大多数都采用简单的MCU, 内部运行一个前后台系统,如下我们给出一张操作系统的分布金字塔图。

 

  • 设计开发编码都比较简单。 一般是由嵌入式工程师完成前后台系统的开发与设计。

前后台系统的缺点

  • 应用场景比较简单, 控制简单的外围电脑和简单的运算。 对于大型复杂的逻辑或者交互,前后台系统很难胜任。还有一些比较厉害的高人, 使用前后台系统可以完成操作系统能够完成的任务,甚至操作系统都难以完成的事情(小才大用)。
  • 资源很难系统的调度,原地转圈圈前后台系统的CPU 一直都很忙,资源很难系统调度。
  • 开发系统时,代码的耦合度较高,你中有我,我中有你。前后台系统中,每为一个系统添加一个软件模块,都可能影响到之前的功能。所以如果要把前后台系统的系统玩好,一定得做到统领全局, 了解到别人的程序逻辑。

操作系统

基本概念

控制和管理计算机系统内部各种硬件和软件资源、有效的组织多道程序运行的系统软件(或程序集合),是用户与计算机之间的接口。

下面分享上面上,主流的操作系统

Windows操作系统

 

MAC OS 操作系统

 

Chome OS 操作系统

 

移动端的IOS, Android ,Windows Phone(过去式)

 

操作系统,决定了系统的交互方式,以及生态,每个人,都有自己喜欢的操作系统。

操作系统分类

按照家族分类

如下为Unic的家族史:

 

从上图可以看到, Unix(Unics)实际上是大部分操作系统的祖先。 很多操作系统都是从Unix演变而来。

Unix家族演进图

 

从上图可以看出:

  • 目前非常著名的苹果公司的PC领域的操作系统MAC OS以及移动端操作系统IOS均是由Unix系统改写而来。
  • 谷歌的Android操作系统,ChromeOS 均是由Linux系统修改而来。
  • Ubuntu 更是Linux系统的社区开源版本。
  • 还有在车载系统中,号称是实现很强的微内核系统 QNX均来自Unix系统。

按照内核类型分类

 

微内核/宏内核的概念

操作系统最核心的功能,任务调度、内存和设备的抽象和管理。然后 ,为了我们方便使用,才集成进了系统服务、驱动程序、文件系统之类的东西。

我们平时运行的程序,每个程序各运行几十毫秒,大家来回轮换,这样子我们看起来这些程序好像在“同时”运行一样。应用程序之所以能够被操作系统通过时间片的方式调度,是因为对于CPU而言,普通的应用程序和操作系统的内核运行在不同的特权级别上,我们叫作rings。应用程序运行在Ring 3,而内核运行在Ring 0。

随着科技的发展,操作系统变得越来越复杂,内核里面的东西也越来越多。人们也就开始考虑是否应该改变原有的架构,从而提高操作系统的性能稳定性主要是精简内核降低开发的复杂度,还有就是把各种程序尽可能的隔离保证一个程序的崩溃不会牵连到其他的程序。

上世纪80年代人们讨论得火热的微内核就是这样一种架构。

几种内核架构

 

理论设计,放到现实的工程中都是要做折衷的。所以有混合内核的出现,综合宏内核和微内核的不同优点,在两个方案中折衷设计。OS X和Windows就属于这类。

微内核的优势

微内核考虑在操作系统的内核中保留操作系统最基本的功能,也就是任务调度、内存和设备的抽象和管理。其他的功能全部从内核移出,放到用户态中了实现,并以C/S模式对其他应用程序提供服务。

微内核带来的好处主要是稳定性实时性,即内核中模块数量少了,结构更精简更优化了,能够影响内核的程序和驱动也减少了,稳定性随之提高;另外就是实时性,内核精简了以后,响应的时延的减小。不过并不是精简了以后会使得性能提升,微内核使得内核中只有最关键的部分,其他模块和系统功能全部作为独立模块放到用户态空间中运行,功能分散了以后增加了通信的成本。不过微内核操作系统的特点尤其适合工控系统的控制,而且设计简单,在小型的系统中有不少的应用。另外亦有不少实时操作系统是使用微内核架构设计。

总结几句

  • Worse is better.

    • 计算机领域往往经过完善设计的产品,最终结果都是失败的。
    • 像Unix赢了Multics一样。
    • Lisp(通用高级计算机程序语言)并没有C语言流行。
    • OSI的愿景最后由TCP/IP协议完成。
    • 相信,国内号称真正的云上操作系统,最终是由云晶-新一代云上操作系统来完成(开玩笑)。
    • 微软的WPF, 把MVVM设计模式运用的淋漓尽致,设计的如此纯粹,并没有流行起来。

    ......

  • 宏内核就是一座华丽的宫殿。

  • 微内核就是一座精致的小别墅。

Linux为什么不采用微内核或者混合内核模式?

理论上完美的问题在实践过程中都会遇到各种不得不妥协的折衷。因为你制造出的东西是要部署到实际生活生产环境中使用。不是要一个只在实验室中看起来很完美的作品。微内核的高度模块化,自然要付出成本的,那就是增加代码交互的冗余与效率的损耗, 而这恰恰是很大的问题。

Linus可以把这些乱七八糟的东西,全都一个人写了,一遍写对了,还能稳定跑起来,无bug,而我们这些渣渣,做不到,只能依靠保护模式来防止几百个工程师写出来的那一坨垃圾,动不动蓝屏,自己弱,却质疑天才的做法,和明知自己弱,还要模仿天才的做法,都是认不清现实的表现

Linux本身在实现之初仅仅作为Linus一个业余项目而存在。而Monolithic Kernel由于不需要处理消息队列等等原因从实现角度来说比Micro Kernel更为方便。

linus 这人对微内核不感兴趣,这个大家都知道,只要有他在一天,kernel就不会考虑微内核化。他是一名实用主义者, 他说过一句名言:Talk is cheap. Show me the code

Linus: "Gaah. Guys, this whole ARM thing is a fcking pain in the ass.” 推动了DeviceTree.(题外话,*霸气)。这就是Linus这个人的张扬与洒脱的一面。 仔细体会。

按照实时性分类

按照实时性,将操作系统分为硬实时和软实时。 那么什么优势硬实时和软实时,其实就是通过中断的响应时间来衡量的。

衡量实时性的标准:

  • 中断的相应时间。

    中断的相应时间==关中断的最长时间+保护CPU 内部寄存器的时间+进入中断服务函数的执行时间+开始执行中断服务例程(ISR)的第一条指令时间

  • 任务的切换时间, 就是从当前任务挂起,到要切换的任务开始运行的时间。

  • 一个硬实时操作系统面对变化的负载(从最小到最坏的情况)时,必须确定性地保证满足时间要求。跟CPU强悍无关,必须时间具有确定性。

  • 实时操作系统的代表

    • Linux为实时操作系统的代表
    • Vxworks(Wind River)为硬实时操作系统的代表。

    以下表中,该处了实时操作系统的实时性对比

    WxWorksuCOS-IIRT-Linux2QNX6MACosXWindowsLinux-GP
    硬件平台MC6800033MHz-48660MHz-48633MHz-486
    任务切换3.8us< 9us不详12.57us
    中断响应< 3us< 7.5us25us7.54us

操作系统中与编程有关的基本知识

 

进程线程的基本概念

  • 并发和隔离。
  • 程序执行的上下文(Context of Execution)
  • 执行与调度的基本单位:thread
  • 资源所有权:process
  • 进程是资源的容器,包含(一个或)多个线程。 内核调度的基本单位是线程(不完全是)、而非进程。
  • 同一进程下的各个线程共享资源(address space、open files、signal handlers,etc),但寄存器、栈、PC指针等不共享。

进程和线程到底有什么区别? 以上其实已经说了一部分, 线程是调度和执行的基本单位,最终代码都在线程中执行。 而进程是资源的容器,包括一个或多个线程。 同一个进程下的各个线程共享资源。

如下图为区别:

 

Linux的线程进程概念

 

Linux的线程是用户级别的,也就是内核中不存在线程。

  • 所有的线程管理都在应用层去执行。
  • 内核不关心,实际上也觉察不到线程的存在。

Windows的线程进程概念

 

而从上图也可以看出,Windows和Linux显然采用不同的理念。

windows的线程是内核级别的。

  • Windows是这些概念的一个例子。
  • 内核维护着线程和进程的上下文。
  • 调度实际上是基于线程而运行的。

进程间的通信

有了线程,进程的隔离, 就需要线程进程之间的通信机制来保证协作完成任务,共享访问数据。

Windows进程间的通信

  • 文件映射
  • 共享内存
  • 匿名管道(单项,一端写,一端读)
  • 命名管道。
  • 动态链接库
  • 远程过程调用(可以在一台机器内,也可以跨机器)
  • UDS(Unix Domain Socket)
  • 基于Windows的消息机制 ……

Linux进程间的通信

  • 管道(Pipe),以及有名管道
  • 信号(Signal)
  • 报文(Message)队列(消息队列)
  • 共享内存(效率最高)
  • 信号量(Semaphore)
  • 主要作用是进程间,以及同一进程的不同线程之间的同步手段 (UDS)Socket 套接字

以上Window和Linux虽然采用了不同的方式,概念上有所不同的方式进行进程间的通信,实际上,他们的基本原理类似。

线程间的通信

  • 共享数据结构。共享内存
  • 事件(Event)传递
  • 消息队列
  • 邮箱(ucosII)

线程同步

线程同步,即当有一个线程在对内存或者外设进行操作时,其他线程都不可以对这个内存地址或者外设进行操作,直到该线程完成操作, 其他线程才可以进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,如下。

  • 一般使用信号量(Semaphore)。
  • 高级语言如java 本身语言的设计 就为此考虑,如synchronized 关键字,wait, notify 方法。
  • 可以使用Mutex。
  • 临界区对象。

信号量与互斥锁

Semaphore(信号量,或者信号灯)

以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。在微观世界里,计算机世界里,比如访问硬盘空间,读取数据,往往资源有限。 可以可以使用该机制,进行有效的对资源的访问进行协调控制。

Mutex(互斥锁)

一次只能有一个线程进入的特殊信号量。性能会比信号量好。对于某些特殊的应用场景, 一次只能有一个线程访问,待该线程退出后,其他线程方可继续运行。 例如操作系统的IO外设,打印机,现实生活当中的公共卫生间等等。

相关文章:

解说天下之操作系统

解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn)&#xff0c;云晶&#xff08;https://www.yunjingxz.com&#xff09;创始人根据多年从业经验&#xff0c; 从操作系统的起源&#xff0c;应用分类&#xff0c; 设计分类&#xff0c;以及资源使用角度对操作系统进…...

Pruning 系列 (八)layer常用简枝(torch)方法

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、prune.random_unstructured pytorch:文档地址 用法: torch.nn.utils.prune.random_unstructured(module, name, amount) 参数: module(torch.nn.Module) -包含要修剪的张量的模块 name(str) -module 中的参数名称,将…...

Gigabyte Z490 Vision D i9-10900k电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Gigabyte Z490 Vision D 处理器Intel i9-10900k已驱动 内存64GB G.Skill Trident Z 3600Mhz CL18已驱动 硬盘西数 WDS250G3X0C-00SJG0 ( SN750) …...

UWB智慧工厂人员定位系统源码,人员在岗监控、车辆实时轨迹监控源码

近年来人员定位系统在工业领域的发展势头迅猛&#xff0c;工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境&#xff0c;单一技术是很难实现的&#xff0c;需要融合多种不同的定位技术&#xff0…...

从认识元注解到使用元注解

前言&#xff1a;注解是Java语言中的一种特殊语法&#xff0c;它可以为代码提供更加灵活的元数据信息&#xff0c;方便代码的处理和使用。而元注解则是用于定义注解的注解&#xff0c;它可以为注解提供更多的元数据信息和特性。本文将介绍如何自定义元注解&#xff0c;包括认识…...

【C++从0到王者】第六站:类和对象(下)

文章目录 一、再谈构造函数1.构造函数体赋值2.初始化列表1>初始化列表的使用2>初始化列表的注意事项 3.explicit关键词 二、static成员1.如何统计当前程序中变量的个数2.static的特性3.从1加到n4.设计一个类&#xff0c;只能在栈或者堆上开辟空间 三、友元1.友元函数2.友…...

AJax和Axios的讲解

目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML…...

企业落地数字化转型,如何部署战略规划

当前环境下&#xff0c;各领域企业通过数字化相关的一切技术&#xff0c;以数据为基础、以用户为核心&#xff0c;创建一种新的&#xff0c;或对现有商业模式进行重塑就是数字化转型。这种数字化转型给企业带来的效果就像是一次重构&#xff0c;会对企业的业务流程、思维文化、…...

新的网络钓鱼即服务平台让网络犯罪分子生成令人信服的网络钓鱼页面

至少从2022年中期开始&#xff0c;网络犯罪分子就利用一个名为“伟大”的新型网络钓鱼即服务(PhaaS或PaaS)平台来攻击微软365云服务的企业用户&#xff0c;有效地降低了网络钓鱼攻击的门槛。 思科Talos研究员蒂亚戈佩雷拉表示:“目前&#xff0c;Greatness只专注于微软365钓鱼…...

MySQL的隐式转换

隐式转换 若字符串是以数字开头&#xff0c;并且全部都是数字&#xff0c;则转换的数字结果是整个字符串&#xff1b;部分是数字&#xff0c;则转换的数字结果是截止到第一个不是数字的字符为止 若字符串不是以数字开头&#xff0c;则转换的数字结果是 0 varchar str "…...

LeetCode:23. 合并 K 个升序链表

23. 合并 K 个升序链表 1&#xff09;题目2&#xff09;过程3&#xff09;代码1. 最开始2.初步优化 4&#xff09;结果1. 最开始2. 初步优化 1&#xff09;题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合…...

js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search

文章目录 正则使用testmatch/matchAll不加g加ggroup 的使用 matchAll不加g加g exec不加g加g searchreplace 正则使用 常用的几种方法有&#xff1a;test、exec、match、matchAll、replace、replaceAll、search test // 匹配返回true&#xff0c;不匹配false /e/.test("…...

分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因

车载蓝牙通话只有前喇叭声音&#xff0c;后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音&#xff0c;后面喇叭没声音呢&#xff1f;特别是后装的车载多媒体上基本都是这样&#xff0c;细思下为什么这样的原因&#xff0c; 采访后装车载技术…...

高性能ADC/DAC FMC子卡推出-FMC164

FMC164 子卡集成 4 通道 1Gsps 采样率&#xff0c;16 位 高性能ADC采样&#xff0c;板载4 通道1.25Gsps 16 位DA。板载时钟芯片 HMC7044&#xff0c;可以提供 JESD204B所需要的各种时钟。具有同步/触发功能&#xff0c;模拟信号采用 SSMC 射频连接器输入和输出。板载时钟芯片为…...

Agisoft Metashape 红外影像处理

系列文章目录 文章目录 系列文章目录前言一、加载红外影像二、对齐照片三、构建 DEM四、生成 DOM五、温度值可视化前言 Agisoft Metashape 专业版支持处理来自 AscTec(ARA 格式)、WIRIS(TIFF 格式)热成像仪和以 R-JPEG(FLIR 数据)格式保存数据的热成像数据。 在本文中,…...

Mybatis从入门到入土

一、什么是Mybatis 1&#xff09;MyBatis 是一款优秀的持久层&#xff08;DAO层&#xff09;框架 2&#xff09;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 3&#xff09;MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将…...

修为 - 人生感悟

人不为己&#xff0c;天诛地灭。 说明一下&#xff0c;上面说的为己&#xff0c;指的是人的修为。 一个人&#xff0c;在成年之后&#xff0c;需要不断的对自己进行修为的提高。在经历了世事之后&#xff0c;对人生的感悟要不断地进行总结&#xff0c;提高自己的修为。 老祖宗给…...

UnityWebSocket | 双端通信支持Text/Binary

跳转官方仓库地址 有多个项目使用该库&#xff0c;平台有PC、WebGL。 一、说明 1&#xff09;原理 WebSocket是H5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。数据通常在两个站&#xff08;点对点&#xff09;之间进行传输&#xff0c;按照…...

lazada详情

{“api”: “”, “data”: {“module”: “{“seller”:{“chatResponsiveRate”:{“labelText”:“Chat Response”,“value”:“100%”},“chatUrl”:“https://pages.lazada.com.my/wow/i/my/im/chat?brandId30768”,“hideAllMetrics”:false,“imEnable”:true,“imUser…...

企业为什么要数字化转型?

数字化转型是使用数字技术从根本上改变企业运营方式并为客户创造价值的过程。企业进行数字化转型&#xff0c;常见因素包括&#xff1a; 提高效率&#xff1a;数字化转型可以简化流程并自动执行重复性任务&#xff0c;从而减少执行这些任务所需的时间和精力。可以节省成本并提高…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...