中断相关内容大全

  1. 中断基本概念:程序中断指计算机执行现行程序过程中,出现某种急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序
  2. 中断请求的分类:(内中断不可屏蔽:“CPU只有在处于中断允许状态时才能响应外部设备的中断请求”是对的,但“CPU只有在处于中断允许状态时才能响应中断请求”就是错的,因为内中断不需要处于中断允许状态才能响应)
    • 内中断(异常)
      • 故障:也称为失效。如:
        • 指令译码时遇到“非法操作码”
        • 取指令或数据时发生“缺页”或“保护错”
        • 整除0
        • 浮点数上溢
      • 自陷(trap):事先在程序中用一条特殊指令或某种方式设置特殊控制标志来人为设置一个陷阱,执行到这些指令时将无条件或有条件地自动调出操作系统内核程序或陷入特定的异常处理程序进行处理。如:
        • 用于程序调试的“单步跟踪”和“断点设置”功能
        • 系统调用指令、条件自陷指令
      • 终止:执行指令过程中发生了严重错误,只能终止进程或重启系统,如:
        • DRAM或SRAM发生校验错
    • 外中断(中断)
      • 外设请求(如I/O操作完成发出的中断信号、时钟中断)
      • 人工干预(如用户强行终止一个进程)
  3. 单重中断处理过程:正常取指令、执行指令->指令执行完毕后例行检查是否有中断->(是的话)【中断隐指令】中断响应、程序断点进栈、关中断、向量地址赋给PC->【中断服务程序】保护现场、(各种)中断服务、恢复现场、开中断、中断返回。中断隐指令+中断服务程序=中断处理过程
    • 中断隐指令:是CPU在检测到中断请求时自动完成的一系列动作,即下面三个都是由硬件完成的(中断隐指令名字的由来,就是它是由硬件自动完成的,而不需要操作系统的参与,可以保证系统运行可靠正确)
      • 关中断:为了保护中断现场期间不被新的程序中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着正确执行
      • 保存断点和程序状态:即保存断点处的程序计数器(PC)和程序状态字寄存器(PSW)中的内容。因为必须将中断服务程序的首地址和程序状态字装入PC和PSW之后才能转到中断服务程序执行,因此原来在PC和PSW中的断点和状态信息应在CPU响应中断过程中先由硬件自动保存到某个特定的地方(栈或专门寄存器)
      • 识别中断源并转中断服务程序:实质就是取出中断服务程序的入口地址并传送给PC(袁书这里写的是“CPU通过相应步骤得到所响应的中断源对应的中断服务程序首地址和初始程序状态字,并把它们分别送PC和PSW,这样,在中断响应结束后的下一个时钟周期,CPU就转入相应的中断服务程序执行)
    • 中断服务程序:其实这个只是一个名字,它的第二步才是执行中断服务程序。可以把这类操作归为由软件完成的(即操作系统完成的)
      • 保存现场:保存通用寄存器等的内容(用于程序恢复后CPU环境的恢复)
      • 中断服务:主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中
      • 恢复现场:通过出栈指令或取数指令把之前保存的信息送回寄存器中(恢复通用寄存器等)
      • 中断返回:通过中断返回指令回到原程序断点处(恢复PC和PSW)
  4. 多重中断:
    单重中断执行中断服务程序时不响应新的中断请求;而多重中断执行中断服务程序时可响应新的中断请求,优先级别高的中断源有权中断优先级别低的中断源
    单重中断多重中断
    中断隐指令关中断关中断
    保存断点(PC)保存断点(PC)
    送中断向量送中断向量
    中断服务程序保护现场保护现场和屏蔽字
    开中断
    执行中断服务程序执行中断服务程序
    关中断
    恢复现场恢复现场和屏蔽字
    开中断开中断
    中断返回中断返回
    • 中断屏蔽技术:用于多重中断,只有优先级别高的中断源才有权中断优先级别低的中断源。每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请中断。所有屏蔽触发器组合在一起构成一个屏蔽字寄存器。屏蔽字寄存器的内容称为屏蔽字(每个中断源都有一个自己的屏蔽字),屏蔽字中1越多,优先级越高。每个屏蔽字中至少有一个1(至少要能屏蔽自身的中断)
  5. 寻找中断服务程序入口地址的方法
    不同的中断源往往是不同设备,不同设备都有各自的中断服务程序,每个中断服务程序都有一个入口地址,称为中断向量。所有的中断向量都被集中存储在存储器的某一特定区域内,这个存储区称为中断向量表(即中断服务程序入口地址表)。中断向量=中断服务程序入口地址;中断向量地址=中断服务程序入口地址的地址=中断类型号。寻找中断服务程序入口地址有两种方式:
    • 软件方式:当查询到某个中断源有中断请求时,会执行一条条转指令,指向此中断源的中断服务程序的入口地址,随后进行中断处理。其中中断服务程序的入口地址由程序员事先确定。该方式方便灵活,不涉及硬件设备,但查询时间较长
    • 硬件方式(中断向量法):当CPU收到中断源发出的请求信号后,首先根据判优逻辑确定是否响应该请求,若响应,则向中断源发出中断响应信号。中断源接收到响应信号后就通过向量地址部分生成地址,这个地址有两种:
      • 中断服务程序的入口地址(中断向量):这种发给CPU后,可直接进入中断服务程序
      • 中断服务程序入口地址表的地址(中断向量表):这种发给CPU后,要先查中断向量表,根据该地址从表中找到中断向量,再用这个中断向量进入中断服务程序。如下图,中断服务程序入口地址表(中断向量表)的首地址保存在中断向量寄存器中,通过该地址找到中断向量表的位置,这里再根据获取到的中断入口地址1找到中断服务程序1。
        请添加图片描述

