计算机组成原理18——CPU的结构和功能2(书中重点及习题)

本系列文章是学习了网课《哈尔滨工业大学--计算机组成原理》之后,用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点,如有不同意见,欢迎在评论区讨论。

目录

中断系统

除了前面讲到的中断方式实现CPU和IO设备交换信息;当计算机发生意外事件时,也会进入中断以进行处理;或者说在机器的运行过程中,需要处理其中的运算结果,也需要中断,等等。

为了处理异常情况、实时控制等等,提出了中断的概念。

一般有哪些类型的中断:

1、人为设置的中断,在程序中人为设置,当出发某个条件之后,停止现行程序而转入中断处理。

2、程序性事故,定点溢出、浮点溢出、操作码不能识别等等,由于程序设置不当而引起的中断。

3、硬件故障,插件接触不良、通风不良、电源掉电等,硬件设备故障。

4、IO设备,IO设备被启动之后,准备就绪,向CPU发出中断请求。

5、外部事件,比如用户通过键盘来中断现行程序属于外部事件。
中断系统需要解决的问题:

1、各中断源如何向CPU提出中断请求

2、当多个中断源同时提出中断请求时,如何确定响应的顺序

3、CPU在什么条件、什么时候、什么方式来响应中断

4、CPU响应中断后如何保护现场

5、CPU响应中断后,如何停止原程序的执行而转入中断服务程序的入口地址

6、中断服务结束之后,CPU如何恢复现场,如何返回到原程序的间断处

7、在中断中又产生中断,该如何处理

中断请求标记和中断判优逻辑

中断请求标记寄存器列出了各种类型的中断,当标记变成1的时候,表明对应的中断源提出了中断请求。

可以看到,中断请求触发器越多,计算机的处理中断的能力越强。

在同一时刻可能接收到多个中断源的请求,但是一个中断系统在任一时刻,只能响应一个中断源的请求。中断系统必须对多个中断源请求进行判断、排序,根据若不响应该中断,将会对计算机造成损坏的严重程度进行排序。有两种排队方式:

1、硬件排队

下图中,按照中断优先级的高低进行排队,优先级高的设备产生中断请求之后,会封住其它低优先级的设备产生的中断请求。

2、软件排队

通过程序编写,从高到低查询。

中断服务程序入口地址的寻找

确定中断的响应优先级之后,也就是确定了响应哪一个中断,之后就需要去寻找中断源对应的中断程序了。有两种方式:

1、硬件查询法,上述的中断判优之后,会产生一个中断向量,这个中断向量相当于确定了中断源之后,产生的一个输出结果。这个中断向量会引导我们找到中断服务程序的入口地址。

向量地址可以放一条无条件转移指令,比如中断之后,将12H送至PC,PC执行会直接跳转到中断服务函数中;

或者12H中放中断程序的地址,将这个地址传入PC,再去执行。

在单片机中经常可以看到这个中断向量表。具体是上面两种方式中的哪一个,我还没研究过。

2、软件查询法

用软件方式一个一个查询,从优先级高的向低的查,当查到某一中断源有请求时,安排一条转移指令,直接指向该中断源的中断服务程序入口地址,机器自动进入中断处理。

中断响应

CPU不是一有中断即可相应的,它是定时查询。

中断系统中有一个允许中断触发器EINT,当EINT为1时,有中断请求,CPU可以响应;当EINT为0时,CPU不响应中断。

一般来说,定时查询在CPU指令执行周期结束之后,指令执行周期接收后,若有中断,CPU则进入中断周期;若无中断,则进入下一条指令的取指周期。

如果说计算机中经常指令周期执行时间很长,CPU会安排查询断点定时发送查询信号。

当CPU响应中断后,进入中断周期,在这个过程中,CPU会自动完成一系列操作,不需要人为控制。

你也控制不了,这一系列操作没有对应的指令,由硬件自动完成,一般称之为中断隐指令。

自动操作,具体如下:

1、保护程序断点,即将当前PC内容保存起来,方式不限,存储器也好,堆栈也好。

2、寻找中断服务程序的入口地址,有两种方式,硬件向量法和软件查询法

3、关中断,为了确保响应了一个中断源之后,后续操作不会被干扰,在中断周期内需要先关中断,防止CPU在中断周期内一直响应中断。

保护现场和恢复现场

中断现场需要:保护程序断点、保护CPU内部各寄存器内容的现场。

程序断点由中断隐指令完成,寄存器的现场可以由用户实现。

