操作系统的运行机制详解


操作系统的 运行机制

操作系统的运行机制
俩种指令
特权指令
俩种处理器状态
核心态
俩种程序
内核程序
非特权指令
用户态
应用程序

一条高级语言的代码翻译过来可能会对应多条机器指令 :

C语言代码
编译器:翻译
机器指令:二进制

指令 ” :处理器(CPU) 能识别、 执行的最基本命令

程序运行的过程其实就是CPU执行一条一条的机器指令的过程

注: 很多人习惯把 Linux、 Windows、 MacOS 的 “ 小黑框 ” 中使用的命令也称为“ 指令 ” , 其实这是“ 交互式命令接口 ” , 注意与本节的 “ 指令 ” 区别开。 此 “ 指令 ” 指二进制机器指令

内核程序 & 应用程序

我们普通程序员写的程序就是“ 应用程序 ”

微软、 苹果有一帮人负责实现操作系统, 他们写的是“ 内核程序

由很多内核程序组成了“ 操作系统内核 ” , 或简称“ 内核(Kernel) ”

内核是操作系统最重要最核心的部分, 也是最接近硬件的部分甚至可以说, 一个操作系统只要有内核就够了(eg: Docker—>仅需Linux内核)

操作系统的功能未必都在内核中, 如图形化用户界面 GUI

##特权指令 & 非特权指令

应用程序只能使用“ 非特权指令 ” , 如:加法指令、 减法指令等

操作系统内核作为 “管理者” , 有时会让CPU执行一些“特权指令” , 如: 内存清零指令。 这些指令影响重大,只允许“ 管理者 ” —— 即操作系统内核来使用

在CPU设计和生产的时候就划分了 特权指令非特权指令, 因此CPU执行一条指令前就能判断出其类型

内核态 & 用户态

CPU 有两种状态, “内核态” 和“用户态

处于内核态时, 说明此时正在运行的是内核程序, 此时可以执行特权指令

处于用户态时, 说明此时正在运行的是应用程序, 此时只能执行非特权指令

拓展: CPU 中有一个寄存器叫 程序状态字寄存器(PSW) , 其中有个二进制位, 1 表示“ 内核态 ” , 0 表示“ 用户态 ”

别名: 内核态 = 核心态 = 管态; 用户态 = 目态

内核态、 用户态 的切换

内核态 -> 用户态: 执行一条特权指令——修改PSW的标志位为“ 用户态 ” , 这个动作意味着操作系统将主动让出CPU使用权

用户态 -> 内核态: 由“ 中断 ” 引发, 硬件自动完成变态过程, 触发中断信号意味着操作系统将强行夺回CPU的使用权

除了非法使用特权指令之外, 还有很多事件会触发中断信号。 一个共性是, 但凡需要操作系统介入的地方, 都会触发中断信号

启动过程:

  • 刚开机时, CPU 为“ 内核态 ” , 操作系统内核程序先上CPU运行

  • 开机完成后, 用户可以启动某个应用程序

  • 操作系统内核程序在合适的时候主动让出 CPU, 让该应用程序上CPU运行,操作系统内核在让出CPU之前, 会用一条特权指令把 PSW 的标志位设置为“ 用户态

  • 应用程序运行在“ 用户态

  • 此时, 一位猥琐黑客在应用程序中植入了一条特权指令, 企图破坏系统…

  • CPU发现接下来要执行的这条指令是特权指令, 但是自己又处于“ 用户态

  • 这个非法事件会引发一个中断信号,CPU检测到中断信号后, 会立即变为“ 核心态 ” , 并停止运行当前的应用程序, 转而运行处理中断信号的内核程序

  • 中断 ” 使操作系统再次夺回CPU的控制权

  • 操作系统会对引发中断的事件进行处理, 处理完了再把CPU使用权交给别的应用程序

    操作系统的运行机制
    简单了解程序的运行原理
    高级语言编写代码_机器指令
    程序运行的过程就是CPU执行指令的过程
    俩类程序
    内核程序
    应用程序
    俩类指令
    特权指令
    非特权指令
    俩种处理器状态
    用户态\目态
    内核态\管态\核心态
    内核
    内核**kernel**是操作系统最重要最核心的部分
    由很多内核程序组成的操作系统内核
    任何换态
    内核态-到-用户态
    一条修改PSW的特权指令
    用户态-到-内核态
    由中断触发,硬件自动完成

两种指令、 两种处理器状态、 两种程序

有的指令“人畜无害” 。 比如: 加、 减、 乘、 除 这些普通的运算指令。

