CHS_01.1.3.1+操作系统的运行机制

CHS_01.1.3.1+操作系统的运行机制

  • 操作系统的运行机制 也就是说 操作系统在计算机上是怎么运行的这样一个问题

操作系统的运行机制 也就是说 操作系统在计算机上是怎么运行的这样一个问题

在这里插入图片描述

那这个小节中会涉及到这样的一些概念 我们会学习到两种类型的指令 然后两种处理机状态和两种程序

他们其实都是一一对应的 那具体我们会一层一层慢慢讲解

那首先我们要来解释一下 程序在计算机硬件上底层是怎么运行的

其实 像我们平时用c语言代码写的那些程序都会经过编译器进行一个编译的工作

把这个c语言代码翻译成计算机能够听得懂的二进制代码 也就是机器指令

像我们平时用c语言这种高级语言写的一条代码经过编译翻译之后可能会对应很多很多条机器指令

比如说 我们定义了一个inter型的变量x等于一并且对x进行了加加 也就是加一的操作

那么这样两行短短的代码 可能经过编译之后形成的机器指令就会对应这么多条 当然这个地方我也是随便胡乱写的

因为都是二进制数嘛 反正我们都看不懂 但是虽然我们看不懂这些二进制数 但是对于cpu 对于计算机来说 这样的二进制代码才是他能够看得懂的一种语言

所以其实我们这段程序运行的过程 其实就是cpu把这些机器指令一条一条的执行的一个过程

而这些机器指令在背后实现的其实就是我们用代码表示的这小段的逻辑

只不过这种二精制的机器指令 是cpu能看懂 但是我们看不懂的 所以这个地方所提到的所谓的机器指令
其实就是让处理器 也就是cpu能够识别并且执行的最基本的一个命令
比如说进行一个加法操作或者进行一个赋值的操作等等
这个地方所谓的指令的概念比较容易和另一个概念进行混淆

很多同学在以前会习惯把Linux windows等等这种小黑框里输入的这种什么ls cd等等这样的

命令称作为指令 但是其实这个小黑框里所用的这个命令其实是我们之前提到过的

交互式命令接口 他和我们这个小节所讲的指令是不一样的 我们这儿指的指令是指二进制的机器指令

所以大家需要对接下来所提到的指令进行一个区分 总之 我们平时用高级语言编写的这种程序 最后执行的时候 肯定是需要变成cpu能够读得懂的 用二进制的机器指令表现的这种形式

那么这就是程序运行的一个基本原理 那在操作系统这门课当中 我们需要注意区分两种类型的程序 一种叫内核程序 一种叫应用程序

所谓的应用程序 就是跑在操作系统之上的我们平时很熟悉很喜欢用的那些那些程序 比如说qq

什么微信等等等等 那像我们普通程序员写的程序其实就是应用程序 是跑在操作系统之上的

但是还有一些人 比如说像微软 苹果 会有一帮人是负责开发操作系统的

这帮人写的那些程序就是所谓的操作系统的内核程序 那这帮人编写了很多很多的内核程序 这些内核程序最终组成了所谓的操作系统的内核

这个内核就是操作系统最核心的部分 也是最接近硬件的部分

我们之前提到过 操作系统最重要的一个角色是 它要作为系统资源的管理者

而操作系统对系统资源的管理工作其实就是在内核部分来实现的 我们甚至可以说 一个操作系统只要有内核就可以了

比如说 有的同学也许会接触过容器技术 比如说docker在容器里只需要有linux的内核 其实就可以实现linux的所有的功能了

而我们用户平时使用的操作系统 其实它包含的不只是内核的功能 比如说图形化的用户界面 就不是放在内核当中实现的

即使没有图形化的用户界面 我们依然可以用命令行 也就是之前所提到的小黑框的那种方式来使用操作系统

所以 操作系统的内核当中所包含的只是操作系统当中最重要 最核心 最必不可少的那些功能

那既然操作系统内核 它是系统资源的管理者 它作为管理者这样的一个角色 有的时候就有可能会让cpu执行一些比较特殊的指令

比如说内存清零的指令 这种指令会对其他程序的运行造成很严重的影响

像这样的特权指令运行之后 是有可能影响到其他程序的正常运行的

所以 这样的特权指令就应该只允许我们系统的管理者 也就是操作系统内核来使用

也就是说 假如这一段程序是内核程序的话 那这些指令当中可以出现特权指令

