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

操作系统运行机制

文章目录

  • 操作系统运行机制
    • 特权指令VS非特权指令
    • 内核态VS用户态
    • 中断和异常
      • 内中断(异常)
      • 外中断
      • 中断机制基本原理
      • 中断处理过程
    • 系统调用
      • 系统调用和库函数的区别
      • 为什系统调用时必须的?
      • 什么功能需要用到系统调用
      • 系统调用的过程
      • 小结
    • 操作系统内核


操作系统运行机制

特权指令VS非特权指令

“指令”就是CPU能识别、执行的命令,和Linux的命令不一样,Linux的命令是交互式的命令行,也就是前面所提到的联机命令接口

应用程序:普通程序员写的就是普通“应用程序”,应用程序只能使用非特权指令,如:加法指令、减法指令等

内核程序:比如windows或者是苹果公司写的操作系统内核,由很多内核程序组成操作系统内核。操作系统内核作为“管理者”,有时会让CPU执行一些“特权指令”,这些指令影响巨大,只允许“管理者”操作。这些操作系统内核程序具有原子性

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

内核态VS用户态

CPU有两种状态:内核态用户态

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

在CPU中有一个寄存器叫做程序状态字寄存器(PSW),其中有个二进制位,用1和0分别表示内核态和用户态。

在这里插入图片描述

CPU在什么时候会进行切换状态?

  1. 在刚开机的时候,操作系统要进行初始化,此时CPU处于内核态,操作系统内核程序先上CPU运行
  2. 开机完成后,用户可以启动某个应用程序
  3. 操作系统内核程序在合适的时候会主动让出CPU,让该应用程序上CPU上运行(此时操作系统内核在让出CPU之前,会用一条特权指令把PSW的标志位设置为用户态
  4. 应用程序运行在用户态

在这里插入图片描述

  1. 假设此时有黑客在应用程序中植入了一条特权指令,企图破坏操作系统
  2. CPU发现接下来要执行的这条指令是特权指令,但是自己此时又处于用户态
  3. 这个非法事件会引发一个中断信号CPU检测到中断信号后,会立即变为核心态,并停止运行当前的应用程序,转而运行处理中断信号的内核程序)
  4. 中断使操作系统再次夺回CPU的控制权
  5. 操作系统会对引发中断的事件进行处理,处理完了再把CPU使用权交给别的应用程序

在这里插入图片描述

也就是说:

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

用户态到内核态:由中断引发,硬件自动完成转换过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。除了非法使用特权指令之外,但凡需要操作系统介入的地方,都会触发中断信号访管指令仅能在用户态下使用,执行访管指令可以将用户态转变为核心态

中断和异常

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

中断是让操作系统夺回CPU使用权的唯一途径,如果没有中断机制,一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。

内中断(异常)

内中断:内中断也被称为异常、陷入(trap),与当前执行的指令有关,中断信号来源于CPU内部

比如说CPU执行一条非法指令就发生内中断,比如说企图在用户态执行特权指令,或者说执行除法时发现除数为0,都会引发一个中断信号。

又比如说有时候应用程序向请求操作系统内核的服务,此时会执行一条特殊的指令(陷入指令),该指令会引发一个内部中断信号,再由处理中断信号的内核程序来处理这个中断信号。所谓的系统调用就是由陷入指令完成的。

内中断其实是在CPU内部执行的指令发生了异常,比如地址越界、算数溢出,而且异常不能被屏蔽,一旦出现应该立即处理

外中断

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

比如说:时钟中断(由时钟部件发来的中断信号),通过这个时钟中断信号就可以时间多道程序并发运行。假设时钟部件每50ms会发送一条中断指令。

有两个应用程序分别在运行,需要执行对应指令。假设程序1的指令现在CPU上执行,执行了两条指令后已经50ms了,此时时钟部件就会向CPU发送一个中断信号,这个中断信号是和CPU无关的,也就是说是在CPU外部的.

在这里插入图片描述

当CPU检测到一个中断信号后,它就会先暂定此时正在执行的应用程序,然后去执行一个处理时钟中断的内核程序,所以CPU就会对时钟中断信号进行处理,同时从用户态转换为内核态。

在这里插入图片描述