有的指令有很高的权限。 比如: 内存清零指令。 如果用户程序可以使用这个指令, 就意味着一个用户可以将其他用户的内存数据随意清零, 这样做显然是很危险的。

指令
特权指令:如内存清零指令
非特权指令:如普通的运算指令

特殊指令:不允许用户程序使用

程序状态字寄存器(PSW) 中的某标志位来标识当前处理器处于什么状态。 如 0 为用户态, 1 为核心态

用户态:此时CPU只能执行非特权指令

核心态:特权指令、 非特权指令都可执行

俩种处理器状态
用户态$目态$
核心态$管态$

内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令, 也可以执行非特权指令, 运行在核心态

应用程序:为了保证系统能安全运行, 普通应用程序只能执行非特权指令, 运行在用户态

俩种程序
内核程序
应用程序

操作系统的内核

用户
应用程序$_软件_$
非内核功能
进程管理\存储器管理\设备功能等功能
时钟管理
中断处理
原语__$_设备驱动\CPU切换等_$
裸机
实现计时功能
原语是一种特殊的程序,是最靠近硬件的部分,运行具有原子性

内核是计算机上配置的底层软件, 是操作系统最基本、 最核心的部分。

实现操作系统内核功能的那些程序就是内核程序

有的操作系统不把这部分功能归为“ 内核功能 ” 。 也就是说, 不同的操作系统, 对内核功能的划分可能并不一样

操作系统内核
时钟管理
实现计时功能
中断处理
负责实现中断机制
原语
是一种特殊的程序
处于操作系统最底层,最靠近硬件的部分
运行时间短,调用频繁
这种程序具有原子性__-__只能一气呵成,不能中断
对系统资源进行管理的功能
进程管理
存储器管理
设备管理
操作系统的体系结构
大内核
将操作系统的主要功能模块都作为系统内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
微内核
只把最基本的功能保留在内核
优点:内核功能少,结构清晰,方便维护
缺点:需要频繁在用户态与核心态切换,性能低

比喻:

内核就是企业的管理层, 负责一些重要的工作。

只有管理层才能执行特权指令, 普通员工只能执行非特权指令用户态核心态之间的切换相当于普通员工和管理层之间的工作交接

大内核: 企业初创时体量不大, 管理层的人会负责大部分的事情。 优点是效率高; 缺点是组织
结构混乱, 难以维护。

微内核: 随着企业体量越来越大, 管理层只负责最核心的一些工作。 优点是组织结构清晰, 方
便维护; 缺点是效率低。

特权指令只能在核心态下执行

内核程序只能在核心态下执行

OS的运行机制和体系机构
运行机制
俩种指令
特权指令
非特权指令
俩种处理器状态
核心态
用户态
俩种程序
内核程序
应用程序
操作系统内核
时钟管理
中断管理
原语
是一种特殊的程序,具有原子性,不可中断
对系统资源进行管理的功能
进程管理
存储器管理
设备管理
操作系统的体系结构
大内核
优点:性能高
缺点:内核庞大,结构复杂,难以维护
微内核
优点:功能少,结构清晰,方便维护
缺点:频繁在用户态与核心态切换,性能低

操作系统的体系结构

操作系统的体系结构
大内核/单内核/宏内核
微内核

操作系统的内核

操作系统内核需要运行在内核态

操作系统的非内核功能运行在用户态

计算机系统的层次结构

用户
应用程序_$软件$
非内核功能_$GUI$
进程管理/存储器功管理/设备管理
原语_$设备驱动/CPU切换$
裸机
时钟管理
中断处理

内核是操作系统最基本、 最核心的部分。

实现操作系统内核功能的那些程序就是内核程序

操作系统内核
时钟管理
实现计时功能
中断处理
负责实现中断机制
原语
一种特殊的程序
处于操作系统最底层,最接近硬件的部分
对系统资源进行管理的功能
进程管理
存储器管理
设备管理

操作系统的体系结构

image-20200526213017841

image-20200526213035723

应用程序想要请求操作系统的服务, 这个服务的处理同时涉及到进程管理、 存储管理、 设备管理

变态的过程是有成本的, 要消耗不少时间, 频繁地变态会降低系统性能

操作系统的体系结构
大内核
将操作系统的主要功能模块都作为系统的内核,运行在核心态
优点:高性能
缺点:内核代码庞大,结构混乱,难以维护
微内核
把最基本的功能保留在内核
优点:内核功能少,结构清晰,方便维护
缺点:需要频繁在核心区和用户态之间切换,性能低

系统调用

系统调用
向应用程序提供接口

系统调用