中断向量表:作用是根据中断类型号来确定中断处理程序的入口地址,记录了这样的一个映射信息。中断向量表存在于内存中,通常在开机时被操作系统初始化。因此“初始化中断向量表”这个过程是由操作系统完成的

  1. 引入了中断系统后,如何控制I/O设备的数据读写工作呢(具体步骤):
    请添加图片描述
    CPU运行一个程序,运行过程中需要使用外部设备(如要从外部设备输入一个字符的数据):
    • 首先通过一些I/O指令向I/O设备发出启动输入相关的命令,然后外部设备就可以去准备CPU想要的数据了。
    • 在外部设备准备数据的过程中,CPU可以继续执行之前的程序(没有引入中断系统时,程序查询是CPU启动I/O设备后,需要用轮询的方式不断检查I/O设备有没有完成输入工作;而引入中断系统后,CPU可以继续干以前的事情)
    • 当I/O设备完成工作后,会给CPU发送一个中断请求信号。CPU执行完一个指令k后,在指令周期的末尾会例行检查有无中断请求信号。检测到后对该设备发送一个确认信号
    • 处理中断:
      • 中断隐指令(硬件自动完成):关中断、保存断点PC和PSW、引出中断服务程序(即将PC的值变成中断处理程序的首地址,然后处理器会执行下一条指令,即先取指,取中断处理程序首地址的址)
      • 执行中断处理程序(操作系统完成):保护现场(由于到这里时PC和PSW已经被硬件自动存放在系统栈中了,这里的保护现场是指将处理器中的通用寄存器的值保存在栈中,这是因为中断处理程序可能会修改这些寄存器的值)、(根据不同的中断类型)提供中断服务、恢复现场(即恢复那些通用寄存器的值)、开中断、中断返回(即恢复PC和PSW的值)
    • 处理完中断后,返回k+1指令,CPU继续执行原来的指令,直到外设准
  2. 一个中断的发生会使得处理器硬件和软件都执行一系列操作,具体图如下:
    请添加图片描述
  3. 软中断指令(即陷阱指令)的具体作用过程(整体,包括操作系统中的部分):
    • 首先,CPU在用户态执行用户进程,当CPU执行到系统调用的封装函数对应的指令序列中的陷阱指令时,会从用户态陷入到内核态;
    • 转到内核态执行后,CPU根据陷阱指令执行时EAX寄存器中的系统调用号,选择一个相应的系统调用服务例程,在系统调用服务例程的执行过程中可能需要调用具体设备的驱动程序;
    • 在执行内核空间的I/O软件时,首先执行的是与具体设备无关的I/O软件,主要完成所有设备公共的I/O功能,并向用户层软件提供一个统一的接口。通常包括:设备驱动程序统一接口、缓冲处理、错误报告、打开与关闭文件以及逻辑块大小处理等。
      • 设备驱动程序统一接口:不同外设的设备驱动程序(实现该外设具体的I/O操作)千差万别,为此操作系统为所有外设的设备驱动程序规定了一个统一的接口,内核中与设备无关的I/O软件包含了所有外设统一的公共接口中的处理部分。如Linux系统调用函数执行中刚陷入内核后所执行的system_call()函数就是与设备无关的I/O软件的一部分
    • 在设备驱动程序执行过程中启动外设工作。设备驱动程序是与设备相关的I/O软件部分,每个设备驱动程序只处理一种外设或一类紧密相关的外设。每个或每类外设都有一个设备控制器,其中包含各种I/O端口。通过执行设备驱动程序,CPU可以向控制端口发送控制命令来启动外设,可以从状态端口来读取状态来了解外设及外设控制器的状态,可以从数据端口读取或发送数据。设备驱动程序中包含了很多I/O访问指令,通过这些指令可以访问设备控制器中的I/O端口,控制外设的I/O操作。
      • 设备驱动程序的实现方式不同,其不同体现在I/O控制方式的不同(程序直接控制I/O方式、中断控制I/O方式、DMA方式)
    • 外设准备好后发出中断请求,CPU响应中断后,就调出中断服务程序执行,在中断服务程序中控制主机与设备进行具体的数据交换。