在内核态下CPU开始执行这个内核程序来处理刚才时钟部件发送的中断信号,这个内核程序执行的过程当中发现应用程序1刚刚已经执行了50ms的时间了,为了公平起见,于是这个内核程序就会把CPU的使用权交给第二个程序。

此时就又会切换为用户态,第二个应用程序就开始执行对应指令。

在这里插入图片描述

但第二个应用程序执行了一系列指令之后,如果又过了50ms,那么时钟部件则又会给CPU发送一个中断信号,和上面类似就又会切换成内核态,同时执行对应于的内核程序,又会发现程序2已经执行了50ms了就又会把CPU的使用权交给程序1。

这样就实现了应用程序的并发执行

除此之外还有来自一些输入输出设备发来的中断信号,比如说打印机。比如说world这个应用程序请求打印机的打印服务,那么打印机输出完成之后就会向CPU发送中断信号,来通知CPU的任务已经完成,接下来CPU会使用相对应的内核程序来对这个中断信号进行处理。这些都是CPU外部的中断,和CPU内部没有关系。CPU在每条指令执行完毕之后,都会例行的检查一下是否有外部中断需要处理。

在这里插入图片描述

中断机制基本原理

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

在这里插入图片描述

中断处理过程

  1. 关中断:CPU响应后中断后,首先要保护程序的现场状态,在保护现场的过程中,CPU不应响应更高级中断源的中断请求。否则若现场保存不完整,在中断服务程序后,也就不能正确地恢复并继续执行先行程序
  2. 保存断点:为保证中断服务程序执行完毕后,能正确返回到原来程序,必须将原来的程序的断点(程序计数器)保存起来
  3. 引出中断服务程序:取出中断服务程序的入口地址送入程序技术器PC
  4. 保存线程和屏蔽字:进入中断服务后,首先要保存现场,现场信息一般是指程序状态字寄存器PSWR和某些通用寄存器的内容
  5. 开中断:允许更高级中断请求得到响应
  6. 执行中断服务程序:中断请求目的
  7. 关中断:保证在恢复现场和屏蔽字恢复到原理的状态
  8. 恢复现场和屏蔽字:中断服务程序的最后一条指令,通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。

系统调用

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

应用程序可以通过系统调用请求获得操作系统内核的服务,这个过程会发送用户态和内核态的切换

系统调用和库函数的区别

普通应用程序可以直接进行系统调用,也可以使用库函数。有的库函数涉及到系统调用(创建文件),有的不涉及(获取最大值)。

编程语言,向上提供库函数,有时候会将系统调用封装成库函数,以影藏系统调用的一些细节,是程序员编程更加方便。

操作系统,向上提供系统调用,使得上层程序能请求内核的服务。

在这里插入图片描述

为什系统调用时必须的?

生活场景:去学校打印店打印论文,你点击了 Word 的“打印”选项,打印机开
始工作。
你的论文打印到一半时,另一位同学点击了了 浏览器的的“打印”按钮,开始打印他
自己的论文。
如果两个进程可以随意地、并发地共享打印机资源,会发生什么情况?
两个进程并发运行,打印机设备交替地收到WPS和Wrd 两个进程发来的打印请
求,结果两篇论文的内容混杂在一起了…

在这里插入图片描述

解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供**“系统调用”**,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

什么功能需要用到系统调用

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

系统调用的过程

假设有一个应用程序在执行一些指令,此时这个CPU在用户态,但这个应用程序想要执行系统调用的指令的时候,就需要用传参数的指令给CPU的寄存中传递一些必要的参数,传递的参数可能会有多条,主要看的是这个系统调用需要传递几个参数。操作系统会根据传递的参数来判断应用程序到底需要哪种类型的服务

在这里插入图片描述

当这些参数都放入CPU的寄存器之后,应用程序就会执行一条特殊的指令,叫做陷入指令。而这个陷入指令的执行会引发一个内中断信号,CPU在检测到这个内中断信号后返现这个信号是trap指令发出的,此时就会先暂停这个应用程序,再去执行处理陷入指令的内核程序,而这个程序就是系统调用入口程序,而这个程序是操作系统内核程序,CPU就会转换为内核态进行运行。