操作系统作为用户和计算机硬件之间的接口, 需要向上提供一些简单易用的服务。 主要包括命令接口程序接口。 其中, 程序接口由一组系统调用组成

系统调用 ” 是操作系统提供给应用程序(程序员/编程人员) 使用的接口, 可以理解为一种可供应用程序调用的特殊函数, 应用程序可以通过系统调用来请求获得操作系统内核的服务

操作系统向上提供的接口
给用户用
GUI
命令接口
脱机命令接口
联机命令接口
给应用程序用
程序接口_$系统调用$

库和系统调用区别

不涉及系统调用的库函数: 如:“ 取绝对值 ” 的函数

涉及系统调用的库函数: 如 “ 创建一个新文件 ” 的函数

操作系统内核共享资源进行统一的管理, 并向上提供“ 系统调用 ” , 用户进程想要那种共享资源, 只能通过系统调用向操作系统内核发出请求。 内核会对各个请求进行协调处理

普通应用程序可直接进行系统调用,也可使用库函数,有的库函数涉及系统调用,有的不涉及
编程语言向上提供库函数,有时将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序编程更方便
操作系统向上提供系统调用,使的上层程序能请求内核的任务
裸机
应用程序
C库函数
系统调用
操作系统

应用程序通过系统调用请求操作系统的服务。 而系统中的各种共享资源都由操作系统内核统一掌管, 因此凡是与共享资源有关的操作(如存储分配I/O操作文件管理等) , 都必须通过系统调用的方式向操作系统内核提出服务请求, 由操作系统内核代为完成。 这样可以保证系统的稳定性安全性, 防止用户进行非法操作

系统调用_$功能分类$
设备管理
完成设备的请求/释放/启动_等功能
文件管理
完成文件的读写/创建/删除_等功能
进程管理
完成进程的创建/撤销/阻塞/唤醒_等功能
进程通信
完成进程之间的消息传递/信号传递_等功能
内存管理
完成内存的分配/回收_等功能

系统调用的过程

该中断由陷入指令引发, 因此转入相应的中断处理程序——即 系统调用的入口程序

传递系统调用参数 -> 执行陷入指令(用户态) -> 执行相应的内请求核程序处理系统调用(核心态)-> 返回应用程序

  1. 陷入指令是在用户态执行的, 执行陷入指令之后立即引发一个内中断, 使CPU进入核心态

  2. 发出系统调用请求是在用户态, 而对系统调用的相应处理在核心态下进行

系统调用
操作系统对应用程序提供的接口
系统调用与库函数
有的库函数对系统调用的进一步封装
有的库函数没有使用系统调用
功能
设备管理
文件管理
进程管理
进程通信
内存管理
调用过程
传参
陷入指令/trap/访管
由操作系统内核程序处理系统调用请求
返回应用程序

中断和异常

中断和异常
中断的作用
中断的类型
内中断_$异常$
外中断
中断机制的基本原理

中断的作用

中断 ” 会使CPU由用户态变为内核态, 使操作系统重新夺回对CPU的控制权

CPU 上会运行两种程序, 一种是操作系统内核程序( 整个系统的管理者 ), 一种是应用程序

在合适的情况下, 操作系统内核会把CPU的使用权主动让给应用程序

中断 ” 是让操作系统内核夺回CPU使用权的唯一途径

如 没有“ 中断 ” 机制, 那么一旦应用程序上CPU运行, CPU就会一直运行这个应用程序

内核态 -> 用户态: 执行一条特权指令——修改PSW的标志位为“ 用户态 ” , 这个动作意味着操作系统将主动让出CPU使用权

用户态 -> 内核态: 由“ 中断 ” 引发, 硬件自动完成变态过程, 触发中断信号意味着操作系统将强行夺回CPU的使用权

我有俩把钥匙,一把是共享单车的( 用户态 ),一把是法拉利的 ( 内核态 ),我要速度激情,闪电飘逸就肯定要开法拉利,不可能用共享单车遨游天空把,我开着法拉利可以到富人区,也能到贫民区,开着共享单车就只能在贫民区,要是去富人区,会被打断狗腿,所以,要开法拉利去装*呀

##中断的类型

中断的类型
内中断
外中断

内中断:与当前执行的指令有关,中断信号来源于CPU内部

外中断:与当前执行的指令无关,中断信号来源于CPU外部

内中断可以看出家里的媳妇要你去干事,你不能抗拒呀,外中断,就是外面的彩旗要你去做事,你也要去处理

内中断

与当前执行的指令有关,中断信号来源于CPU内部

若当前执行的指令是非法的, 则会引发一个中断信号