恢复现场由中断服务程序完成。

中断屏蔽技术

多重中断

当CPU在执行某个中断服务程序时,又有另外一个中断源提出了新的中断请求;但是这个CPU又响应了这个中断请求,暂停了目前的中断服务程序,转而去执行新的中断服务程序,称之为多重中断。

若CPU执行一个中断时,对其它的中断不做响应,称之为单重中断。

实现多重中断的条件

1、提前开中断

上面讲到中断周期,硬件自动操作中断隐指令的时候,会关中断,此时不允许CPU响应新的中断请求;所以要想实现多重中断,需要在中断周期之后,中断程序保护完现场之后,开启中断,这样在执行中断服务程序的时候,才可以响应新的中断。

2、优先级别高的中断源可以中断其它中断优先级别低的中断源

优先级别:A > B > C > D

先出现的是,B和C,先响应B,再去执行C

B执行完之后,接着去执行C,这是产生了D,但是级别比C低,不响应,C执行完之后 ,再去执行D

此时又出现了A,A级别高于D,响应A,执行完成A之后,再接着执行D

屏蔽技术

1、屏蔽触发器和屏蔽字

排队器中,每个中断源加入屏蔽触发器MASK,当MASK = 1时,该中断源无法产生中断请求(INTP = 0);当MASK = 0时,该中断源才可以产生中断请求。

下面的屏蔽字对应于MASK。

比如说1级中断源被响应了,那我就设置一个1级屏蔽字,会屏蔽所有的中断源。

比如我4级中断源被响应了,那我设置一个4级屏蔽字,1-3位是0,没有被屏蔽,表明依然可以被1-3优先级的中断源打断,但是比4低的中断源全部被屏蔽了,无法被低优先级的中断源打断。

2、屏蔽技术改变优先等级

优先级包含响应优先级和处理优先级。

响应优先级是CPU响应各中断源请求的优先次序,这种次序是硬件线路决定的,不便于改动。

处理优先级是CPU实际对中断源请求的处理次序,可以采用屏蔽技术改变,如果不采用屏蔽技术,处理的次序就是响应的次序。

下面是一个采用屏蔽技术的例子:

原屏蔽字:处理顺序(屏蔽字的级别)为A> B > C > D,现改为A> D > C > B

响应优先级为A> B > C > D

现在ABCD同时提出中断请求

先按照中断级别的高低,去处理A,A的屏蔽字是1111,屏蔽所有中断源,所以A响应之后,并执行完成回到主程序

B的响应优先级高于C、D,所以B被响应,但是B的屏蔽字为0100,可以被A、C、D打断,这时又C和D两个中断请求,但是C的响应优先级高于D,所以C被响应

C被响应之后,其屏蔽字为0110,可以被A和D打断,这时A执行完,D还在发中断请求,所以C又被D打断,D被响应

D被响应之后,设置屏蔽字0111,可以被A打断,但是A执行完成了,所以D可以安安心心的执行,直到执行完成D,返回到C

C执行完成之后,返回到B,最终B执行完成,返回到主程序。

3、屏蔽技术的应用

中断屏蔽技术可以给程序控制带来灵活性,当出现程序不想要的问题而停机时,可以设置屏蔽字,屏蔽该中断,使得机器继续运行,

相关推荐
szxinmai主板定制专家14 分钟前
基于 ZYNQ ARM+FPGA+AI YOLOV4 的电网悬垂绝缘子缺陷检测系统的研究
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
光子物联单片机17 分钟前
STM32G474单片机开发入门(八)内部FLASH详解及读写实战
stm32·单片机·嵌入式硬件·mcu
BreezeJuvenile29 分钟前
通用定时器_输入捕获介绍及案例实操
stm32·单片机·嵌入式硬件·输入捕获·通用定时器
时空自由民.1 小时前
无人机系统耗电,低功耗管理问题解决方法(chatgpt)
单片机·嵌入式硬件·无人机
时空自由民.2 小时前
无人机系统耗电,低功耗管理问题解决方法(腾讯元宝)
单片机·嵌入式硬件·无人机
牛马大师兄3 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
夜月yeyue3 小时前
STM32 Flash 访问加速器详解(ART Accelerator)
linux·单片机·嵌入式硬件·uboot·bootloard
A9better4 小时前
嵌入式开发学习日志37——stm32之USART
stm32·嵌入式硬件·学习
国科安芯7 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计7 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件