当前位置:网站首页>中断和异常的处理与抢占式多任务
中断和异常的处理与抢占式多任务
2022-08-04 05:59:00 【raindayinrain】
1.了解保护模式下x86处理器中断和异常中断的工作机制,知道中断和异常中断的分类,认识中断描述符表IDT,中断门,陷阱门。
2.使本章程序完全在平坦内存模型下工作,进一步加深对分页机制,TLB,虚拟地址空间等概念的理解,了解在平坦内存模型下进行汇编语言程序设计的特点。
3.使用硬件中断实施抢占式多任务切换,彻底理解任务切换的原理和过程。在这个过程中,学习一种简单的任务调度算法,及单向链表的遍历,节点的追加,插入,删除,移动。
4.学习宏汇编技术
5.学习几条新的x86处理器指令,包括lidt,invlpg,bound和ud2等。
17.1.中断和异常
17.1.1.中断和异常概述
中断和异常的作用是指示系统中的某个地方发生了一些事件,需引起处理器(包括正执行中的程序和任务)的注意。中断和异常发生时,典型的结果是迫使处理器将控制从当前正执行的程序或任务转移到另一个例程或任务中去。该例程叫中断处理程序,或者异常处理程序。如果是一个任务,则发生任务切换。
1.中断
硬件中断:
软中断
外围硬件设备发出的中断信号引发,以请求处理器提供服务。当I/O接口发出中断请求时,会被像8259A和I/O APIC这样的中断控制器收集,并发送到处理器。
硬件中断完全随机,与处理器的执行并不同步。当中断发生时,处理器要先执行完当前的指令,然后才对中断进行处理。
软中断是由int n 指令引发的中断处理,n是中断号或类型码。
2.异常
异常是内部中断,处理器内部产生。
处理器执行一条非法指令,或因条件不具备,指令不能正常执行时, 将引发这种类型的中断。
异常分为三种,
第一种是程序错误异常,指处理器在执行指令的过程中,检测到了程序中的错误,并由此引发的异常。
第二种是软件引发的异常。这类异常通常由into,int3和bound指令主动发起。这些指令允许在指令流的当前点上检查实施异常处理的条件是否满足。
举例,into指令在执行时,将检查EFLAGS寄存器的OF标志位,如满足为"1"的条件,则引发异常。
第三种是机器检查异常。这种异常是处理器型号相关的,也即,每种处理器都不太一样。无论如何,处理器提供了一种对硬件芯片内部和总线处理进行检查的机制,当检测到有错误时,将引发此类异常。
根据异常情况的性质和严重性。又分为:
1.故障
如处理器执行访问内存指令,发现那个段或页不在内存。
先进行异常处理,然后再次执行异常指令。
2.陷阱
常用于调试,比如单步中断指令int3和溢出检测指令into。
陷阱中断允许程序或任务在从中断处理过程返回之后,继续进行而不失连续性。
异常处理,然后执行下一条指令。
3.终止
最严重的错误。
诸如硬件错误,系统表(gdt,ldt)中数据不一致或无效。
操作系统通常只能把任务从系统中抹去。
当中断和异常发生时,NMI和异常的向量是由处理器自动给出的;硬件中断的向量是由I/O中断控制器芯片送给处理器的;软中断的向量是由指令中的操作数给出的。
从80486之后开始,处理器内部一般集成了浮点运算部件x87 FPU,不再需要安装独立的数学协处理器,所以,有些和浮点运算有关的异常可能不会产生。wait和fwait指令用于主处理器和浮点处理部件之间的同步,它们应当放在浮点指令之后, 以捕获任何浮点异常。
从1993的pentium处理器开始,引入了用于加速多媒体处理的多媒体扩展技术,该技术使用单指令多数据执行模式,以便于在64位的寄存器内实施并行的整数计算。
和SIMD有关的异常从Pentium 3处理器开始引入。
bound指令用于检查数组的索引是否在边界之内,其格式为
bound r16, m16
bound r32, m32
其具有两个操作数,目的操作数是寄存器,包含了数组的索引;源操作数必须指向内存位置,在那里包含了两个成对出现的字或双字,分别是数组索引的下限和上限。如执行bound指令时,数组的索引小于下标的下限,或大于下标的上限,则产生异常。
ud2指令从Pentium Pro处理器开始引入,它只有操作码而没操作数,机器代码为0F 0B
ud2
执行该指令时,会引发一个无效操作码异常。
该指令典型地用于软件测试。异常处理后,再次执行触发异常指令。
17.1.2.中断描述符表,中断门,陷阱门
---next
边栏推荐
- 类图规范总结
- 异步编程之promise,任务队列,事件循环
- 详解CAN总线:常用CAN连接器的使用方法
- Detailed explanation of DenseNet and Keras reproduction code
- CSRF和SSRF漏洞
- Database: Organize Four Practical SQL Server Scripting Functions
- 有人试过用NPGsql驱动连接openGauss开发应用的吗?
- entity、domain、vo、pojo的区别与联系
- matlab的2DCNN、1DCNN、BP、SVM故障诊断与结果可视化
- Software: Recommend a domestic and very easy-to-use efficiency software uTools to everyone
猜你喜欢
反射与枚举
MySQL面试题大全(陆续更新)
【愚公系列】2022年07月 Go教学课程 027-深拷贝和浅拷贝
nacos 返回 403 unknown user 太他么坑了 源码解析
七夕送礼,心愿直抵!
2DCNN, 1DCNN, BP, SVM fault diagnosis and result visualization of matlab
Time Series Forecasting Based on Reptile Search RSA Optimized LSTM
Activiti 工作流引擎 详解
Nacos 原理
Error occurred while trying to proxy request项目突然起不来了
随机推荐
对象的扩展补充
Gramm Angle field GAF time-series data into the image and applied to the fault diagnosis
数据特征预处理——缺失值的查看方式及处理
matlab的2DCNN、1DCNN、BP、SVM故障诊断与结果可视化
Online public account article content to audio file practical gadget
2DCNN, 1DCNN, BP, SVM fault diagnosis and result visualization of matlab
【C# - 方法封装】数据转换
Sql优化总结!详细!(2021最新面试必问)
2022年7月总结
天鹰优化的半监督拉普拉斯深度核极限学习机用于分类
ThreadLocal内存泄漏问题讲解
简析强制缓存和协商缓存
TypeScript基本类型、类、封装、继承、泛型、接口、命名空间
[漏洞问题] log4j漏洞 关于2.17.0升级到2.18.0 方案
MySQL基础(DDL、DML、DQL)
matlab让我的旧手机起死回生
什么是多态。
Activiti 工作流引擎 详解
MySQL内存淘汰策略
idea使用@Autowired注解爆红原因及解决方法