-
8086微机_中断服务程序设计和响应的一般过程
2020-06-25 23:51:12中断服务程序设计和响应的一般过程 1. 确定要使用的中断类型号 ○ 中断类型号不能随便使用,不能占用系统已经用过的类型号 2. 保存原中断向量 ○ 将向量表中原来的中断入口地址保存起来,存进附加段或数据段(将向...中断服务程序设计和响应的一般过程
1. 确定要使用的中断类型号 ○ 中断类型号不能随便使用,不能占用系统已经用过的类型号 2. 保存原中断向量 ○ 将向量表中原来的中断入口地址保存起来,存进附加段或数据段(将向量表中原来的中断入口地址保存好, 然后才可以设置自己得中断向量) 3. 设置自己的中断向量 ○ 将自己的设置的中断入口地址保存在中断矢量表中,段地址放在DS,偏移地址放在DX中,然后调用DOS 功能调用(INT 21H)的25号功能 4. 设置中断屏蔽字(可选) 5. CPU开中断 ○ STI(CPU在响应中断的时候,会自动) 6. 恢复原中断向量 ○ 程序退出之前应该恢复原中断向量,因为程序一旦退出,这一存储区内的内容是不定的,如果CPU再一次 转入这个内存区,那么后果很可能导致系统死机、崩溃
CPU响应外部可屏蔽中断(INTR)的一般过程
(在IF=1的情况下) a. 执行完现行指令 b. 保护断点现场(压栈保护) i. PSW ii. CS iii. IP c. 从8259A获取了中断类型号 d. 清IF、TF i. 清IF:是因为系统默认执行中断程序时不允许被打断,如果用户允许被打断的话,则可以手动STI ii. 清TF:为了免于单步执行 e. 中断类型号X4=中断向量 i. IP获得值 ii. CS获得值 f. 进入中断入口程序
什么是中断服务子程序?
○ 为提出中断请求的中断源服务的那段程序就是中断服务子程序
什么是中断嵌套?
○ 允许CPU在执行一个中断服务期间,响应更高层次的中断源提出的中断请求,在服务完这个更高优先级 的中断源后,返回至刚刚中断服务程序继续执行
-
程序中断和调用子程序有何区别
2015-12-01 00:57:311)调用子程序发生的时间是已知的和固定的,即在主程序的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的;而中断过程发生的时间一般是随机的,CPU在执行某一主程序时受到中断源...两者的根本区别表现在服务时间和服务对象上不一样。
1)调用子程序发生的时间是已知的和固定的,即在主程序的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的;而中断过程发生的时间一般是随机的,CPU在执行某一主程序时受到中断源提出的中断申请,就发生中断过程,而中断申请一般由硬件电路产生,申请时间是随机的。也可以说,调用子程序是程序设计者事先安排好的,而执行中断服务程序是由系统工作环境随机决定的。
2)子程序完全为主程序服务,两者属于主从关系。主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序二者一般是无关的,两者是平行关系。
3)主程序调用子程序的过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合的系统,需要专门的硬件电路才能完成中断处理的过程。
4)子程序嵌套可以实现若干级,嵌套的最多级数受计算机内存开辟的堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级不会很大。
从宏观上看,虽然程序中断方式克服了程序查询方式中CPU"踏步"现象,实现了CPU与IO并行工作,提高了CPU的资源利用率,但从微观操作分析,CPU在处理中断程序时,仍需暂停原程序的正常运行,尤其是当高速I/O设备或辅助存储器频繁地、成批地与主存交换信息时,需不断打断CPU执行现行程序,而执行中断服务程序。
-
中断服务函数与函数调用的区别
2019-12-23 17:02:0651单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果。...在《微机原理》和《计算机组成》等课程[1-4]教学中(本文以MCS-51单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果。
1、两过程定义与作用
子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。 子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点(即调用指令的下一条指令),继续执行没有处理完的主程序,这一过程叫做(主程序)调用子程序过程。
子程序结构可简化程序,防止重复书写错误,并可节省内存空间。计算机中经常把常用的各种通用的程序段编成子程序,提供给用户使用。用户在自己编写的程序中,只要会调用这些子程序,就可大大简化用户编程的困难。
中断是计算机中央处理单元CPU与外设I/O交换数据的一种方式,除此方式外,还有无条件、条件(查询)、存贮器直接存取DMA和I/O通道等四种方式。由于无条件不可靠,条件效率低,DMA和I/O通道两方式硬件复杂,而中断方式CPU效率高,因此一般大多采用中断方式。
中断概念是当计算机正在执行某一(主)程序时,收到一中断请求,如果中断响应条件成立,计算机就把正在执行的程序暂停一下,去响应处理这一请求,执行中断服务程序,处理完服务程序后,中断返回指令使计算机返回原来还没有执行完的程序断点处继续执行,这一过程称为中断过程。有了中断,计算机才能具有并行处理,实时处理和故障处理等重要功能。
2、两过程的联系与区别
2.1联系
中断与调用子程序两过程属于完全不同的概念,但它们也有不少相似之处。两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。
正是由于这些表面上的相似处,很容易使学生把两者混淆起来,特别是把中断也看为子程序,这就大错特错了。
2.2区别
中断过程与调用子程序过程相似点是表面的,从本质上讲两者是完全不一样的。
两者的根本区别主要表现在服务时间与服务对象不一样上。首先,调用子程序过程发生的时间是已知和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序,调用指令所在位置是已知和固定的。而中断过程发生的时间一般的随机的,CPU在执行某一主程序时收到中断源提出的中断申请时,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的(软中断发生时间是固定的),也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;其次,子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;第三,主程序调用子程序过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门的硬件电路才能完成中断处理的过程;第四,子程序嵌套可实现若干级,嵌套的最多级数由计算机内存开辟的堆栈大小限制,而中断嵌套级数主要由中断优先级数来决定,一般优先级数不会很大。
中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序 (ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。
中断服务程序需要满足如下要求:
(1)不能返回值;
(2)不能向ISR传递参数;
(3) ISR应该尽可能的短小精悍;
(4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。
参阅网上资料和个人的一些理解
a.为什么不能有返回值?
中断服务函数的调用是硬件级别的,当中断产生,pc指针强制跳转到对应的中断服务函数入口,进入中断具有随机性,并不是某段代码对其进行调用,那么如果有返回值它的返回值返回给谁?显然这个返回值毫无意义,如果有返回值,它必定需要进行压栈操作,这样一来何时出栈怎么出栈将变得无法解决。
b.不能向ISR传递参数?
同理,也是由于这样会破坏栈的原因,因为函数传递参数必定会要求压栈出栈操作,由于进入中断服务函数的随机行,谁给它传递参数都成问题
c.ISR应尽可能的短小精悍?
如果某个中断频繁产生,而它对应的ISR相当的耗时,那么对中断的响应就会无限的延迟,会丢掉很多的中断请求
d.printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。
这就涉及到一个中断嵌套问题,由于printf之类的glibc函数采用的是缓冲机制,这个缓冲区是共享的,相当于一个全局变量,第一层中断来时,它向缓冲里面写入一些部分内容,恰好这时来了个优先级更高的中断,它同样调用了printf,也向缓冲里面写入一些内容,这样缓冲区的内容就错乱了。
http://www.cnblogs.com/thammer/p/5017329.html -
中断,异常,系统调用的处理过程
2019-09-05 07:49:00中断和异常 在中断和异常之前,操作系统会生成一个表(为每一个异常,中断编号); 处理过程分为硬件处理和软件处理,每个外设都有相对应的中断号,从而让操作系统和所识别...2:中断服务程序处理 3:清除中断标...中断和异常
在中断和异常之前,操作系统会生成一个表(为每一个异常,中断编号);
处理过程分为硬件处理和软件处理,每个外设都有相对应的中断号,从而让操作系统和所识别;
中断
一:硬件(外设) 设置中断标记(CPU初始化)
1:将内部外部事件设置中断标记
2:找出中断事件ID,让操作系统识别
二:软件(操作系统)
1:保存当前处理状态
2:中断服务程序处理
3:清除中断标记
4:恢复之前保存的处理状态
异常:
一:硬件 设置中断标记(CPU初始化)
1:将内部外部事件设置异常标记
2:找出异常事件ID,让操作系统识别
二:软件(操作系统)
1:保存现场
2:异常处理(杀死异常程序或重新执执行异常命令)
3:恢复现场
系统调用:
由操作系统为应用程序提供服务
eg:c程序在调用printf()时,会触发系统调用write(设备,内容)->访问设备;
系统调用接口:(可以实现跨平台)
win32 API 用于windows
POSIX API 用于Linux,UNIX,MAC OS
实现方式:
系统调用使得计算机从应用程序的用户态(应用程序运行时的cup状态,权限低)转向操作系统内核态(权限大);
该过程还需要切换堆栈;使得计算机变得更安全可靠。
总结:中断异常。系统调用均跨越了操作系统的边界;也就有了内存和时间的开销;开销如下;
1:建立中断异常表
2:建立内核堆栈
3:验证参数
-
过程调用与中断控制区别
2020-12-03 21:18:521.过程调用指令 段内调用 CALL TIMER CALL WORD PTR[SI] SI后的两位送给IP 段间调用 CALL FAR TIMER CALL DWORD PTR[SI] RET 返回指令,子程序的最后一条指令必须是RET ...转入中断服务程序 3.二者区 -
中断服务子程序是如何被执行的 ?
2020-05-25 00:07:18笔者在 《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?两者的相同点和不同点是什么呢?该篇文章笔者将详细地阐述... -
stm32学习笔记(八)中断服务函数与函数调用的区别
2017-08-14 17:41:4451单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果。... -
js 中断函数执行_中断服务子程序是如何被执行的 ?
2021-01-01 13:56:31还请各位朋友能够给我指出来,我将不胜感激,谢谢~前言笔者在《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?... -
子程序入口参数是什么_中断服务子程序是如何被执行的 ?
2020-11-23 05:04:59还请各位朋友能够给我指出来,我将不胜感激,谢谢~前言笔者在《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?... -
中断程序_「干货」三菱FX PLC入门之中断服务
2021-01-11 09:47:53前面我先是分享了PLC程序流程转移中的条件跳转CJ,然后紧接着进攻了子程序调用CALL和循环FOR,这次,我要向“终极BOSS”中断服务发出挑战了!要学习中断服务,我们就得知道什么是中断。那就让我们看看什么是中断吧!... -
2.5 异常处理类中断服务程序挂接(1)
2015-10-18 20:18:172.5 异常处理类中断服务程序挂接(1) 不论是用户进程还是系统内核都要经常使用中断或遇到很多异常情况需要处理,如CPU在参与运算过程中,可能会遇到除零错误、溢出错误、边界检查错误、缺页错误……免不了需要... -
操作系统——中断异常、系统调用
2020-04-21 10:10:52操作系统——中断异常、系统调用前言中断和异常中断和异常的作用中断和异常的区别中断和异常的处理系统调用系统调用的作用系统调用的过程 前言 操作系统概念:负责管理协调硬件、软件等计算机资源的工作,为上层用户... -
单片机中断的过程
2019-02-18 10:19:461.根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1...5.把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。 6.中断返回,程序返回断点处继续执行。 ... -
操作系统的中断和系统调用
2015-03-26 20:47:00一个简单的中断处理过程是:根据中断号,查找中断表从而执行相应的中断服务例程; 在应用程序调用操作系统API时,控制权由应用程序交给了操作系统。用户态向内核态的转换实际上说的是CPU。CPU在用户态时,会限制... -
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.5 异常处理类中断服务程序挂接...
2017-08-01 15:48:002.5 异常处理类中断服务程序挂接 不论是用户进程还是系统内核都要经常使用中断或遇到很多异常情况需要处理,如CPU在参与运算过程中,可能会遇到除零错误、溢出错误、边界检查错误、缺页错误……免不了需要“异常... -
中断,异常和系统调用
2016-05-22 09:52:00系统调用:应用程序主动向操作系统发出的服务请求。(异步或同步) ...硬件:设置中断标志,依据中断向量调用相应中断服务例程(在中断向量表里查,然后调用异常服务例程或系统调用服务例程或中断服务例... -
中断全过程
2019-04-18 14:24:17中断全过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU再返回原来的程序继续执行的整个过程。 为中断服务程序会用到寄存器和存储器的... -
操作系统 中断 异常系统调用
2020-07-30 19:52:36●系统调用:应用程序请求操作提供服务 处理时间 异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件... -
TCP 服务器程序突然中断 由于send函数导致
2020-05-30 10:36:49最近在写tcp 客户端服务器操作 设置服务器为单线程多个客户端连入。 开发过程中出现 服务器代码运行过程中 在send处突然中断情况。...这是send函数一种系统错误 会使程序直接中断。希望对遇到问题的人有所帮助。 ... -
中断的处理过程
2012-12-11 20:59:48(2) CPU保存当前程序的运行环境(各个寄存器等),调用中断服务程序(ISR, Interrupt Service Routine)来处理这些中断; (3) 在ISR中通过读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行相应的... -
linux-系统调用过程
2019-06-23 23:15:46调用过程: 用户空间->内核空间 INT 0x80(封装在C库函数中) -->system_call(系统调用处理程序)-->系统调用服务例程 -->内核程序 系统调用时通过软中断指令INT 0x80实现的,这条指令会让系统跳转... -
ARM7执行中断服务函数后,不能正常跳转回主程序问题?
2020-06-04 18:35:18出现的问题是,程序开始,调用void test1(void)函数,在执行void test1(void)函数的过程之中,向串口发送数据,触发串口中断,中断执行完后,会继续执行void test1(void)函数,但在执行完void test1(void)函数后,就... -
WinCE 6.0中断驱动程序分析
2013-03-19 16:49:47中断服务例程(ISR):处于内核中的低级处理程序,中断发生时首先被调用。中断服务线程(IST):处于驱动或者应用中的中断处理线程,由系统调度,完成大部分的中断处理工作。 ISR的实现在OAL(OEM适配层)中,... -
中断处理程序中不能出现睡眠代码的原因
2012-07-23 19:27:02由于异常为同步事件,由当前进程执行所引发,所以可以说,异常处于被打断进程的上下文之中,为当前被打断的进程服务,所以在异常处理过程中,可以调用任何内核态的函数,也可以睡眠。因为睡眠时(应为是)有意义的,... -
xv6操作系统源码阅读之中断和系统调用和驱动
2020-08-25 22:34:48来自外部程序的中断信号。 x86硬件机制 在x86中,有四种特权等级,0到3,而操作系统只使用0和3级别,分别代表内核级和用户级。 在x86中中断向量是由IDT(中断描述符表)维护的。在x86中如果要进行系统调用,需要...
-
多标签分类的半监督低秩映射学习
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
FileOutputStream的使用
-
用微服务spring cloud架构打造物联网云平台
-
微软拼音输入法MSPY_19694.zip
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
2021-02-26
-
装机必备最强图片预览神器 8K图片秒开.rar
-
boostdesc_bgm,vgg_generated_48,qrcode.zip
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
报错 -> 问题 -> 解决 ->原因
-
Python 爬取大众点评店铺评论
-
【邻接矩阵】56 邻接矩阵:添加一个顶点
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
wps的vba(宏,vb编辑器)
-
类和对象-运算符重载-1、加减号运算符重载
-
centos7搭建apache作为文件站后,其他人无法访问
-
自动化测试Python3+Selenium3+Unittest
-
【Java核心技术】Java集合技术详解
-
winscp_v5.17.10.11087.zip