我是靠谱客的博主 勤奋大门,最近开发中收集的这篇文章主要介绍I/O方式 —— 程序中断方式一、基本概念二、工作流程三、程序中断和调用子程序的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、基本概念


需要CPU中断自己的任务,转而执行I/O设备与存储器之间的数据传送。

在这里插入图片描述
在这里插入图片描述

二、工作流程


  1. 中断请求:中断源向CPU发送中断请求信号。
  2. 中断判优:多个中断源同时提出请求时,通过中断判优逻辑响应一个中断源。
  3. 中断响应及中断隐指令。
  4. 中断服务程序寻址
  5. 执行中断服务程序
    在这里插入图片描述

步骤一:中断请求

(1)中断请求分类

  • 程序中断方式属于I/O 中断,因此属于外中断。

  • 硬件中断:通过外部的硬件产生的中断。硬件中断属于外中断。

  • 软件中断:通过某条指令产生的中断,这种中断是可以变成实现的,软件中断属于内中断。
    在这里插入图片描述

(2)中断请求标记

  • 每个中断源向CPU发出中断请求的时间是随机的。
  • 为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。以方便CPU知道是哪个硬件发起中断请求
  • 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。

在这里插入图片描述

步骤二:中断判优

中断判优既可以用硬件实现,也可用软件实现

一般来说,

  1. 硬件故障中断属于最高级,其次是软件中断;
  2. 非屏蔽中断优于可屏蔽中断;
  3. DMA请求优于I/0设备传送的中断请求;
  4. 高速设备优于低速设备;
  5. 输入设备优于输出设备;
  6. 实时设备优于普通设备。

(1)硬件实现

硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中
在这里插入图片描述

(2)软件实现

软件实现是通过查询程序实现的。

在这里插入图片描述

步骤三:中断响应(中断隐指令)

CPU响应中断必须满足以下3个条件:

  1. 中断源有中断请求。
  2. CPU允许中断即开中断。
  3. 一条指令执行完毕,且没有更紧迫的任务。

(1)外中断

CPU是在统一的时刻,即每条 指令执行阶段结束前 向接口发出 中断查询信号,以获取 I/O 的中断请求,而在每条 指令执行阶段结束时 向接口发出 CPU中断响应

(2)内中断

内中断的发生跟指令的执行有关,因此可以在任意时间段响应内中断。

(3)工作流程

  1. 关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
  2. 保存断点。为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
  3. 引出中断服务程序。引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)。

在这里插入图片描述

步骤四:中断服务程序寻址

不同的设备有不同的中断服务程序,每个中断服务程序都有一个入口地址,CPU必须找到这个入口地址,即中断向量。
在这里插入图片描述

【注1】中断向量是中断服务程序的入口地址,中断向量地址是指中断服务程序的入口地址的地址

【注2】为什么不直接给出中断向量(入口地址),而是给出中断向量地址,再由中断向量地址找到中断向量?

answer:中断向量地址可以保持不变,而中断向量可以灵活变动,不受硬件限制。

步骤五:执行中断服务程序

在执行中断服务程序的过程中,对于单重中断和多重中断有不同的处理方法

  • 单重中断:执行中断服务程序时不响应新的中断请求。

  • 多重中断:又称中断嵌套,执行中断服务程序时可响应新的中断请求。需要用到中断屏蔽技术

在这里插入图片描述
中断屏蔽技术主要用于多重中断,CPU要具备多重中断的功能,须满足下列条件。

  1. 在中断服务程序中提前设置开中断指令。
  2. 优先级别高的中断源有权中断优先级别低的中断源。

每个中断源都有一个屏蔽触发器,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。屏蔽字设置有以下规则:

  1. 一般用‘1’表示屏蔽,0’表示正常申请。
  2. 每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器中的内容为该中断源对应的屏蔽字)。
  3. 屏蔽字中1’越多,优先级越高。每个屏蔽字中至少有一个’1(至少要能屏蔽自身的中断)。

在这里插入图片描述

三、程序中断和调用子程序的区别


两者的根本区别主要表现在服务时间和服务对象上不一样

  1. 调用子程序过程的时间是已知的;程序中断的时间是随机的
  2. 子程序为主程序服务,两者之间是从属关系;程序中断与主程序没有联系,属于平行关系
  3. 主程序调用子程序的过程完全属于软件处理过程;中断处理程序需要软硬件的结合
  4. 子程序的嵌套由堆栈大小限制,中断嵌套由中断处理优先级(对应中断屏蔽字)限制

最后

以上就是勤奋大门为你收集整理的I/O方式 —— 程序中断方式一、基本概念二、工作流程三、程序中断和调用子程序的区别的全部内容,希望文章能够帮你解决I/O方式 —— 程序中断方式一、基本概念二、工作流程三、程序中断和调用子程序的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部