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

2024-01-07 14:04

本文主要是介绍计算机组成原理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、屏蔽技术的应用
中断屏蔽技术可以给程序控制带来灵活性,当出现程序不想要的问题而停机时,可以设置屏蔽字,屏蔽该中断,使得机器继续运行,

这篇关于计算机组成原理18——CPU的结构和功能2(书中重点及习题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580145

相关文章

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心