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

2024-01-10 17:28

本文主要是介绍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等技术内容,立即学习

这篇关于CHS_01.1.3.1+操作系统的运行机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591541

相关文章

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟

操作系统安全保护

操作系统安全概述 概念:满足安全策略要求,具有响应安全机制及安全功符合特定安全标准,在一定约束条件下 能抵御常见网络安全威胁,保障自身安全运行及资源安全 安全等级:根据安全功能和安全保障要求分为 用户自主保护级  系统审计保护级 安全标记保护级 结构化保护级 访问验证保护级 操作系统作用: 负责计算系统的资源管理、支撑和控制各种应用程序运行,为用户提供计算机系统管理接口 是构成网络信息

Linux操作系统命令集(一)

最近开了操作系统的课,弄着虚拟机的linux系统命令学学 文件和目录操作命令: ls:列出目录内容 示例:ls -l 以长格式列出目录内容cd:切换目录 示例:cd /home/user 切换到 /home/user 目录mkdir:创建目录 示例:mkdir new_directory 创建名为 new_directory 的目录rmdir:删除空目录touch:创建空文件或更新文件的时间戳

Llama 3.1大模型的预训练和后训练范式解析

Meta的Llama大型语言模型每次出新版本,都会是一大事件。前段时间他们不仅发布了3.1的一个超大型的405亿参数模型,还对之前的8亿和70亿参数的模型做了升级,让它们在MMLU测试中的表现更好了。 不同模型在MMLU基准测试中的表现 他们还出了一个92页的技术报告《Llama 3 Herd of Models》(https://arxiv.org/abs/2407.21783),里

操作系统分页式存储管理

每次输入地址后,计算出页号,若页号越界,则给出错误提示。否则依次调用FIFO和LRU算法,这里值得注意的是,由于我们的FIFO算法先于LRU算法被调用,那么当在处理FIFO算法时,我们暂且不将位视图相应位置做变化,留到处理LRU算法再做处理。 对于FIFO、LRU算法的缺页,我们分两种情况考虑,第一种是模拟栈内还有空间,那么直接将其入栈。第二种是模拟栈内无空间,要发生置换。发生置换时把模拟栈最底

linux定时监听ssh服务是否启动-------麒麟操作系统永久关闭swap

linux监听ssh服务是否启动 1、监听脚本2、定时任务3、麒麟操作系统,永久关闭swap 1、监听脚本 #在/usr/local/bin目录下新建脚本文件 cd /usr/local/bintouch check_sshd.sh#给可执行权限chmod +x /usr/local/bin/check_sshd.sh 脚本内容如下: #!/bin/bashs

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描