如:

​ 试图在用户态下执行特权指令

​ 执行除法指令时发现除数为 0

有时候应用程序想请求操作系统内核的服务, 此时会执行一条特殊的指令——陷入指令, 该指令会引发一个内部中断信号

执行“ 陷入指令 ” , 意味着应用程序主动地将CPU控制权还给操作系统内核。

“ 系统调用 ” :通过陷入指令完成的

外中断

当前执行的指令无关,中断信号来源于CPU外部

每一条指令执行结束时, CPU都会例行检查是否有外中断信号

时钟中断——由时钟部件发来的中断信号

I/O中断——由输入/输出设备发来的中断信号

中断的分类

中断的分类
内中断_$_异常\例外_$
陷入\陷阱_trap
故障_fault
终止_abort
外中断_中断_$
时钟中断
I\O中断请求

中断机制的基本原理

不同的中断信号, 需要用不同的中断处理程序来处理。 当CPU检测到中断信号后, 会根据中断信号的类型去查询“ 中断向量表 ” , 以此来找到相应的中断处理程序在内存中的存放位置

中断处理程序一定是内核程序, 需要运行在“ 内核态

外面彩旗太多,当有彩旗找你,你肯定要用微信查一下是几号鱼,要不然找到她,都不知道叫什么,然后你要开着法拉利去,不能用共享单车去撩吧。

中断和异常
中断的作用
让操作系统的内核剥夺CPU的控制权
让CPU从用户态转换为内核态
中断的分类
内中断_异常\例外
陷入\陷阱_trap
故障_fault
终止_abort
外中断_中断
时钟中断
I/O中断请求
中断机制的基本实现原理
检查中断信号
内中断:CPU在执行指令时会检查是否有异常发生
外中断:每个指令周期末尾,CPU都会检查是否有外中断信号需要处理
找到相应的中断处理程序
通过_中断向量表_实现
OS概叙
OS的概念和功能
向上提供接口
对下层功能的拓展
对系统资源的管理
OS的发展/特征
OS的运行机制
俩种程序/俩种CPU状态/俩种指令
OS体系结构
大内核/微内核
系统调用
作用
系统调用过程
陷入/trap/访管指令
中断和异常
何作用
区别
处理

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

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

相关文章

Spring实战项目【从0到1】:博客系统(上)

目录 1. 项目介绍2. 项目准备2.1 数据库准备2.2 创建项目2.3 配置文件2.4 准备前端页面2.5 测试 3. 项目公共模块3.1 实体类3.2 公共层 4. 业务代码4.1 持久层代码4.2 实现博客列表4.3 实现博客详情 1. 项目介绍 使用SSM框架(Spring、Spring MVC、MyBatis框架)实现…

电脑技巧:轻松查看笔记本电脑电池的使用情况

目录 方法一:手工执行cmd命令 方法二:直接封装为Bat脚本 电池损耗程度介绍 Battery report字段中英文对照表 在大家日常办公和生活当中,笔记本电脑已成为非常重要工具。然而,随着笔记本电脑用的越久,电池的损耗难以…

创新指南|人工智能行为预测如何改变营销

在我们现在工作的人工智能营销新世界中,人工智能行为预测不仅作为一个流行词出现,而且作为一股革命力量,有望重新定义营销格局。 这种创新方法利用人工智能 (AI)的强大功能 来预测消费者行为,利用庞大而复杂的数据集来收集以前无法…

企业级数据治理学习总结

1. 水在前面 “数据治理”绝对是吹过的牛里面最高大上的题目了,本来想直接以《企业级数据治理》为题来水的,码字前又跑去图书馆借了几本书,翻了几页才发现自己连半桶水都提不起,撑死只能在小屁孩跟前吹吹牛。 好吧,实在…

【前端】-【防止接口重复请求】

文章目录 需求实现方案方案一方案二方案三 需求 对整个的项目都做一下接口防止重复请求的处理 实现方案 方案一 思路:通过使用axios拦截器,在请求拦截器中开启全屏Loading,然后在响应拦截器中将Loading关闭。 代码: 问题&…

详详详解动归数组常见习题(C/C++)

文章目录 最长递增数组序列(必须连续)dp[i] dp[i - 1] 1;最长递归子序列(不需要连续)dp[i] max(dp[i], dp[j] 1);俩层循环总结一维dp最长重复子数组最长公共子序列总结二维dp最终目标[3692. 最长连续公共子序列 - AcWing题库]…

【C++庖丁解牛】C++11---lambda表达式 | 包装器

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. lambda表达式1.1 C98中…