而假如说这段程序是普通的应用程序的话 那么这其中就不应该包含特权指令 而只能使用非特权的指令

比如说让cpu做加减乘除运算的一系列的指令 就是非特权的指令 我们的cpu在设计和生产的时候

就划分了哪些指令是属于特权指令 哪些指令是属于非特权指令 所以cpu在拿到一条指令的时候 其实它是可以区分出它到底是特权指令还是非特权指令的

那么问题就出现了 cpu在执行程序的时候 他只会负责把这些指令一条一条的执行 虽然他能够分辨出哪些指令是特权指令 哪些指令是非特权指令 但是他又怎么分辨出此时正在执行的这个指令 他到底是一个应用程序的指令
还是一个内核程序的指令呢
那接下来我们要研究的就是这个问题 为了让cpu能够区分此时正在运行的这些指令是属于应用程序还是内核程序 cpu会被划分成两种状态 一种叫内核态 一种叫用户态

那当cpu处于内核态的时候 说明此时cpu正在运行的是内核程序

那在这个时候是可以执行特权指令的 而如果cpu处于用户态 那么说明此时cpu正在运行的是应用程序

那此时cpu就只能执行非特权指令 那怎么区分cpu到底处于哪种状态呢

在cpu当中会有一个寄存器 也就是一个存数据的地方 叫做程序状态寄存器 英文缩写叫psw

然后这个寄存器当中会有一个二经之位 这个二经之位唯一的时候 表示cpu此时是处于内核态的

而二进制为零的时候 表示cpu此时处于用户台 当然 也有一些cpu有可能是零表示内核台 一表示用户台

但是这个无关紧要 我们只需要知道 用二进制的方式其实就可以实现对cpu状态的一个标记

那用户态和内核态 他们还有各自的别名 用户态又可以叫木态 然后内核态又可以叫做广态

那这两个术语大家也需要注意一下 那接下来我们要探讨的问题是 cpu要怎么实现这两种状态之间的切换

我们直接用一个例子让大家看一下cpu状态切换的一个过程 首先 当我们开机的时候

需要加载我们的操作系统 然后这个操作系统就需要进行一些初始化的工作 那那系统初始化的工作其实就是由操作系统当中的某一些内核程序来完成的

所以 在开机的过程当中需要执行内核程序 因此 在这个时候 cpu肯定是需要处于内核态

他需要来执行系统初始化相关的这一系列的内核程序的这些指令

那么当我们开机完成之后 用户就可以启动某一些应用程序 那这个应用程序要正常运行的话 肯定需要让cpu执行它的这一系列的指令 但是我们刚才不是说cpu此时正在执行的是内核程序吗

而如果说要让他运行这个应用程序的话 怎么实现这个事情呢 那此时如果操作系统的内核想让这个应用程序开始运行的话
那么 这个内核程序就需要执行一条特权指令 这个特权指令会把ps w的标志位从内核态转变为用户态

这样的话 就完成了cpu状态的一个切换 接下来 操作系统内核就会让出cpu的使用权

让这个应用程序上cpu运行 而此时cpu已经被切换为用户态了

所以接下来我们的应用程序会在用户态下运行 那cpu会执行这个应用程序的

一条一条的指令 那此时一个小故事发生了 假如说此时有一个猥琐的黑客

在这个应用程序当中植入了一条特权指令的话 会发生什么事呢 首先 cpu在读入这条指令的时候 其实它就已经能够判断这条指令

是一条特权指令了 但是cpu又检查了自己的psw寄存器 发现自己此时是处于用户台的

这样的话 cpu就能够知道我此时正在运行的其实是应用程序而不是内核程序 而一个应用程序竟然他妈想要用一个特权指令 那这个事情坚决不能让他干

所以这样的一个非法事件会引起一个中断信号 当cpu检测到这个中断信号之后

他就会立即强行变态 强行变成核心态 并且cpu会拒绝执行这一条特权指令

接下来 cpu会暂停执行这个应用程序后面的这一系列的指令代码转而会执行一个

处理中断信号的内核程序 接下来cpu就在内核态下来执行这个内核程序相应的这一系列的

指令 所以其实刚才发生了这个中断信号之后 让操作系统内核
又重新夺回了cpu的控制权 接下来 操作系统的内核程序会对这个中断
进行相应的处理 等处理完了之后 他才会把cpu的使用权再重新还给应用程序

