解说天下之操作系统

news/2024/5/20 20:39:47/文章来源:https://blog.csdn.net/besidemyself/article/details/130752589

解说天下之操作系统

本文由桌案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外设,打印机,现实生活当中的公共卫生间等等。

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

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

相关文章

十五天MySQL学习计划(运维篇-完结)读写分离-第十五天

十五天MySQL学习计划&#xff08;运维篇-完结&#xff09;读写分离-第十五天 读写分离 1.读写分离 ​ 读写分离&#xff0c;简单的说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主服务器提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样…

GitLAB CI-CD语法

GitLAB CI-CD语法 目录 1、Pipeline核心语法 gitlab-ci语法&#xff1a; https://docs.gitlab.com/ee/ci/yaml/ stages 阶段控制 .pre阶段的作业总是在流水线开始时执行&#xff1b;.post阶段的作业总是在流水线结束时执行&#xff1b; CI代码&#xff1a; stages:- build…

x509证书-crl证书吊销

标准 CRL fields -- 版本、时间、证书序列号和扩展名 -- 都是在4.1节的ASN.1中定义的 -- AlgorithmIdentifier 在第 4.1.1.2 节中定义 以下各项描述了 X.509 v2 CRL 在 Internet PKI 中的使用。 关于签名值和验证 signatureValue 字段包含根据 ASN.1 DER 编码的 tbsCertList 计…

ChatGPT 提问,软件杂项部分

堆内存与栈内存一般分别 有多少 ChatGPT 堆内存和栈内存的大小取决于操作系统和编译器的限制以及程序的运行环境。以下是一些常见的默认大小范围&#xff0c;但请注意这些值可以因环境而异&#xff1a; 栈内存大小&#xff1a; Windows平台&#xff1a;默认情况下&#xff…

AI心理咨询师:舒缓焦虑,解放压力的秘诀

在如今高压力的生活和工作环境下&#xff0c;焦虑和内耗成为了越来越多人的问题。这一现象对我们的身体和心理都会造成很大的影响。如何治愈我们的焦虑和精神内耗&#xff1f; 1.减少工作压力 - 了解和认可自己的能力和限制&#xff0c;不要让工作压力压垮自己。 - 适当的规…

C++ 实现堆排序

时空复杂度 时间复杂度 排序复杂度 O ( n l o g n ) O(nlogn) O(nlogn) 建堆复杂度 O ( n ) O(n) O(n) 空间复杂度 由于堆排序是一种就地设计的排序算法&#xff0c;空间需求是恒定的&#xff0c;所以是O(1) 稳定性 不稳定。 C代码&#xff08;大根堆&#xff09; cla…

选Ubuntu 还是 Fedora ?

提起开发&#xff0c;程序员们更青睐于不同版本的Linux操作系统而不是Windows。 为什么&#xff1f;因为Linux操作起来更安全、快捷&#xff0c;最重要的是&#xff0c;它的发行版本众多。你可以根据需要挑选最适合的那一款。那么&#xff0c;问题来了&#xff0c;到底哪个版本…

MySQL高级_第12章_数据库其它调优策略

MySQL高级_第12章_数据库其它调优策略 1. 数据库调优的措施 1.1 调优的目标 尽可能 节省系统资源 &#xff0c;以便系统可以提供更大负荷的服务。&#xff08;吞吐量更大&#xff09; 合理的结构设计和参数调整&#xff0c;以提高用户操作 响应的速度 。&#xff08;响应速…

MySQL:数据库的约束

目录 1.数据库约束 1.1 非空&#xff1a;not null 1.2 唯一&#xff1a;unique ​​​​​​​ 1.3 默认值&#xff1a;default 1.4 列描述&#xff1a;comment 1.5 主键约束&#xff1a;primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by…

百汇BCR:如何参与外汇交易?哪个交易时间更好?

外汇市场时连续24小时运转的&#xff0c;也就是说随时都可以参与交易。那不同的交易时间进场是否会影响交易结果&#xff1f;哪个时间参与交易更好&#xff1f; 一、国际主要市场外汇交易时间&#xff08;北京时间&#xff09; 新西兰惠灵顿外汇市场&#xff1a;04&#xff1a…

Windows平台上的5种敏捷软件开发(过程)模型

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows平台上的5种敏捷软件开发(过程)模型。 说到这个问题&#xff0c;你必须先知道除了敏捷模型还有没有其他什么模型&#xff1f;同时要比较模型的区别&#xff0c;首先还要看看什么叫软件开…

【C++初阶】:模板初阶

模板初阶 一.函数模板1.简单使用2.模板原理3.函数模板的实例化4.模板参数的匹配原则 二.类模板1.基本格式2.类模板实例化 一.函数模板 1.简单使用 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的…

Linux:iptables防火墙

Linux&#xff1a;iptables防火墙 一、iptables防火墙概述1.1 iptables防火墙1.2 netfilter/iptables 关系 二、Linux防火墙基础2.1 iptables的表、链结构2.2 数据包控制的匹配流程 三、编写防火墙规则3.1 基本语法、控制类型3.2 添加、查看、删除规则等3.3 规则的匹配条件3.3.…

EW代理工具的使用说明

一、EW介绍 Earthworm&#xff08;EW&#xff09; 是一套便携式的网络穿透工具&#xff0c;具有 SOCKS v5服务架设和端口转发两大核心功能&#xff0c;可在复杂网络环境下完成网络穿透。 该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道&#xff0c;直达…

C语言深度解析--函数

函数 函数的定义&#xff1a; 函数&#xff0c;又称为子程序&#xff0c;是一个大型程序中的某部分代码&#xff0c;由一个或多个语句块组成。它负责完成某项特定任务&#xff0c;而且相较于其他代码&#xff0c;具备相对独立性。 一般会有输入参数并有返回值&#xff0c;提供…

win10 vmware虚拟机蓝屏怎么办 win10 vmware虚拟机蓝屏解决方法【详解】

最近有朋友出现win10 vmware虚拟机蓝屏的情况应该怎么办&#xff1f;小伙伴们在使用vmware虚拟机出现了蓝屏现象的小伙伴们不用担心&#xff0c;小编翻阅各种资料后给大家带来两种虚拟机蓝屏的解决方法&#xff0c;想要解决此问题的小伙伴们快跟着小编往下看吧&#xff01; win…

nodejs进阶(3)—路由处理

1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回。 url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) 接收参数&#xff1a; urlStr url字符串 parseQueryString 为true时将使用查询模…

再次比较以1为参照的6-3分布

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有1个节点&#xff0c;AB各由9张二值化的图片组成&#xff0c;让A中有3个0&#xff0c;6个1.B中全是1&#xff0c;排列组合A的所有可能&#xff0c;统计迭代次数的顺序。 得到数据 迭代次数平均值 A-B 迭代次数 F 9 …

数据结构总结1:了解数据结构、时间复杂度、空间复杂度

后续可能会有补充和更改 目录 一、数据结构 1.算法介绍 二、时间复杂度、空间复杂度 三、练习 1.时间复杂度 2.空间复杂度 一、数据结构 数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 数据结构和数据库的区…

【C++】-模板初阶(函数和类模板)

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录 前言一、为什么要模板&…