操作系统(中断 异常 陷阱) ─── linux第28课

目录

1.硬件中断

2. 时钟中断

3. OS本质

4. 软件中断

缺页中断?内存碎片处理?除零野指针错误?

操作系统本质总结


操作系统是对软件硬件资源管理的软件

1.硬件中断

  • 中断向量表(IDT)就是操作系统的⼀部分,启动就加载到内存中了,中断向量表本质就是函数指针表
  • 外部设备触发的,中断系统运行流程,叫做硬件中断
  • 通过外部硬件中断(外设物理电路链接了cpu的针脚),操作系统就不需要对外设进行任何周期性的检测或者轮询.
  • 假设用户按下键盘上的一个键,键盘硬件会发送一个中断信号给CPU。CPU检测到这个信号后,保存当前程序状态,跳到键盘中断服务例程处理按键输入(根据中断号+查表执行处理方法),完成后,CPU恢复之前程序的状态,继续执行。

硬件中断的流程通常包括以下几个步骤:

  1. 中断触发:当外部设备或系统内部条件满足中断触发条件时,它会向CPU发送一个中断信号。

  2. 中断响应:CPU检测到中断信号后,会暂停当前正在执行的程序,保存当前程序的状态(包括程序计数器、寄存器状态等)。

  3. 中断服务例程(Interrupt Handler):CPU根据传入的中断号跳转到预定义的中断服务例程(Interrupt Service Routine,ISR)地址(此地址在操作系统中的中断向量表)执行。此时知道了中断号和中断向量表 ,使用IDT[终端号]就可以执行处理方法

  4. 中断处理:中断服务例程执行实际处理中断事件,如读取键盘输入、处理错误恢复、更新定时器处理等。

  5. 中断返回:中断服务例程完成后,CPU从中断返回到被暂停的程序继续执行,恢复之前的状态。

2. 时钟中断

问题:

  1. 问题一: 进程可以在操作系统的指挥下,被调度,被执行,那么操作系统自己被谁指挥,被谁推动执行呢?
  2. 问题二: 外部设备可以触发硬件中断,但是这个是需要用户或者设备自己触发,有没有自己可以定期触发的设备?
  • 计算机中需要严格把控时间,例如单cpu执行多进程需要调度(调度不一定是切换,进程时间片到了才需要切换),要严格按照时间片.
  • 时钟源(Clock Source)是提供时间基准信号的设备或机制,老式的时钟源在cpu外部 ,新式的时钟源在CPU内部
  • 时钟源以固定周期一直发硬件中断给CPU ,时钟源的IDT[终端号] 的中断服务进程调度  (类似于硬件中断的中断服务是外设相关操作) ,可以使得OS一直调度进程 . 时钟源每触发一次 正在调度的进程时间片就减少一次,减完了就切换进程  ,这样,操作系统不就在硬件的推动下,自动调度了么!!!
  • 时钟源的频率也就是主频 ,也就解释了CPU为什么会有主频?为什么主频越快,CPU越快?

答案一: OS在被时钟源推动执行

答案二:时钟源自己以固定周期触发 

3. OS本质

如果是这样,操作系统不就可以躺平了吗?对,操作系统自己不做任何事情,需要什么功能,就向中断向量表里面添加方法即可. 

操作系统的本质:就是⼀个死循环!

void main(void) /* 这⾥确实是void,并没错。 */ 
{    /* 在startup 程序(head.s)中就是这样假设的。 */ .../** 注意!! 对于任何其它的任务,'pause()'将意味着我们必须等待收到⼀个信号才会返 * 回就绪运⾏态,但任务0(task0)是唯⼀的意外情况(参⻅'schedule()'),因为任 * 务0 在任何空闲时间⾥都会被激活(当没有其它任务在运⾏时), * 因此对于任务0'pause()'仅意味着我们返回来查看是否有其它任务可以运⾏,如果没 * 有的话我们就回到这⾥,⼀直循环执⾏'pause()'。 */for (;;)pause();} // end main

4. 软件中断

  • 上述外部硬件中断,需要硬件设备触发。
  • 有没有可能,因为软件原因,也触发上面的逻辑?有!叫做软中断
  • 软中断的目的是执行系统调用
  • 为了让操作系统支持进行系统调用,CPU也设计了对应的汇编指令(int 0X80或者 syscall),可以让CPU内部触发中断逻辑 .
  • 64位机器是syscall   ,32位机器是int 0x80

软中断过程: 先将想要调用的系统调用接口在系统调用表(sys_call_table)的下标index给CPU ,然后执行int 0X80或syscall 触发软中断,让CPU陷入内核阶段 ,OS会执行软中断服务中的sys_call_table[index]方法