在这里插入图片描述

而这个系统调用入口程序,就会检查CPU寄存器中的参数,来判断应用程序需要哪种类型的系统调用。

在这里插入图片描述

知道应用程序需要执行哪种类型的系统调用程序后,操作系统就会去执行对应的系统调用程序。

小结

  1. 陷入指令是非特权指令,它是在用户态执行的,执行陷入指令后意味着应用程序把CPU的使用权主动的交还给了操作系统的内核,用这样的方式来请求操作系统的内核服务。
  2. 所以陷入指令执行之后,就会触发一个内中断,然后CPU会切换为内核态,转向的去执行一个处理系统调用的内核程序。
  3. 等这个内核程序执行完毕后,就会返回到原来的应用程序接着往下执行。
  4. 发出系统调用请求是在用户态,而对系统调用的相应的处理是在核心态下进行。
  5. 陷入指令就是trap指令/访管指令

操作系统内核

像时钟管理、中断处理这样的功能是在操作系统内核中完成的,而所谓的原语指的就是在运行过程中不能打断的,即使在运行的过程中有外部中断信号过来了,CPU仍然会先把原语执行完成再去处理中断信号。

像Centos和乌班图的开发团队,其主要工作是实现非内核的功能,它们发行的操作系统,其实都是使用的Linux内核。

在这里插入图片描述

内核是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序

大内核:如下图,把所有功能都包含在操作系统当中的就是大内核

微内核:如下图,如果内核中只是保留与硬件最接近的这些部分,就是小内核

在这里插入图片描述

需要注意的如果采用的是微内核的这种方式,不处于内核中的功能是运行在用户态,处于内核中的功能是运行在内核态的。这就会对系统的性能照成影响。

举个例子:

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

如果是大内核,只需要两次的状态转换,而微内核则需要6次的状态转换。

在这里插入图片描述

需要注意的是内核态和用户态之间的切换是会有开销的,需要消耗一定的系统资源和时间,频繁的进行内核态和用户态的切换是会降低系统性能的


相关文章:

操作系统运行机制

文章目录 操作系统运行机制特权指令VS非特权指令内核态VS用户态中断和异常内中断(异常)外中断中断机制基本原理中断处理过程 系统调用系统调用和库函数的区别为什系统调用时必须的?什么功能需要用到系统调用系统调用的过程小结 操作系统内核 操作系统运行机制 特权…...

mathtype7.4破解永久激活码

MathType(数学公式编辑器)是由Design Science公司研发的一款专业的数学公式编辑工具。MathType功能非常强大,尤其适用于专门研究数学领域的人群使用。使用MathType让你在输入数学公式的时候能够更加的得心应手,各种复杂的运算符号也不在话下。 MathType最…...

66 内网安全-域横向批量atschtasksimpacket

目录 演示案例:横向渗透明文传递at&schtasks 案例2-横向渗透明文HASH传递atexec-impacket案例3-横向渗透明文HASH传递批量利用-综合案例5-探针主机域控架构服务操作演示 传递攻击是建立在明文和hash值的一个获取基础上的攻击,也是在内网里面常见协议的攻击&…...

PCI9054入门1:硬件引脚定义、时序、FPGA端驱动源码

文章目录 1:PCI9054的FPGA侧(local侧引脚定义)2:PCI9054的C模式下的读写时序3:FPGA代码部分具体代码: 1:PCI9054的FPGA侧(local侧引脚定义) 而PCI9054的本地总线端的主要…...

多媒体应用设计师 第17章 多媒体应用场景的技术应用和实现示例

口诀 思维导图 2020...

react151618刷新几次的问题

结论: 16 hooks版本 默认render1次 同步中,无论多少种类还是次数,都render 1次。 异步中,无论多少种类还是次数,1个种类执行1次,多次的话,用n*2。 18 hooks版本 默认render2次, 同步…...

【Spring】IOC容器与Bean的常用属性配置

文章目录 1.前言2.IOC容器2.1 BeanFactory 容器2.2 ApplicationContext 容器 3.Bean的常用属性配置4. 总结 1.前言 在之前的文章-IOC的快速入门中讲过Bean这个概念. 本来就来介绍容器与Bean的常用属性配置 在Spring框架中,Bean指的是被Spring加载生成出来的对象。 …...