所以从这个故事当中 我们就可以很形象的看到cpu从内核态切换回用户态

是执行了一条修改psw标志位的一个特权指令来完成的 执行了这个特权指令之后 就意味着操作系统内核要主动的让出cpu的使用权了

当cpu切换为用户态之后 就可以在cpu上运行用户程序 而cpu的状态从用户态又切换回内核态 是由中断引发的

然后由cpu硬件自动的完成这个变态的过程 并且cpu变回内核态 之后

他会停止运行当前正在运行的应用程序 转而运行一个内核程序

所以说 其实触发了一个中断信号 就意味着操作系统会强行重新夺回cpu的使用权

那除了非法使用特权指令之外 还会有别的很多的事件也会触发这个中断信号
一个共性是 但凡我们需要操作系统来介入开展管理工作的时候 就会触发一个中断信号

那具体有哪些中断 这个 我们会在下一个小节当中进行更进一步的学习 好的 那么这个小节当中 我们

用一个故事来捋清了操作系统的运行机制 我们的cpu运行程序的过程其实就是在执行一条一条机器指令的过程 而系统中存在两种程序 一种是内核程序 一种是应用程序 内核程序是

整个系统的管理者 所以它需要使用到一些特权指令 并且特权指令只有内核程序可以使用

那当cpu的状态是内核态的时候 说明此时正在跑的这些指令是属于内核程序的
当cpu处于用户态的时候 说明此时他正在跑的是应用程序的指令
那由一系列的内核程序就组成了操作系统的内核 它是整个系统最核心 最接近硬件的部分
那我们还强调了cpu是如何变态的 内核台到用户台的转变是用一条特权指令实现的
而用户态到内核态的转变是由中断引起的 然后由cpu硬件自动完成

那这个小节的内容都是十分重要的 很容易在选择题当中进行考察

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

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

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

相关文章

【软件测试】刚入行的测试人,“我“该怎么提升自己技术能力...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 一个问题&#xf…

【Helm 及 Chart 快速入门】03、Chart 基本介绍

目录 一、Chart 基本介绍 1.1 什么是 Chart 1.2 Chart ⽬录结构 1.3 Chart.yaml ⽂件 二、创建不可配置 Chart 2.1 创建 Chart 2.2 安装 Chart 三、创建可配置的 Chart 3.1 修改 chart 3.2 安装 Chart 一、Chart 基本介绍 1.1 什么是 Chart Helm 部署的应…

LORA的基本原理

本文将介绍如下内容: 什么是Lora高效微调的基本原理LORA的实现方式LORA为何有效? 一、什么是LoRA LoRA 通常是指低秩分解(Low-Rank Decomposition)算法,是一种低资源微调大模型方法,论文如下: LoRA: Low…

大厂都在用的监控高可用方案,小公司还不赶紧学起来?

有一次在一家国企时,他们是使用的dockernginx做为自己的“云”。同时,监控告警平台也不完善,虽然使用的是PrometheusGrafana,但仅仅是用来“看大屏”。 同时所有的报警都是一个一个的脚本去写的,例如写一个python脚本…

卢森堡市场开发攻略,带你走进全球最富有的国家

卢森堡位于西欧,位于欧洲的十字路口,地理位置非常重要。卢森堡是高度发达的资本主义国家,人均gdp全球最高,是当之无愧的全球最富国家。卢森堡对外开放度高,很多产品依赖进口,也是一个非常不错的市场&#x…

医疗门诊诊所预约挂号视频问诊小程序开发

医疗门诊诊所预约挂号视频问诊小程序开发 医疗门诊诊所预约挂号视频问诊小程序开发 用户注册、登录:用户通过手机号注册、登录小程序账号,校验用户身份信息。预约挂号:用户选择就诊科室、日期和时间,预约医生门诊,并…

【OpenCV学习笔记06】- 制作使用轨迹条控制的调色板

这是对于 OpenCV 官方文档的 GUI 功能的学习笔记。学习笔记中会记录官方给出的例子,也会给出自己根据官方的例子完成的更改代码,同样彩蛋的实现也会结合多个知识点一起实现一些小功能,来帮助我们对学会的知识点进行结合应用。 如果有喜欢我笔…

简单易懂的PyTorch线性层解析:神经网络的构建基石