举一个具体实例进行说明:在Linux系统中write操作的执行过程如下:假定用户程序中有一个语句调用了库函数printf(),在printf()函数中又通过一系列的函数调用最终转到调用write()函数。在write()函数对应的指令序列中,有一条用于系统调用的陷阱指令,在IA-32/Linux系统中就是指令int $0x80。该陷阱指令执行后,进程就从用户态陷入内核态执行。Linux中有一个系统调用的统一入口,即系统调用处理程序system_call()。CPU执行陷阱指令后便转到system_call()的第一条指令执行。在system_call()中,将根据EAX寄存器中的系统调用号跳转到当前系统调用对应的系统调用服务例程sys_write()去执行。system_call()执行结束时,从内核态返回到用户态下的陷阱指令后面一条指令继续执行。

  1. 四种I/O控制方式(若有)发生中断的时机
    • 程序直接控制方式:没有中断,CPU定期轮询检查I/O操作是否完成
    • 中断控制方式:每完成一个字的读写,I/O控制器向CPU发出一个中断信号
    • DMA控制方式:CPU向DMA控制器指明读写操作相关参数,每完成一整块数据的读写,DMA控制器向CPU发出中断信号
    • 通道控制方式 :CPU向通道指明通道程序在内存中的地址,通道执行完通道程序后,通道向CPU发出中断信号
  2. 中断响应优先级和中断处理优先级:
    • 中断响应优先级:是由查询程序或中断判优电路决定的,反映的是多个中断同时请求时选择哪个先被响应。
    • 中断处理优先级:通过在每个中断服务程序中设置对应的中断屏蔽字实现,反映了本中断与其他所有中断之间的处理优先关系。在多重中断系统中通常用中断屏蔽字对中断处理优先权进行动态分配
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值