ip地址与硬件地址的区别是什么

在数字世界的浩瀚海洋中,每一台联网的设备都需要一个独特的标识来确保信息的准确传输。这些标识,我们通常称之为IP地址和硬件地址。虽然它们都是用来识别网络设备的,但各自扮演的角色和所处的层次却大相径庭。虎观代理小二将带您深入了解IP地…

主成分分析在R语言中的简单应用:使用mvstats包

在数据科学领域,主成分分析(PCA)是一种广泛使用的技术,主要用于数据降维和探索性数据分析。PCA可以帮助我们发现数据中的模式,减少数据集的复杂性,同时保持数据中最重要的特征。本文将介绍如何在R语言中使用…

PID详解汇总

一、参照文章 PID的各种算法优缺点 二、位置式PID 优点:静态误差小,溢出的影响小。 缺点:计算量很大&#x

【PCL】教程 example2 3D点云之间的精确配准(FPFH特征对应关系估计变换矩阵)

这段代码主要实现了点云之间的配准功能,旨在通过估计点云的特征并找到最佳的对应关系来计算一个变换矩阵,从而可以将源点云(src)变换到目标点云(tgt)的坐标系统中。 代码功能和方法总结如下: 估…

上位机开发PyQt5(二)【单行输入框、多行输入框、按钮的信号和槽】

目录 一、单行输入框QLineEdit QLineEdit的方法: 二、多行输入框QTextEdit QTextEdit的方法 三、按钮QPushButton 四、按钮的信号与槽 信号与槽简介: 信号和槽绑定: 使用PyQt的槽函数 一、单行输入框QLineEdit QLineEdit控件可以输入…

黑马点评项目个人笔记+项目优化调整

博客须知 本篇博客内容来源与黑马点评项目实战篇-16.用户签到-实现签到功能_哔哩哔哩_bilibili,作者对视频内容进行了整合,由于记笔记时图片使用的是本地路径,所以导致博客的图片无法正常显示,如果有图片需求可以下载上方的pdf须…

程序员老鸟的 Pascal 语言菜鸟教程 -- 快速体验 Pascal

有些程序设计语言和编译器教材会以pascal语言的程序为例,这里写一个快速掌握简单应用的介绍。 1,安装 free pascal 编译器 ubuntu 22.04 直接通过 apt 源安装,此时的版本号为 3.2.2 1.1 安装 sudo apt install fp-compiler 1.2 简单测试 fpc…

【maven】pom文件详解和延伸知识

【maven】pom文件详解 【一】maven项目的pom文件详解【1】maven项目的目录结构【2】根元素和必要配置【3】父项目和parent元素【4】项目构建需要的信息【5】项目依赖相关信息(1)依赖坐标(2)依赖类型(3)依赖…

JavaScript this 上下文深度探索:综合指南涵盖隐式与显式call、apply、bind、箭头函数、构造函数等用法于多样场景

JavaScript中的this关键字代表函数执行的上下文环境,核心在于确定函数内部访问的当前对象。它根据函数调用方式动态变化,对事件处理、对象方法调用等至关重要。通过.call(), .apply(), .bind()或箭头函数控制this,可确保代码逻辑正确绑定对象…

python可视化学习笔记折线图问题-起始点问题

问题描述: 起始点的位置不对 from pyecharts.charts import Line import pyecharts.options as opts # 示例数据 x_data [1,2,3,4,5] y_data [1, 2, 3, 4, 5] # 创建 Line 图表 line Line() line.add_xaxis(x_data) line.add_yaxis("test", y_data) li…

Redis---------缓存更新,缓存穿透\雪崩\击穿

三种更新策略 内存淘汰是Redis内存的自动操作,当内存快满了就会触发内存淘汰。超时剔除则是在存储Redis时加上其有限期(expire),有限期一过就会自动删除掉。而主动更新则是自己编写代码去保持更新,所以接下来研究主动更新策略。 主动更新策略…

PS入门|网络报名证件照上传总提示审核失败是什么原因?

前言 之前小白遇到过有小伙伴报考了某个证书的考试,但在报名的过程出现了问题:证件照都是按照要求制作的,但为啥总是没有审核通过? 这个很简单:分辨率出现了问题。 啥?明明都是按照软件提示的分辨率要求制…

Python中的观察者模式及其应用

观察者模式是设计模式之一,实现一对多依赖,当主题状态变化时通知所有观察者更新。在Python中,通过自定义接口或内置模块实现观察者模式,可提高程序灵活性和扩展性,尤其适用于状态变化时触发操作的场景,如事…