10.4 中断控制方式

计算机组成

10 输入输出设备

10.4 中断控制方式

那原本为了好好看书好好进行运算(把CPU运算类比成看书),我就不出去吃中饭了,定了一份外卖。结果呢?为了能收到这份外卖,我不得不总是去校门口看一看外卖来了没有。看一遍,又看一遍,再看一遍,再看一遍。那结果一上午,啥书都没有看成,这样就不合算了。我都还不如玩会儿游戏呢,折腾这个干嘛?那怎么解决呢?我们得追加投资,增加一个设备。我们装一部电话。然后跟送外卖的说好,你到了校门口就给我打电话。这样呢我就可以安心地坐在这先玩游戏了,玩的很开心,突然电话响了。“送外卖的,好好好,这就来,这就来“。这样我们就可以去拿了外卖回来吃,什么事都不耽误。这就是我们今天要说的中断控制方式

在现在的计算机系统当中,如果完全依靠CPU进行输入输出,那是有问题的。比如说我们要通过键盘进行输入,那CPU怎么能保证及时发现键盘的输入呢?如果CPU不间断地去查询键盘的输入,显然是不合适的,这样CPU就无法完成其他的任务了。如果是间歇地查询呢?先做一段运算的任务,然后查看一下键盘。这样也有问题。这个间隔设置为多久合适呢?间隔设置的太短,还是影响CPU执行其他的任务。间隔设置的太长,又会造成键盘的输入无法得到及时的响应。所以,想要让这个系统正常的工作,我们还得用其他的方法。

这就是我们要介绍的第二种I/O控制方式,中断。之前我们已经知道了CPU是如何处理中断的,并且分析了内部中断的不同类型。那我们现在要谈的是外部中断。我们现在就来了解CPU是如何运用中断的方式来进行I/O控制的。

我们先来看一个数据输入的过程,还是用这个并行接口电路为例。之前在这个结构上我们已经讲解了如何用程序查询方式进行数据的传送。那想要实现中断控制方式,首先在这个并行接口电路当中,就需要有能够产生中断信号的逻辑电路,而且要把这个中断请求信号通过主板上的物理连线和CPU的中断输入接口连接起来。

然后我们再来看软件操作的过程。在初始化时,CPU还是要执行OUT指令,将控制字写入到这个接口的控制计存器当中,设置接口的工作模式。然后CPU就可以去执行其他的任务了。当外设有数据输入的时候,就会将数据发到这个并行数据输入信号上,并且把输入准备好这个信号置为有效。而这个接口电路始终在检查输入准备好信号是否有效。一旦发现有效,就从并行数据输入信号上接收数据,放入到输入缓冲寄存器当中去。然后将输入回答信号置为有效,这是为了告诉外设暂时先不要发送新的数据。

并行接口的这几步操作和程序查询方式下是一样的,区别在于这个期间CPU不用来反复地读取状态计存器以查询是否有输入的数据。

在数据已经保存到输入缓冲寄存器当中后,并行接口电路会通过中断控制逻辑将这个(绿色箭头)中断请求信号置为有效,同时会将状态寄存器当中输入缓冲满这个状态位置为有效。CPU在发现这个中断请求有效后,就进入了中断处理的过程。随后会进入我们专门为并行接口编写的中断服务程序,在这段中断服务程序当中,会首先使用in指令读入状态寄存器当中的状态字,因为这时CPU虽然是收到了中断请求,但它并不清楚是什么原因发生的中断。所以,它需要读出状态字,然后检查其中的各个状态位,发现是这个输入缓冲满的状态位有效了,这时才知道是因为有数据的输入发生的中断。那在这个中断服务程序当中,就会继续执行in指令,从这个输入缓冲寄存器当中读出数据。CPU可能会对这个读出的数据进行处理。但更多的时候,CPU会将输入的数据再通过存储器写指令,保存到设置在内存某处的一个缓存区当中。而在CPU将这个输入缓冲寄存器当中的数据读走之后,并行接口电路就会将输入回答信号置为无效。这就告诉外设可以继续接收下一个新数据了。如果这是一个键盘的接口,可能会过很久才会有一个新数据;如果这是一个网络的接口,可能会连续的有很多新的数据进来。刚才介绍的这段过程,就会不断地反复执行。输入的数据会不断地被CPU读走,再写到内存的某个地方。这样就构成了一大块数据输入的过程。