问题:

  • 用户层怎么把系统调用号给操作系统?寄存器(⽐如EAX)
  • 操作系统怎么把返回值给用户?寄存器或者⽤⼾传⼊的缓冲区地址
  • 系统调用的过程,其实就是先int 0x80、syscall陷⼊内核,本质就是触发软中断,CPU就会自动执行系统调用的处理方法,而这个方法会根据系统调用号,自动查表,执行对应的方法
  • 系统调用号的本质:数组下标!

但是为什么我们在代码中调用系统调用接口用的都是::fork()  ::close()之类的 ,没有传过系统调用号 ,更不用说int 0x80、syscall了?

那是因为Linux的glibC标准库,给我们把⼏乎所有的系统调⽤全部封装了。

缺页中断?内存碎片处理?除零野指针错误?

缺页中断?内存碎⽚处理?除零野指针错误?这些问题,全部都会被转换成为CPU内部的软中断, 然后走中断处理例程,完成所有处理。有的是进行申请内存,填充页表,进行映射的。有的是用来 处理内存碎⽚的,有的是⽤来给⽬标进⾏发送信号,杀掉进程等等。

操作系统本质总结

中断是操作系统的“神经系统”,让CPU能高效响应外部事件,同时保证多任务调度的灵活性

  • 操作系统就是躺在中断处理例程上的代码块!也就是操作系统广泛利用中断机制来协调硬件与软件的交互
  • CPU内部的软中断,⽐如int 0x80或者syscall,我们叫做 陷阱 
  • CPU内部的软中断,⽐如除零/野指针等,我们叫做 异常。(所以,能理解“缺页异常” 为什么这么叫了吗?)
  • 陷阱(进程主动调用系统调用)和异常(CPU执行出错) 都是触发软件异常

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

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

相关文章

文件分片上传

1前端 <inputtype"file"accept".mp4"ref"videoInput"change"handleVideoChange"style"display: none;">2生成hash // 根据整个文件的文件名和大小组合的字符串生成hash值&#xff0c;大概率确定文件的唯一性fhash(f…

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

基于微信小程序的智慧乡村旅游服务平台【附源码】

基于微信小程序的智慧乡村旅游服务平台&#xff08;源码L文说明文档&#xff09; 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…

数据驱动的智能BMS革新:机器学习赋能电池健康预测与安全协同优化

传统电池管理系统&#xff08;BMS&#xff09;依赖等效电路模型和固定参数算法&#xff0c;面临电化学机理复杂、老化行为非线性、多工况适应性差等瓶颈。例如&#xff0c;健康状态&#xff08;SOH&#xff09;和荷电状态&#xff08;SOC&#xff09;估算易受温度、循环次数及电…

使用JSON.stringify报错:Uncaught TypeError: cyclic object value

具体错误 Uncaught TypeError: cyclic object valueonMouseOver Amap.vue:125renderMarker Amap.vue:84emit maps:1emit maps:1ci maps:1ui maps:1fireEvent maps:1jL maps:1Xt maps:1T maps:1<anonymous> amap.vue:49promise callback*nextTick runtime-core.esm-bundl…

Spring Boot 工程创建详解

2025/4/2 向全栈工程师迈进&#xff01; 一、SpingBoot工程文件的创建 点击Project Structure 然后按着如下点击 最后选择Spring Boot &#xff0c;同时记得选择是Maven和jar&#xff0c;而不是war。因为Boot工程内置了Tomcat&#xff0c;所以不需要war。 紧接着选择Spring We…

Java 8 的流(Stream API)简介

Java 8 引入的 Stream API 是一个强大的工具&#xff0c;用于处理集合&#xff08;如 List、Set&#xff09;中的元素。它支持各种操作&#xff0c;包括过滤、排序、映射等&#xff0c;并且能够以声明式的方式表达复杂的查询操作。流操作可以是中间操作&#xff08;返回流以便进…

4. Flink SQL访问HiveCatalog

一. 实验环境 Flink版本: 1.19.1 Hive版本: 2.1.3 Hadoop版本: 3.2.4二. 操作步骤 1.上传所需的jar包到Flink lib目录下 [roothadoop3 ~]# mv flink-sql-connector-hive-3.1.3_2.12-1.19.1.jar /www/flink-1.19.1/lib [roothadoop3 ~]# mv hadoop-mapreduce-client-core-3.2…

虚拟试衣间-云尚衣橱小程序-衣橱管理实现