2023年下半年 系统集成项目管理工程师 真题考点(一二三四批次)(10月28、29)(网友回忆版)

文章目录 第一批部分考点整体管理采购管理风险管理二:EAC 第二批部分考点如下: 第三批部分考点如下: 第一批 部分考点 1、案例考了关键路径和工期,风险管理、采购、风险、招投标,整体管理。 2、计算题有关键路径和挣…...

读韩都衣舍,谈权力转移的激励制度

这是一个很久之前的商业案例。 在大公司,管理过于复杂,成了现在公司管理的大问题。大公司的流程长,市场的突击速度慢,以及员工的积极性差,成为大公司的一个潜在的弊病。而最近,从韩都衣舍的创始人赵迎光的…...

私有云:【10】VCenter安装win10

私有云:【10】VCenter安装win10 1、ESXI挂载win10镜像2、VCenter安装win102.1、创建虚拟机2.2、启动虚拟机 此WIN10用来作为以后的远程桌面 1、ESXI挂载win10镜像 2、VCenter安装win10 2.1、创建虚拟机 创建虚拟机 设置名称下一步 选择计算机资源 选择NFS存储 设置…...

[Java/力扣100]判断两棵二叉树是否相同

我希望通过这道题,能进一步了解递归思想和“树是递归定义的”这句话 分析 我们的目的是写一个方法来检验两棵树是否相同 什么叫“两棵树相同”?——相同的位置存在相同的结点 有三种情况:1、两棵树一颗为空一颗不为空——不相同&#xff…...

BEC商务英语主题 定价策略|柯桥学商务英语口语

Factors in Pricing Decisions 影响价格制定的因素 A firm cannot determine a product’s price without considering several factors that affect price. 在制定产品价格时,公司如果不考虑影响价格的各种因素是无法制定的。 Managers must take into account t…...

第七章 ObjectScript 一般系统限制

文章目录 第七章 ObjectScript 一般系统限制 字符串长度限制下标限制Global的最大长度 第七章 ObjectScript 一般系统限制 字符串长度限制 字符串的长度有限制:3,641,144 个字符。 重要的是要认识到字符串不仅仅是从输入/输出设备读取的结果。它们可以显示在其他上…...

【Python百练——第1练】使用Python求100以内的所有偶数

作者:Insist-- 个人主页:insist--个人主页 作者简介:梦想从未散场,传奇永不落幕,持续更新优质网络知识、Python知识、Linux知识以及各种小技巧,愿你我共同在CSDN进步 欢迎点赞👍收藏&#x1f4c…...

springboot心理咨询管理系统

springboot心理咨询管理系统,java心理咨询管理系统,心理咨询管理系统 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(8.x版本都可) 硬件环境&#xf…...

Java-API简析_java.net.URL类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/134024288 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…...

C语言浮点型在内存中的存储

目录 前言: 引言: 浮点数存储规则 举个栗子: TIP: 单精度浮点数存储的模型(float) 双精度浮点数存储的模型(double) IEEE对 M 的特殊规定 IEEE对 E 的特殊规定 小试牛刀 先…...

elementPlus | el-tabs 标签管理路由页面

<script setup> import { useRouter } from vue-router const router useRouter()const tabClick (tab)>{const idx tab.indexif(idx 0){router.push(/)}... } </script> <template><!-- 撑开 stretch"true" --><el-tabs type&quo…...

如何使用ffmpeg制作透明背景的视频

最近我们尝试在网页上叠加数字人讲解的功能&#xff0c;发现如果直接在网页上放一个矩形的数字人视频&#xff0c;效果会很差&#xff0c;首先是会遮挡很多画面的内容&#xff0c;其次就是不管使用任何任务背景&#xff0c;画面都和后面的网页不是很协调&#xff0c;如图所示&a…...

C#中对于using的使用方式

导入命名空间 使用list需要导入 System.Collections.Generic;这个命名空间 using System.Collections.Generic; using UnityEngine;public class UsingTest : MonoBehaviour {void Start(){List<int> intlist new List<int>();} }省略类名 using UnityEngine; …...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...