目录 torch.nn子模块Linear Layers详解 nn.Identity Identity 类描述 Identity 类的功能和作用 Identity 类的参数 形状 示例代码 nn.Linear Linear 类描述 Linear 类的功能和作用 Linear 类的参数 形状 变量 示例代码 nn.Bilinear Bilinear 类的功能和作用 B…

申请Certum IP证书的方法

Certum是波兰的一家数字证书颁发机构,可以为只有公网IP地址的网站提供IP证书的申请服务,为网站传输信息进行加密,提高网站SEO排名。Certum旗下的IP证书产品不多,其中比较受欢迎的就是DV基础型IP证书。今天就随SSL盾小编了解Certum…

社交通证经济学:Web3时代的社交奖励系统

Web3时代的到来带来了区块链技术和去中心化的新范式,社交媒体也在这场变革中经历着深刻的改变。 社交通证经济学作为Web3时代社交媒体的创新实践,重新定义了用户在平台上的价值和奖励体系。本文将深入探讨Web3时代社交通证经济学的背景、工作原理以及对…

最新版docker-compose安装

Ubuntu/Kali 下载安装最新版 docker-compose # FastGit加速 sudo curl -L "https://hub.fgit.cf/docker/compose/releases/download$(curl -L -i -s -o /dev/null -w "%{url_effective}\n" https://hub.fgit.cf/docker/compose/releases/latest | awk -F tag …

2024新年烟花代码完整版

文章目录 前言烟花效果展示使用教程查看源码HTML代码CSS代码JavaScript 新年祝福 前言 在这个充满希望和激动的2024年,新的一年即将拉开帷幕,而数字科技的创新与发展也如火如荼。烟花绚丽多彩的绽放,一直以来都是新年庆典中不可或缺的元素。…

学会这13个 Git 命令就够了!

提到版本控制工具Git,相信很多开发者都知道,其实我们在99%的日常时间里,只需要学会以下13个git命令就行了,让我们来一起看看吧! 1、git init 这个命令是初始化一个新的Git仓库,即在当前目录中创建一个名为…

为什么伦敦金交易应该使用4小时以上的周期?

做伦敦金前,要先对市场走势进行分析。而分析市场总是涉及时间周期等问题,这也是投资者们存在疑惑的地方。到底我们需要选择什么时间周期呢?各人有个人的看法,而其中一种意见是,我们不应该使用低于4小时的周期&#xff…

【方差分析原理简介】

文章目录 方差分析(Analysis of Variance,简称ANOVA)1 方差分析流程2 借助sklean进行基于方差分析的特征筛选3 总结 方差分析(Analysis of Variance,简称ANOVA) 卡方检验更多的会考虑在衡量两个离散变量是…

【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)

Java后门机制 — sun.misc.unsafe 打破Java的安全管控关于Unsafe的编程建议实例化Unsafe后门对象使用sun.misc.Unsafe创建实例单例模式处理实现浅克隆(直接获取内存的方式)直接使用copyMemory原理分析 密码安全使用Unsafe类—示例代码 运行时动态创建类超…

敦煌网、国际站自养号测评:店铺销售怎么提高?

随着互联网的快速发展,电子商务成为了现代商业的重要组成部分。在众多电商平台中,敦煌网作为中国文化艺术产品的专业电商平台,吸引了大量消费者的关注。然而,如何提高敦煌网的销售业绩,成为了商家们共同面临的挑战。 …

diffusers加速文生图速度;stable-diffusion、PixArt-α

参考: https://pytorch.org/blog/accelerating-generative-ai-3/ https://colab.research.google.com/drive/1jZ5UZXk7tcpTfVwnX33dDuefNMcnW9ME?usp=sharing#scrollTo=jueYhY5YMe22 大概GPU资源8G-16G;另外模型资源下载慢可以在国内镜像:https://aifasthub.com/ 1、加速…

查看Linux磁盘空间

(1)、该命令会列出当前系统所有挂载的文件系统以及它们的使用情况,包括总容量、已用空间、可用空间、使用百分比等信息 df -h如果查看某一个文件夹的,可以 df -h folderName (2)、计算指定目录下所有文件和子目录所占用的磁盘空间大小,并以人类可读的格…

机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

LLM开发者必读论文:检索增强(RAG)生成技术综述! 目录: 1、动手实战人工智能 Hands-on Al2、huggingface的NLP、深度强化学习、语音课3、Awesome Jupyter4、计算机科学热门论文5、LLM开发者必读论文:检索增强 (RAG) 生…