衣橱管理实现 目标 (Goal): 用户 (User): 能通过 UniApp 小程序上传衣服图片。 后端 (Backend): 接收图片,存到云存储,并将图片信息(URL、用户ID等)存入数据库。 用户 (User): 能在小程序里看到自己上传的所有衣服图片列表。 技术栈细化 (Refined Tech Stack for this Pha…

HAL库 通过USB Boot进行APP程序升级

硬件&#xff1a;stm32f407VET6芯片&#xff1b; 软件&#xff1a;STM32CubeMx、Keil5 上位机&#xff1a;Dfuse DemoV3.06 这里给出通过在Bootlaoder中使用USB方式来更新APP程序的方法&#xff0c;首先我们编写一个自己的bootloader&#xff0c;关于bootloader的大致原理可以…

数据库权限获取

1. into outfile&#xff08;手写&#xff09; 1.1. 利用条件 • web 目录具有写入权限&#xff0c;能够使用单引号 • 知道网站绝对路径&#xff08;根目录&#xff0c;或则是根目录往下的目录都行&#xff09; • secure_file_priv 没有具体值&#xff08;在 mysql/my.ini…

关于ESP系列MCU的UART download原理

GPIO0&#xff0c;即BOOT&#xff0c;工作模式选择&#xff1a; 悬空/拉高&#xff1a;正常MCU启动工作状态 下拉接地&#xff1a;UARTDownload下载模式 如何进入UARTDownload下载模式&#xff1f; 先按下boot按键不放&#xff0c;再按下rst按键 / en按键&#xff0c;随后释放…

无需安装Office进行 Word、Excel操作的微软开发库

微软的确有一些无需安装完整 Office 就能进行 Word、Excel 操作的开发库&#xff0c;以下为你介绍&#xff1a; 1. Microsoft Graph API 简介&#xff1a;Microsoft Graph API 是一个强大的 RESTful API&#xff0c;能让开发者通过调用接口访问 Office 365 服务里的各种资源&…

【一起来学kubernetes】34、ReplicaSet使用详解

Kubernetes ReplicaSet 使用详解 ReplicaSet 是 Kubernetes 中用于确保指定数量的 Pod 副本持续运行的核心控制器。它通过动态调整 Pod 副本数&#xff0c;保障应用的高可用性和弹性。以下是其核心功能、配置方法及最佳实践&#xff1a; 一、ReplicaSet 核心作用 维持 Pod 副本…

【力扣hot100题】(034)LRU缓存

做完这题已经没有任何力气写链表题了。 思路很简单&#xff0c;就是调试特别的痛苦。 老是频频报错&#xff0c;唉。 class LRUCache { public:struct ListNode{int key,val;ListNode* next; ListNode* prev;ListNode() : key(0), val(0), next(nullptr), prev(nullptr) {}L…

基于随机森林算法的信用风险评估项目

引言 这是一个基于随机森林算法的德国信用风险评估项目&#xff0c;主要目的是构建一个机器学习模型来评估德国客户的信用风险&#xff0c;判断客户是否为高风险客户。 # -*- coding: utf-8 -*- """ 德国信用风险评估随机森林模型 """ # 基础…

亚马逊云科技携手 DeepSeek:开启企业级生成式 AI 新征程

文章目录 一、DeepSeek-R1模型的技术突破&#xff08;一&#xff09;卓越的性能表现&#xff08;二&#xff09;独特的训练方法&#xff08;三&#xff09;丰富的模型生态 二、亚马逊云科技平台上的部署与优化&#xff08;一&#xff09;灵活的部署方式&#xff08;二&#xff…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0&#xff08;也就是 Windows Vista 和 Windows Server 2008&#xff09;开始&#xff0c;微软引入了一种全新的日志文件格式&#xff0c;称为 evtx。这种格式取代了之前 Windows 系…

LangChain/Eliza框架在使用场景上的异同,Eliza通过配置实现功能扩展的例子

LangChain与Eliza框架的异同分析 ‌一、相同点‌ ‌模块化架构设计‌ 两者均采用模块化设计&#xff0c;支持灵活扩展和功能组合。LangChain通过Chains、Agents等组件实现多步骤任务编排‌&#xff0c;Eliza通过插件系统和信任引擎实现智能体功能的动态扩展‌。模块化特性降低…

英语口语 -- 常用 1368 词汇

英语口语 -- 常用 1368 词汇 介绍常用单词List1 &#xff08;96 个&#xff09;时间类气候类自然类植物类动物类昆虫类其他生物地点类 List2 &#xff08;95 个&#xff09;机构类声音类食品类餐饮类蔬菜类水果类食材类饮料类营养类疾病类房屋类家具类服装类首饰类化妆品类 Lis…