然后我们再来看看数据输出的过程。刚才说要用中断控制方式,是因为不知道输入什么时候发生。那输出是由CPU控制的,这难道也会不知道什么时候发生吗?这当然不是。那为什么要用中断控制方式呢? 我们不妨先来看一看这个过程。

第一步还是设置接口的工作模式。然后当CPU需要输出时,就执行OUT指令,将数据写到接口的输出缓冲寄存器当中。然后接口将这个数据发到并行数据输出信号上,并将输出准备好置为有效。我们要注意的是,大多数对外接口的工作频率都是远远低于CPU的工作频率,而且外设很可能会处在没有准备好的状态。所以,如果不采用中断的方式,CPU在这时就不得不反复地读取状态寄存器,以确定当前的这个数据已经写到外设了,可以发送新的数据。那这样也就浪费了CPU的性能。所以,我们也可以采用中断控制的方式。

等到外设已经将这个数据取走之后,再由并行接口电路将中断请求信号(绿色箭头)置为有效。同时将状态寄存器当中的输出缓冲空状态位置为有效,这时CPU可能还在执行别的程序,在收到中断请求后,又进入了并行接口的中断服务程序。这和刚才数据输入过程发生的中断使用的是同一个中断向量,进入的也是同一个中断服务程序。这个中断服务程序的一开头,就会去读取状态寄存器,然后逐个检查其中的一个个状态位,这次发现的是输出缓冲空。所以,CPU就会将下一个要输出的数据再写到接口的输出缓冲寄存器当中去,从而开始了下一个输出过程。这样反复地执行刚才介绍的这几个步骤,我们就可以完成很多数据的输出了。

现在我们来分析一下中断控制方式的特点。

先来看一看优点。有了中断控制方式,CPU就可以和外设在一定程度上并行的工作,提高了工作的效率,而且这也让外设有了申请服务的主动权。而不是像程序查询方式那样,CPU什么时候查到你了,才有可能为你提供服务。现在外设就可以在有需要服务的时候主动向CPU提出请求,这样在一定程度上,也满足了输入输出处理的实时性要求。

然后我们再来看一看中断控制方式的缺点。它最大的缺点就是,输入输出数据的传送工作仍然用CPU来承担。这样就占用了宝贵的CPU运算资源,而且在存储器和外设之间进行数据的传送,这种方式仍然需要将数据先放到CPU当中的通用寄存器,这样通过CPU中转一次的传输过程就会显得很冗长,也影响了输入输出的性能。当然程序查询方式同样也有这些缺点。中断控制方式是节省了其中不断查询状态位的那些工作,但是中断的机制也引入了一些新的开销,比如要进入和退出中断服务程序,就需要执行额外的一些指令,这些指令和数据传送本身是没有关系的,而且在现在复杂的操作系统当中,这样额外指令的数目可能还是非常多的。

这样是不是说,中断方式就比程序查询方式要好呢?倒也未必。中断方式确实提高了整个系统运行的效率,但是对于一些特别重要的事情,程序查询方式反而能提高响应的速度。比如说你现在要等的不是快递,而是你的女朋友。那你就应该一早就到校门口去候着。一直在看,来了没?来了没??对吧。那么这样你女朋友到的第一时间,你就能接下来了。可你现在非要想着怎么提高系统的整体效率,就跟人家说,你到了之后就给我打电话,我接了电话就去找你。然后呢,你就呆在房间里玩游戏,玩得很高兴,玩啊玩,一会儿电话响了,你还不接。为什么呢?还得先存盘呢,保存现场,把菜单调出来,存,存,存。啊,存好了。存好了再准备接电话。结果电话不响了,人家生气了,走了。是啊,你倒是提高了整体系统运行的效率,以后能给你打电话的也只有快递员了。

原文地址:https://www.cnblogs.com/doctorx/p/9745059.html

时间: 2024-10-12 16:49:03

10.4 中断控制方式的相关文章

10.3 输入输出的控制方式

计算机组成 10 输入输出设备 10.3 输入输出的控制方式 现在看来,跟外界交互也没有那么复杂嘛.跟以前与存储器的交互差不了多少,我给一个地址,得到一个数:或者给一个地址,写进去一个数,这样就跟外设进行交互了.这么说也不是不对,最简单的情况确实是这样的.那我们也不妨从这最简单情况开始说起吧. CPU控制外设进行输入输出的方式主要有三种. 程序控制方式 中断控制方式 直接存储器访问方式 那我们先来看第一种程序控制方式.我们还是用这个并行接口作为例子,来讲解程序控制方式是如何工作的. 程序控制方式

嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)

这是一篇阐述怎样对嵌入式SOC外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下面原则: 从需求的角度去理解嵌入式各种软件和硬件模块的作用和组成.并从芯片系统设计的角度去阐述怎样进行控制编程. 前者对于理解复杂的系统(如linux的各个子系统)是非常有效的:后者所讲的是代表一个芯片设计project师的视觉,芯片模块由他负责设计,他对于该模块的控制编程自然是最有发言权的. 笔者

IO相关的知识点:输入输出控制方式

前言: 博主最近在温习操作系统原理相关的知识点,分享给那些志同道合的朋友,某些地方如果存在争议的,欢迎加Q讨论.计算机的知识实在是太多太多了,像个无底洞,不专门做学术研究,博主觉得对它的了解还是适可而止. 简介: 我们都知道计算机分为五大基本部件:运算器.控制器.存储器.输入设备和输出设备.其中,IO设备主要是由设备控制器和设备本身共同组成,其中设备控制器是集成在电路板上的一块芯片或者一组芯片,主要用于接收,识别从cpu发来的命令,并控制IO设备工作.每个控制器都有少量的用于通信的寄存器,每个寄

Linux网络服务10——远程访问及控制

Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,语TELNET(远程登录)等应用相比,SSH协议提供了更好的安全性. 2.默认监听端口:TCP 22 二.OpenSSH的配置 1.OpenSSH安装包 默认安装Linux系统时自动安装,若未安装,安装光盘中的如下rpm包: openssh-5

ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ————————————————————————————————————— ZeroMQ 官方地址:http://api.zeromq.org/4-1:zmq-proxy-steerable zmq_proxy_steerable(3)      ØMQ Manual - ØMQ/4.1.0 Name zmq_proxy_steerable – 以STOP/RESUM

输入输出控制方式

 通常,如果外部设备要与存储器进行数据交换,则必须通过CPU执行输入输出指令以及存储器读写指令来完成的.一般而言,CPU管理外围设备的输入输出控制方式有5种:程序查询方式.中断方式.DMA方式(直接内存存取).通道方式.外围处理机方式,前两种方式由软件实现,后三种方式由硬件实现. 一,程序实现 1. 程序查询方式 程序查询方式是要CPU不断使用指令检测方法来获取外设工作状态.CPU与外围设备的数据交换完全依赖于计算机的程序控制,在进行信息交换之前,CPU要设置传输参数,长度等,然后启动外设工

Cortex M3 NVIC与中断控制

Cortex M3 NVIC与中断控制 宗旨:技术的学习是有限的,分享的精神的无限的. 一.NVIC概览 --嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU. SysTick 定时器以及调试控制相关的寄存器. NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQs).具体的数值由芯片厂商在设计芯片时决定.此外, NVIC 还支持一个"永垂不朽"的不可屏蔽中断( NMI)输入

Python的线程&进程&协程[1] -> 线程 -> 多线程的控制方式

多线程的控制方式 目录 唤醒单个线程等待 唤醒多个线程等待 条件函数等待 事件触发标志 函数延迟启动 设置线程障碍 1 唤醒单个线程等待 Condition类相当于一把高级的锁,可以进行一些复杂的线程同步控制.一般Condition内部都有一把内置的锁对象(默认为RLock),对于Condition的使用主要有以下步骤: 建立两个线程对象,及Condition对象; 线程1首先获取Condition的锁权限,acquire(); 线程1执行需要完成的任务后,调用等待wait(),此时,线程1会阻

I/O控制方式

1.1 程序直接控制方式 如图(a)所示,CPU给设备控制器发出数据存取命令,设备控制器控制设备进行存取操作,此时CPU轮询设备状态寄存器的忙状态,直到设备状态寄存器指示设备不忙且设备数据寄存器中有数据,CPU将设备数据寄存器中的数据写入存储器中. 1.2 中断驱动方式 如图(b)所示,中断驱动方式允许CPU在等待设备存取操作的同时处理其他事务,设备存取完成后通过控制总线给CPU发出中断信号,CPU在指令周期结束时检查中断,保存当前进程上下文,执行中断处理程序,将数据从设备数据寄存器写入存储器中