问题二:什么是中断系统调用? 中断、异常和系统调用
所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。
中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法 *** 作码、地址越界、浮点溢出等)等引起的过程。
第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。
1.中断处理
中断处理一般分为中断响应和中断处理两个步骤。中断响应由硬件实施,中断处理主要由软件实施。
(1)中断响应
对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。发生中断时,CPU暂停执行当前的程序,而转去处理中断。这个由硬件对中断请求作出反应的过程,称为中断响应。一般说来,中断响应顺序执行下述三步动作:
◆中止当前程序的执行;
◆保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容);
◆从中断控制器取出中断向量,转到相应的处理程序。
通常CPU在执行完一条指令后,立即检查有无中断请求,如果有,则立即做出响应。
当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断”―Software Interrupts),或者来自意外事件(如访问页面不在内存)。
如果当前CPU的执行优先级低于中断的优先级,那么它就中止对当前程序下条指令的执行,接受该中断,并提升处理机的执行级别(一般与中断优先级相同),以便在CPU处理当前中断时,能屏蔽其它同级的或低级的中断,然后保存断点现场信息,通过取得的中断向量转到相应的中断处理程序的入口。
(2)中断处理
CPU从中断控制器取得中断向量,然后根据具体的中断向量从中断向量表IDT中找到相应的表项,该表项应是一个中断门。于是,CPU就根据中断门的设置而到达了该通道的总服务程序的入口。
核心对中断处理的顺序主要由以下动作完成:
◆保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。
◆确定“中断源”或核查中断发生,识别中断的类型(如时钟中断或盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。
◆核心调用中断处理程序,对中断进行处理。
◆中断处理完成并返回。中断处理程序执行完以后,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。如果设置了重调度标志,则在本进程返回到用户态时做进程调度。
2.系统调用
在Unix/Linux系统中,系统调用像普通C函数调用那样出现在C程序中。但是一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到。
C语言编译程序利用一个预先确定的函数库(一般称为C库),其中有各系统调用的名字。C库中的函数都专门使用一条指令,把进程的运行状态改为核心态。Linux的系统调用是通过中断指令“INT 0x80”实现的。
每个系统调用都有惟一的号码,称作系统调用号。所有的系统调用都......>>
问题三:系统中断的定义 系统中断,一般是硬件中断和软件中断的综合,“中断”是一个计算机术语,意思跟我们的请求差不多,鼠标、键盘、板卡或者是一些系统内核组件,要想为你服务,都要向系统提出申请,然后等待 *** 作系统的分配。如果没有这个过程,你什么也干不了。CPU占用高的原因就是,系统要保持“随时”能为你提供服务,就必须保证它的优先权力。所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法 *** 作码、地址越界、浮点溢出等)等引起的过程。第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。
问题四:中断系统的功能 当CPU响应某一中断时,若有优先权高的中断源发出中断请求,则CPU能中断正在进行的中断服务程序,并保留这个程序的断点(类似于子程序嵌套),响应高级中断,高级中断处理结束以后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才能去处理新的中断请求。
问题五:什么是中断? 1、中断定义
CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的程序。(如有必要,被中断的程序可以在后来某时间恢复,继续执行。)
事件:如读盘,盘有问题,无法读,产生中断,解决后,程序恢复,软件错误也会中断。特点:1) 中断随机的
2) 中断是可恢复的
3) 中断是自动进行处理的
2、中断系统的有关概念
中断由软件( *** 作系统)、硬件协同完成,硬件机构称中断装置。
中断装置:指发现中断,响应中断的硬件。
中断处理程序是由软件来完成的。
以上合称中断系统
中断源:引起中断发生的事件
中断寄存器:硬件为每个中断源设置寄存器,中断发生时信息被记录在寄存器中,以便分析处理(记录中断)
中断字:中断寄存器中的内容
程序状态字:控制指令执行顺序,并保留和指示与程序相关的系统状态。
基本内容
程序基本状态(指令地址,条件码,目态/管态,等待计算)
中断码:保存程序执行时,当前发生的中断事件,以便 *** 作系统分析处理(设置中断码)
中断屏蔽位
程序状态字寄存器(CPU按照其内容执行)
系统堆栈:在内存开辟的一块区域用来临时保存进程运行现场
问题六:计算机原理与应用 什么是中断系统实现的功能 4.1 指令系统的发展与性能要求
从计算机组成的的层次结构来说,计算机的指令有微指令、机器指令和宏指令等。机器指令则介于微指令与宏指令之间,通常简称为指令。每一条指令可完成一个独立的算术运算或逻辑运算*作。
一台计算机中所有机器指令的 *** ,称为这台计算机的指令系统。
系统计算机: 是指基本指令系统相同、基本体系结构相同的一系列计算机。
CISC:复杂指令系统计算机 RISC: 简单指令系统计算机
一个完善的指令系统应满足四方面的要求:1、完备性 2、有效性 3、规整性 4、兼容性
高级语言与计算机的硬件结构及指令系统无关,汇编语言计算机的硬件结构和指令系统。不同的机器有不同的指令,所以用汇编语言编写的程序不能在其他类型的机器上运行。
4.2 指令格式
机器指令是用机器字来表示的,表示一条指令的机器字,就称为指令,通常称为指令。
指令格式,则是指令字用二进制代码表示的结构形式,通常由*作码字和地址字段组成。
指令的*作码表示该指令应进行什么性质的*作,组成*作友字段的位数一般取决于计算机指令系统的规模,较大的指令系统就需要更多的位数来表示每条特定的指令。一般说来,一个包含n位的*作码最多能够表示2^n条指令。
根据一条指令中有几个*作数地址,可将指令分为:零地址指令、二地址指令、三地址指令。
从*作数安放的位置来说:分为SS、RS、SR、RR型指令。
一个指令字中包含二进制的位数,称为指令字长度。
机器字长是指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。机器字长通常与主存单元的位数一致,指令字长度等于机器字长度的指令,称为单字长指令。指令字长度等于半个机器字长度的指令,称为半字长指令。指令字长等于两个机器字长度的指令,称为双字长指令。
指令*作码通常有两种编码格式: 固定格式 ,适用大中型计算机 可变格式 ,适用于微型和小型计算机。
4.3 指令和数据的寻址方式
在这里要区分指令和数据的寻址方式的区别。
指令寻址:指令寻址的方式有顺序寻址和跳跃寻址。 顺序寻址一般为顺序执行程序,而跳跃指令则是执行了转移指令所致。
所谓*作数的寻址方式:就是形成*作数的有效地址的方法。
其有:隐含寻址、立即寻址、寄存器寻址、直接寻址、间接寻址、相对寻址方式、变址和基址寻址方式、复合寻址方式、块寻址方式、段寻址方式。
下面就主要的几个寻址方式做个说明。
间接寻址:是给存放*作数地址的存储单元地址。
相对寻址:把程序计数器PC的内容加上指令格式中的形式地址D而形成*作数的有效地址。
变址寻址和基址寻址:两者在指令格式上很类似。习惯上基址寻址中基值寄存器提供基准量而指令提供位移量。而变址寻址中变址寄存器提供修改量而指令提供基准量。
块寻址方式经常用于输入输出指令中,以实现外存储器或外围设备同内存之间数据块传送,块寻址方式在内存中还可用于数据块搬家。
4.4 堆栈寻址
堆栈用在主存储器和寄存器中。
串联寻址:由寄存器中给出。
堆栈原则:先进后出、后进先出。
堆栈*作:
入栈*作: 先进入,后修改计数器。
出栈*作:先修改计数器,后跳出堆栈。
五章 中央处理器
5.1 中央处理器的功能和组成
CPU的四个功能: 指令控制 、 *作控制 、 时间控制 、 数据加工。
中央处理器由两个主要部分组成: 控制器和运算器。
控制器功能有:1、从内存中取出一条指令,并指出下一条指令在内存......>>
问题七:中断系统的功能? 5分 中断技术是十分重要而复杂的技术,由计算机的软硬件共同完成,称之为中断系统。80486系统中的中断技术由CPU的中断管理机制、可编程中断控制器8259A和中断处理程序共同实现。一个完整的中断系统应具备如下功能。
① 设置中断源:中断源是系统中允许请求中断的事件。设置中断源就是确定中断源的中断请求方式。
② 中断源识别:当中断源有请求时,CPU能够正确地判别中断源,并能够转去执行相应的中断服务子程序。
③ 中断源判优:当有多个中断源同时请求中断时,系统能够自动地进行中断优先权判断,优先权最高的中断请求将优先得到CPU的响应和处理。
④ 中断处理与返回:能自动地在中断服务子程序与主程序之间进行跳转,并对断点进行保护。
问题八:什么是中断?简述中断处理过程 中断就是执行中断服务程序,这是中断系统的核心。不同计算机系统的中断处理过程各具特色,但对多数计算机而言,其中中断服务程序的流程如下。
中断处理过程基本上由3部分组成,第一部分为准备部分,其基本功能是保护现场,对于非向量中断方式则需要确定中断源,最后开放中断,允许更高级的中断请求打断低级的中断服务程序;第二部分为处理部分,即真正执行具体的为某个中断源服务的中断服务程序;第三部分为结尾部分,首先要关中断,以防止在恢复现场过程中被新的中断请求打断,接着恢复现场,然后开放中断,以便返回原来的程序后可响应其他的中断请求。中断服务程序的最后一条指令一定是中断返回指令。
问题九:单片机的中断系统是什么?求详细的回答,谢谢 中断装置和中断处理程序统称为中断系统。
中断系统是计算机的重要组成部分。实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。中断系统的应用大大提高了计算机效率。
不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。计算机的中断系统能够加强CPU对多任务事件的处理能力。中断机制是现代计算机系统中的基础设施之一,它在系统中起着通信网络作用,以协调系统对各种外部事件的响应和处理。中断是实现多道程序设计的必要条件。 中断是CPU对系统发生的某个事件作出的一种反应。 引起中断的事件称为中断源。中断源向CPU提出处理的请求称为中断请求。发生中断时被打断程序的暂停点成为断点。CPU暂停现行程序而转为响应中断请求的过程称为中断响应。处理中断源的程序称为中断处理程序。CPU执行有关的中断处理程序称为中断处理。而返回断点的过程称为中断返回。中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分成为软件处理程序。
在linux下控制硬件和在无 *** 作系统下控制硬件的不同主要在于硬件的地址不一样,在linux下要使用va(虚拟地址),而在无 *** 作系统下可以直接使用硬件的pa(物理地址)。在linux-2.6.8.1/include/asm-arm/arch-s3c2410/map.h中定义了大部分硬件的物理地址和他们的虚拟地址。
现以gpio
F为例说明,gpio
的pa
基址(ba)为0x56000000,GPFCON
pa为0x56000050
即:可见偏移量为0x50,而我们在看看GPFCON
va
,vaba
:0xf0e0
0000,va:0xf0e0
0050,偏移量为0x50。我们只要知道了vaba,和他的偏移量,我们就能计算出va,从而,就可以对其进行 *** 作了。
如何获取vaba:在linux-2.6.8.1/include/asm-arm/arch-s3c2410/map.h中有定义。
计算机中,分级分层的思想随处可见,这也是计算机上的一个基本的思想和思路。
在LINUX *** 作系统中分了三级,三级偏移,一级地址的ba为0xf0000000,偏移到第二级,0xf0e0
0000
(以GPIO为例),再次偏移到第三级,0xf0e0
0050
(以GPFCON为例)。现在,就可以在linux
下通过0xf0e0
0050来对GPFCON
寄存器来进行 *** 作了。
源码中的实现过程如下:
#define
S3C2410_ADDR(x)
(0xF0000000+(x))//map.h
//linux下所有硬件一级地址vaba:0xF0000000
#define
S3C2410_VA_GPIO
S3C2410(0X00E00000)//map.h
//GPIO的偏移量0x00E00000,加上这个偏移量后,到了GPIO器件
#define
S3C2410_GPIOREG(x)
((x)+S3C2410_VA_GPIO)
#define
S3C2410_GPFCON
S3C2410_GPIOREG(0x50)//regs-gpio.h
//GPFCON寄存器的偏移量0x50,加上这个偏移量后,到了具体的寄存器,可以对硬件进行 *** 作了
#define
S3C2410_GPFDAT
S3C2410_GPIOREG(0x54)//regs-gpio.h
#define
S3C2410_GPFUP
S3C2410_GPIOREG(0x58)//regs-gpio.h
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)