计算机接口技术大作业.docx
《计算机接口技术大作业.docx》由会员分享,可在线阅读,更多相关《计算机接口技术大作业.docx(29页珍藏版)》请在冰豆网上搜索。
计算机接口技术大作业
计算机接口技术大作业
LT
摘要
学习计算机组成原理和计算机接口技术之中,“中断”是一个必须要学习的美容,计算机之所以能够“智能”的运行起来使得其更容易被人使用很重要的一点就是有了中断技术。
因为中断计算机从一个只靠计算速度和存储量来来博得人们喜爱的机器变成了一个用户有好的聪明的机器。
本文将从几个问题入手来来逐一介绍计算机中断技术和中断系统。
一:
什么是中断?
1.1中断的定义
在计算机科学中,中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。
发出这样的信号称为进行中断请求(interruptrequest,IRQ)。
硬件中断导致处理器通过一个上下文切换(contextswitch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。
中断在计算机多任务处理,尤其是实时系统中尤为有用。
这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。
上面是来自维基百科对中断定义。
个人认为中断就是计算机在执行程序的过程中,当出现异常情况或者是特殊请求时,计算机停止执行现行程序的运行,转向对这些异常情况或特殊请求的处理,处理后再返回到现行程序的间断处,继续执行原程序,这就是中断。
图1.1中断处理过程
打一个不太恰当的比方。
比如说你正在看书那么你就是CPU,看书就相当于你正在执行的程序,当你电话响了或者是有其他的事情发生导致你必须停下正在看的书去做另一件事(接电话)。
那么这就是一个中断,在这个中断中现行程序是看书,中断时电话响了,CPU是你自己。
当你接完电话之后(假设接完电话就没其他特殊的事了)那么你就回去看书,也就相当于定义中的返回执行原程序。
1.2中断技术差生的原因
讲了上面的内容也许你对中断概念有了一定的了解。
那么为什么会产生中断呢?
为了介绍为什么会产生中断我们有必要对计算机的组成结构和工作的过程来了解一下。
下图是计算机的组成结构。
图1.2计算机组成结构
可以看到计算机石油输入输出设备控制器运算器和存储器组成的,那么计算机是如何工作的呢?
计算机工作时,首先由键盘等输入设备。
输入程序和数据,程序和数据信息,通过J/O接口电路,经数据总线送入主存贮器中,接着CPU开始运行输入的指令,并处理输入的数据。
CPU要进行下列工作:
⑴将指令的地址放到地址总线;
⑵按着上述地址,通过数据总线在主存贮器中找到并取出指令,由指令译码器对该指令进行分析译码;
⑶根据译码结果,取出指令所要处理的数据地址及相应的数据;
⑷执行指令所代表的具体操作;
⑸检查是否还有其它的控制信号,若有,则对定进行处理;
⑹把执行指令后所得的指令结果、状态的标志信号、控制信号和定时信号提供给整个微机系统;
⑺继续处理用户输入的程序和数据。
可以看到上在计算机工作过程中要始终检查有没有控制信号,而这控制信号中就有关于中断的控制信号。
在计算机系统中中断的例子有很多。
用户敲击键盘,每击一次键都要产生一个中断信号。
告诉CPU有“键盘输入发生了”,要求CPU读入键值。
至于为什么必须要读入键值呢?
其实很简单,在执行程序和用户控制两个事件之间显然是用户控制事件的优先级要高于执行程序的优先级。
要不你按下键盘电脑半天没有反应那你还不得把电脑踢了?
以I/O中断为例。
在I/O设备与主机交换信息时,由于设备本身机电特性的影响,其工作效率较低,与CPU无法匹配。
因此,CPU启动之设备之后,往往需要等待一段时间才能实现与I/O设备之间的信息交换。
如果在设备准备同时,CPU不做无所谓的等待,而继续执行现行程序,只有当I/O设备就绪向CPU提出请求后在暂时中断CPU现行程序转入I/O服务程序,这便产生了I/O中断。
中断是用以提高计算机工作效率、增强计算机功能的一重要技术。
最初引入硬件中断,只是出于性能上的考量。
如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busywaiting,反复轮询该设备是否完成了动作并返回结果。
这就造成了大量处理器周期被浪费。
引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。
这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的、切换上下文所引发的时间代价。
后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入中断处理(软中断)的概念。
。
1.3中断技术差生的优点
先让我们感受一下中断机制对并发处理带来的帮助。
让我们用程序来探讨一下烧水问题,如果没有“中断”(注意,我们这里只是模仿中断的场景,实际上是用异步事件——消息——处理机制来展示中断产生的效果。
毕竟,在用户空间没有办法与实际中断产生直接联系,不过操作系统为用户空间提供的异步事件机制,可以看作是模仿中断的产物),设计如下:
void StayInKitchen()
{
bool WaterIsBoiled =false;
while ( WaterIsBoiled !
=true)
{
bool VaporGavenOff =false;
if(VaporGavenOff )
WaterIsBoiled = true;
else
WaterIsBoiled = false;
}
// 关煤气炉
printf(“Closegasoven.\n”);
// 一切安定下来,终于可以看电视了,10分钟的宝贵时间啊,逝者如斯夫…
watching_tv();
return;
}
可以看出,整个流程如同我们前面描述的一样,所有工作要顺序执行,没有办法完成并发任务。
如果用“中断”,在开始烧水的时候设定一个10分钟的“闹铃”,然后让CPU去看电视(有点难度,具体实现不在我们关心的范围之内,留给读者自行解决吧:
>)。
等闹钟响的时候再去厨房关炉子。
#include
#include
#include
#include
#include
// 闹钟到时会执行此程序
void sig_alarm(int signo)
{
//关煤气炉
printf(“Closegasoven.\n”);
}
void watching_tv()
{
while
(1)
{
// 呵呵,悠哉悠哉
}
}
int main()
{
// 点火后设置定时中断
printf(“Starttoboilwater,setAlarm”);
if (signal(SIGALRM, sig_alrm )==SIG_ERR)
{
perror("signal(SIGALRM)error");
return -1;
}
// 然后就可以欣赏电视节目了
printf(“WatchingTV!
\n”);
watching_tv();
return 0;
}
其实,计算机系统引入中断的原因不仅仅是为了适应I/O设备工作效率低的问题。
例如,当计算机正在运行中,若出现突然掉电的情况,将会导致CPU中的全部信息丢失。
倘若能在突然掉电的瞬间启动另一个备份电源,并迅速进行一些必要的处理,例如,将有用的信息送至不受电源影响的存储系统中,待电源恢复后接着使用,这种处理技术也要用终端技术来实现。
又如,在实时控制领域中,要求CPU能及时响应外来信号的请求,并能完成相应的操作,也都需要终端技术实现。
总之有了中断系统计算机的整体效率有了提升,能够应对突发事件实现实时控制
1.4中断技术差生的缺点
举了上面的例子你也许就对中断有了一定的了解。
同时在上面的例子中当有电话响了时候,你必须停下正在看的书去接电话,那么你就要记下现在看到哪里了。
要不你回来的时候就不知道从哪开始看了。
这也就出现了一个问题你怎么记住你现在看到的位置呢?
当然你说可以凭借记忆,但是CPU是没有记忆功能的,一当有新的数据进来前面的数据就会被覆盖,那么前面的程序执行到哪了你就不知道了。
由此可见中断系统是一个复杂的系统。
为了实现中断系统激素啊你系统必须有相应的终端系统或终端机构。
这样就造成了计算机系统的复杂性。
同时不同公司之间的中断系统有着不同的差别这就要求硬件也相应的不同。
所以还要有统一的中断标准。
二:
基本概念
2.1中断源
我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源。
在上面看书的例子中,打断你看书的时间就是中断源(电话响了)。
通常中断源有以下几种:
(1)外部设备请求中断。
一般的外部设备(如键盘、打印机和A/D转换器等)在完成自身的操作后,向CPU发出中断请求,要求CPU为他服务。
由计算机硬件异常或故障引起的中断,也称为内部异常中断。
(2)故障强迫中断。
计算机在一些关键部位都设有故障自动检测装置。
如运算溢出、存储器读出出错、外部设备故障、电源掉电以及其他报警信号等,这些装置的报警信号都能使CPU中断,进行相应的中断处理。
(3)实时时钟请求中断。
在控制中遇到定时检测和控制,为此常采用一个外部时钟电路(可编程)控制其时间间隔。
需要定时时,CPU发出命令使时钟电路开始工作,一旦到达规定时间,时钟电路发出中断请求,由CPU转去完成检测和控制工作。
(4)数据通道中断。
数据通道中断也称直接存储器存取(DMA)操作中断,如磁盘、磁带机或CRT等直接与存储器交换数据所要求的中断。
(5)程序自愿中断。
CPU执行了特殊指令(自陷指令)或由硬件电路引起的中断是程序自愿中断,是指当用户调试程序时,程序自愿中断检查中间结果或寻找错误所在而采用的检查手段,如断点中断和单步中断等。
2.2中断嵌套
中断嵌套指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了中断服务程序继续执行,这个过程就是中断嵌套。
关于中断嵌套。
可以这样说,当一个中断正在执行的时候,如果事先设置了中断优先级寄存器IP,那么当一个更高优先级的中断到来的时候会发生中断嵌套,如果没有设置则不会发生任何嵌套;如果有同一个优先级的中断触发,它并不是在“不断的申请”,而是将它相应的中断标志位置即IE寄存器的某位置位,当CPU执行完当前中断之后,按照查询优先级重新去查询各个中断标志位,进入相应中断。
2.3中断级联
一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。
如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置位,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号。
但CPU这时可能正在执行一条指令,因此CPU不会立即响应。
而当这CPU正忙着执行某条指令时,还有可能有其余的IRQ线送来中断请求,这些请求都会接受IMR的挑选。
如果没有被屏蔽,那么这些请求也会被放到IRR中,也即IRR中代表它们的IRQ的相应位会被置1。
当CPU执行完一条指令时后,会检查一下INTR管脚是否有信号。
如果发现有信号,就会转到中断服务,此时,CPU会立即向8259A芯片的INTA(中断应答)管脚发送一个信号。
当芯片收到此信号后,判优部件开始工作,它在IRR中,挑选优先级最高的中断,将中断请求送到ISR(中断服务寄存器),也即将ISR中代表此IRQ的位置位,并将IRR中相应位置零,表明此中断正在接受CPU的处理。
同时,将它的编号写入中断向量寄存器IVR的低三位(IVR正是由ICW2所指定的,不知你是否还记得ICW2的最低三位在指定时都是0,而在这里,它们被利用了!
)这时,CPU还会送来第二个INTA信号,当收到此信号后,芯片将IVR中的内容,也就是此中断的中断号送上通向CPU的数据线。
图2.3
2.4软中断,硬中断
软中断:
1. 编程异常通常叫做软中断
2. 软中断是通讯进程之间用来模拟硬中断的一种信号通讯方式。
3. 中断源发中断请求或软中断信号后,CPU或接收进程在适当的时机自动进行中断处理或完成软中断信号对应的功能
4. 软中断是软件实现的中断,也就是程序运行时其他程序对它的中断;而硬中断是硬件实现的中断,是程序运行时设备对它的中断。
硬中断:
1. 硬中断是由外部事件引起的因此具有随机性和突发性;软中断是执行中断指令产生的,无面外部施加中断请求信号,因此中断的发生不是随机的而是由程序安排好的。
2. 硬中断的中断响应周期,CPU需要发中断回合信号(NMI不需要),软中断的中断响应周期,CPU不需发中断回合信号。
3. 硬中断的中断号是由中断控制器提供的(NMI硬中断中断号系统指定为02H);软中断的中断号由指令直接给出,无需使用中断控制器。
4. 硬中断是可屏蔽的(NMI硬中断不可屏蔽),软中断不可屏蔽。
区别:
1. 软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的
2. 软中断是由程序调用发生的,而硬中断是由外设引发的
3. 硬件中断处理程序要确保它能快速地完成它的任务,这样程序执行时才不会等待较长时间
2.5NMI(不可屏蔽中断)&可屏蔽中断
非屏蔽中断是出现在NMI线上的请求,不受标志位IF的影响,在当前指令执行完以后,CPU就响应。
这种中断通常用于电源故障。
非屏蔽中断的优先权高于屏蔽中断。
可屏蔽中断I/O设备发出的所有中断(IRQ)都可以产生可屏蔽中断,受标志位IF的影响,根据中断循序标志的设置来判断CPU是否响应中断请求。
2.6中断请求号&中断向量
中断请求号就是中断编号。
中断向量 中断服务程序的入口地址。
在某些计算机中,中断向量的位置存放一条跳转到中断服务程序入口地址的跳转指令。
2.7中断响应INTA&中断周期
中断响应INTA:
当8259A接收到第一个/INTA有效的负脉冲后,将被响应的中断源置入ISR(正在服务寄存器)的对应位,即ISR对应位置1,同时把IRR(中断请求寄存器)的对应位清0;
当8259A接收到第二个/INTA有效的负脉冲后,就将其中断类型号送入数据总线。
中短周期:
当CPU采用中断方式实现I/O交换信息时,CPU在每条指令执行结束之后检查是否又中断请求,如果有就执行中断响应,又称中短周期。
2.8单步中断&IF中断允许标志位
单步中断:
执行一条指令中断一次。
IF中断允许标志位:
标识寄存器中的一位,可以屏蔽可屏蔽中断请求INTR
如果外设有可屏蔽中断请求INTR,而此时CPU内IF=0,那么CPU不会响应中断
只有可屏蔽中断请求INTR和IF有关系,
内中断和不可屏蔽中断NMI,都不受IF的影响
2.9IMR中断屏蔽字&中断优先级
IMR中断屏蔽字:
以实现对各中断的屏蔽。
中断优先级:
为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。
2.10中断控制器&APIC
中断控制器:
中断控制器的功能就是在多个中断源的系统中,接收外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责外部的中断请求的管理。
比如当某个外部中断的请求的优先级高于当前正在处理的中断优先级时,中断控制器会让此中断通过而到达CPU的INTR端,从而实现中断的嵌套,反之,对其它的级别较底的中断则给予禁止。
APIC:
高级可编程中断控制器
APIC是装置的扩充组合用来驱动 Interrupt控制器。
在目前的建置中,系统的每一个部份都是经由APICBus连接的。
"本机APIC"为系统的一部份,负责传递Interrupt至指定的处理器;举例来说,当一台机器上有三个处理器则它必须相对的要有三个本机APIC。
自1994年的PentiumP54c开始Intel已经将本机APIC建置在它们的处理器中。
实际建置了Intel处理器的电脑就已经包含了APIC系统的部份。
2.11中断共享&中断冲突
中断共享就是某些端口公用一个中断请求,以前主板有很多PCI,第一和第五个常常共享,但只能使用其中一个,都是用会造成硬件冲突
中断冲突终端之间共用资源发生冲突。
2.12MSI-X中断(PCIe)、中断处理子程序
MSI-X中断是MSI中断的增强版本,与MSI中断有相同功能,具有以下关键区别:
每个设备最多支持2048个MSI-X中断向量。
每个中断向量的地址和数据项都是唯一的。
MSI-X支持按函数屏蔽和按向量屏蔽。
中断处理子程序:
处理中断请求的程序
2.130号中断、1号中断
0号中断:
号中断处理程序用于处理除法运算溢出,称为"除数为0中断"。
当CPU检测到除法运算溢出,自动调用0号中断处理程序,无"INT0"指令。
1号中断:
当CPU的TF标志置1时,CPU每执行一条指令,就调用1号中断处理程序,因此,它称为"单步中断"。
当CPU检测到TF=1时,自动进入单步方式,无"INT1"指令。
该中断处理程序用于调试程序。
2.14中断描述符、中断描述符表
中断描述符:
描述中断的一组数据,包括中断号等。
中断描述表:
将每个异常或中断向量分别与它们的处理过程联系起来。
与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。
2.15异常
中断通常分为同步中断和异步中断。
同步中断:
当指令执行时由CPU控制单元产生的,称为同步,是因为只有当一条指令终止执行后CPU才会发出中断。
异步中断:
由其他硬件设备依照CPU时钟信号随机产生的。
2.16中断门、OS的事件、消息
通过中断门的转移和通过陷阱门的转移之间的差别只是对IF标志的处理。
对于中断门,在转移过程中把IF置为0,使得在处理程序执行期间屏蔽掉INTR中断(当然,在中断处理程序中可以人为设置IF标志打开中断,以使得在处理程序执行期间允许响应可屏蔽中断);对于陷阱门,在转移过程中保持IF位不变,即如果IF位原来是1,那么通过陷阱门转移到处理程序之后仍允许INTR中断。
因此,中断门最适宜于处理中断,而陷阱门适宜于处理异常。
OS的事件就是操作系统事件。
消息:
消息,软件对象之间进行交互作用和通讯是利用消息的
三:
中断资源相关
3.1我的电脑中断相关资源占用情况
3.2ISA中断
3.3PCI中断
3.4IRQ0-15中断请求外的
其他是microsoftacpi-compliantsystem的。
微软ACPI-Compliant系统,全名AdvancedConfigurationandPowerManagementInterface
ACPI表示高级配置和电源管理接口(AdvancedConfigurationandPowerManagementInterface)。
对于Windows2000,ACPI定义了Windows2000、BIOS和系统硬件之间的新型工作接口。
这些新接口包括允许Windows2000控制电源管理和设备配置的机制。
ACPI意图是让系统而不是BIOS来全面控制电源管理,使系统更加省电。
其特点主要有:
提供立刻开机功能,即开机后可立即恢复到上次关机时的状态,光驱、软驱和硬盘在未使用时会自动关掉电源,使用时再打开;支持在开电状态下既插即拔,随时更换功能。
四:
中断系统
4.1中断系统怎样协调完成中断过程
中断过程:
中断请求,中断判优,中断响应,中断处理,中断返回
图4.1中断过程
CPU执行完一条指令后,下一条指令的逻辑地址存放在cs和eip这对寄存器中。
在执行新指令前,控制单元会检查在执行前一条指令的过程中是否有中断或异常发生。
如果有,控制单元就会抛下指令,进入下面的流程:
1.确定与中断或异常关联的向量i (0--255)
2.寻找向量对应的处理程序
3.保存当前的“工作现场”,执行中断或异常的处理程序
4.处理程序执行完毕后,把控制权交还给控制单元
5.控制单元恢复现场,返回继续执行原程序
中断控制器执行下列动作:
1,监视IRQ线,对引发信号检查
2,如果一个引发信号出现在IRQ线上
a,把此信号转换成对应的中断向量
b,把这个向量存放在中断控制器的一个I/O端口,从而允许CPU通过数据总线读这个向量
c,把引发信号发送到处理器的INTR引脚,即产生一个中断
d,等待,直到CPU应答这个信号;收到应答后,清INTR引脚
3,返回到第一步
Windows2000在系统启动时填写IDT表
当中断发生时,处理器将会根据IDT将控制转移给适当的中断/异常处理
五:
多处理器系统的中断
5.1怎么连接
对于多核CPU,优化操作系统任务调度算法是保证效率的关键。
一般任务调度算法有全局队列调度和局部队列调度。
前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。
这种方法的优点是CPU核心利用率较高。
后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率。
目前多数多核CPU操作系统采用的是基于全局队列的任务调度算法。
多核的中断处理和单核有很大不同。
多核的各处理器之间需要通过中断方式进行通信,所以多个处理器之间的本地中断控制器和负责仲裁各核之间中断分配的全局中断控制器也需要封装在芯片内部。
另外,多核CPU是一个多任务系统。
由于不同任务会竞争共享资源,因此需要系统提供同步与互斥机制。
而传统的用于单核的解决机制并不能满足多核,需要利用硬件提供的“读-修改-写”的原子操作或其他同步互斥机制来保证。
5.1如何处理
采用轮询的方式,基本上每个CPU平均分担。
但是为什么查看自己的机器,如果不设置CPU亲和,不设置irqbalance的话,所有的中断都是在CPU0上响应的。
六:
硬件、软件是怎么配合完成中断处理的
当用户按键时,键盘接口会得到一个代表该按键的键盘扫描码,同时产生一个中断请求。
键盘中断服务程序先从键盘接口取得按键的扫描码,然后根据其扫描码判断用户所按的键并作相应的处理,最后通知中断控制器本次中断结束并实现中断返回。
若用户按下双态键(如:
CapsLock、NumLock和ScrollLock等),则在键盘上相应LED指示灯的状态将发生改变;
若用户按下控制键(如:
Ctrl、Alt和Shift等),则在键盘标志字中设置其标志位。
若用户按下功能键(如:
F1、F2、…等),再