实验报告一-中断处理
- 格式:doc
- 大小:302.50 KB
- 文档页数:9
一、实验目的1. 了解中断的基本概念和作用。
2. 掌握中断处理程序的设计方法。
3. 熟悉中断控制器的工作原理。
4. 通过实验验证中断系统的功能。
二、实验原理中断是一种处理程序,当系统需要处理某个事件时,暂时中断当前程序的执行,转而执行中断处理程序。
中断处理程序执行完毕后,返回到被中断程序的原点继续执行。
中断系统由中断控制器、中断处理程序和中断请求源组成。
三、实验设备1. PC机一台2. 开发板一块3. 示波器一台4. 编译器一套四、实验步骤1. 实验环境搭建(1)将开发板插入PC机的USB接口。
(2)打开编译器,新建一个C语言项目。
(3)编写实验代码。
2. 编写中断处理程序(1)定义中断服务例程(ISR)函数。
(2)编写ISR函数,实现中断处理功能。
(3)在主函数中调用ISR函数。
3. 编写主函数(1)初始化中断控制器。
(2)设置中断向量表。
(3)启动中断控制器。
4. 编译与调试(1)将编写好的代码编译成可执行文件。
(2)将可执行文件烧写到开发板中。
(3)打开示波器,观察中断信号。
5. 实验验证(1)通过按键、串口或其他方式触发中断。
(2)观察示波器上的中断信号,验证中断处理程序是否正确执行。
五、实验结果与分析1. 实验结果通过实验,成功实现了中断系统的功能。
在触发中断后,示波器上出现了中断信号,表明中断处理程序已正确执行。
2. 实验分析(1)中断控制器初始化正确,中断向量表设置正确。
(2)ISR函数编写正确,能够正确处理中断事件。
(3)主函数调用ISR函数,实现了中断处理。
六、实验总结通过本次实验,掌握了中断的基本概念和作用,熟悉了中断处理程序的设计方法,了解了中断控制器的工作原理。
实验结果表明,中断系统能够正常工作,达到了实验目的。
七、实验改进与展望1. 在实验中,可以尝试使用不同类型的中断源,如定时器中断、串口中断等,以进一步验证中断系统的功能。
2. 可以研究中断嵌套处理,实现更复杂的中断处理流程。
arm中断实验的实验报告
《ARM中断实验的实验报告》
实验目的:
本实验旨在通过ARM中断实验,深入理解ARM处理器的中断机制,并掌握中
断处理的相关知识和技能。
实验内容:
1. 确定实验环境:选择一款ARM处理器,并搭建相应的开发环境。
2. 编写中断处理程序:编写一个简单的中断处理程序,包括中断触发条件、中
断服务程序和中断处理函数。
3. 测试中断程序:在实验环境中模拟中断触发条件,验证中断处理程序的正确
性和可靠性。
4. 分析中断处理过程:通过调试工具和相关技术手段,深入分析中断处理过程,包括中断响应时间、中断服务时间和中断处理流程。
实验结果:
经过实验,我们成功搭建了ARM中断实验环境,并编写了一个简单的中断处理程序。
在测试过程中,中断程序能够正确响应和处理中断请求,表现出良好的
稳定性和可靠性。
通过分析中断处理过程,我们深入理解了ARM处理器的中断机制,包括中断触发、中断处理和中断返回等关键环节。
实验结论:
通过本次实验,我们进一步加深了对ARM处理器中断机制的理解,掌握了中断处理的相关知识和技能。
同时,我们也意识到中断处理在实际应用中的重要性
和必要性,为今后的ARM开发和应用奠定了坚实的基础。
总结:
ARM中断实验是一次富有成效的实践活动,通过实验我们不仅学习到了理论知识,还掌握了实际操作技能。
相信在今后的学习和工作中,我们将能够更加熟
练地应用ARM中断处理技术,为ARM相关产品的开发和应用做出更大的贡献。
一、实验背景中断是计算机系统中一种重要的机制,它允许操作系统在执行过程中,根据需要暂停当前任务,转而处理其他任务,从而提高系统的效率和响应速度。
本实验旨在通过模拟中断实验,了解中断的工作原理,分析中断在不同场景下的影响,并对中断进行优化。
二、实验目的1. 理解中断的基本概念和工作原理;2. 分析中断在不同场景下的影响;3. 掌握中断优化的方法。
三、实验内容1. 中断的产生与处理(1)实验目的:验证中断的产生与处理过程。
(2)实验步骤:① 编写中断服务程序(ISR);② 设置中断向量表;③ 模拟中断源产生中断请求;④ 检查中断是否被正确处理。
(3)实验结果:中断服务程序被成功调用,中断请求得到处理。
2. 中断嵌套(1)实验目的:分析中断嵌套对系统性能的影响。
(2)实验步骤:① 编写多个中断服务程序;② 设置中断优先级;③ 模拟中断嵌套场景;④ 分析中断嵌套对系统性能的影响。
(3)实验结果:中断嵌套对系统性能有一定影响,但合理设置中断优先级可以降低影响。
3. 中断屏蔽(1)实验目的:分析中断屏蔽对系统性能的影响。
(2)实验步骤:① 编写中断服务程序;② 设置中断屏蔽位;③ 模拟中断屏蔽场景;④ 分析中断屏蔽对系统性能的影响。
(3)实验结果:中断屏蔽可以有效防止中断请求干扰其他任务,但过度屏蔽会影响系统响应速度。
4. 中断优化(1)实验目的:研究中断优化的方法。
(2)实验步骤:① 分析中断性能瓶颈;② 优化中断服务程序;③ 改进中断优先级管理;④ 优化中断屏蔽策略。
(3)实验结果:通过优化,中断性能得到显著提升。
四、实验分析1. 中断的产生与处理实验结果表明,中断的产生与处理过程是可靠的。
在实际应用中,合理设置中断向量表和中断服务程序是保证中断正常工作的关键。
2. 中断嵌套实验表明,中断嵌套对系统性能有一定影响,但合理设置中断优先级可以降低影响。
在实际应用中,应根据具体场景选择合适的中断优先级,以平衡系统性能和响应速度。
一、实验背景随着科学技术的不断发展,实验在科研、教学等领域扮演着越来越重要的角色。
然而,在实际操作过程中,实验中断现象时有发生,这不仅浪费了宝贵的时间和资源,还可能对实验结果产生严重影响。
为了提高实验效率,减少实验中断现象,本实验针对实验中断原因进行分析,并提出相应的解决方案。
二、实验目的1. 分析实验中断原因;2. 探讨实验中断对实验结果的影响;3. 提出预防实验中断的措施。
三、实验方法1. 实验中断原因分析:通过对实验过程中出现的各类中断现象进行归纳总结,分析导致实验中断的原因;2. 实验中断影响分析:结合具体实验案例,探讨实验中断对实验结果的影响;3. 实验中断预防措施:针对实验中断原因,提出相应的预防措施。
四、实验结果与分析1. 实验中断原因分析(1)设备故障:实验设备老化、损坏或操作不当导致实验中断;(2)人为因素:实验人员操作失误、数据记录错误或沟通不畅导致实验中断;(3)实验环境:实验室环境不良、温度、湿度等因素影响实验结果,导致实验中断;(4)实验材料:实验材料质量不合格、过期或储存不当导致实验中断。
2. 实验中断影响分析(1)实验数据丢失:实验中断可能导致实验数据丢失,影响实验结果的准确性;(2)实验进度延误:实验中断可能导致实验进度延误,影响实验的顺利进行;(3)实验资源浪费:实验中断可能导致实验资源浪费,增加实验成本;(4)实验结果偏差:实验中断可能导致实验结果偏差,影响实验结论的可靠性。
3. 实验中断预防措施(1)加强设备维护:定期对实验设备进行保养,确保设备正常运行;(2)提高操作技能:加强实验人员培训,提高操作技能,降低人为因素导致的中断;(3)优化实验环境:改善实验室环境,确保实验过程中温度、湿度等条件适宜;(4)严格材料管理:对实验材料进行严格管理,确保材料质量合格、储存得当;(5)建立应急预案:针对可能出现的实验中断情况,制定应急预案,确保实验顺利进行。
五、结论本实验通过分析实验中断原因,探讨实验中断对实验结果的影响,并提出了预防实验中断的措施。
中断程序实验报告
《中断程序实验报告》
实验目的:通过编写中断程序,掌握中断处理的基本原理和方法。
实验设备:个人电脑、汇编语言编译器
实验步骤:
1. 编写中断服务程序
2. 将中断服务程序与中断向量表关联
3. 测试中断程序的功能和效果
实验结果:
通过编写中断服务程序,我们成功掌握了中断处理的基本原理和方法。
在实验中,我们编写了一个简单的中断服务程序,然后将其与中断向量表进行了关联。
在测试中,我们发现当特定的中断事件发生时,中断服务程序能够正确地被调用,并且能够完成预期的功能。
这表明我们的中断程序编写是成功的。
实验结论:
通过这次实验,我们深入了解了中断处理的原理和方法,掌握了中断程序的编
写和调用过程。
中断程序的编写是计算机系统中非常重要的一部分,它能够提
高系统的响应速度和处理效率,使系统能够更好地处理各种外部事件和异常情况。
因此,我们将继续学习和探索中断处理的更多知识,为今后的系统开发和
优化打下坚实的基础。
总结:
通过本次实验,我们对中断程序的编写和调用有了更深入的了解,掌握了中断
处理的基本原理和方法。
这将为我们今后的学习和工作提供重要的帮助,使我
们能够更好地理解和应用中断处理的知识。
希望通过不断的学习和实践,我们
能够进一步提高自己的编程能力,为计算机系统的发展和优化做出更大的贡献。
第1篇一、实验目的本次实验旨在通过实际操作,加深对中断原理的理解,掌握单片机中断系统的工作机制,学会外部中断和定时/计数器的使用,以及串口数据发送和接收的方法。
二、实验内容1. 外部中断原理及使用(1)实验原理:通过实验,了解外部中断的工作原理,掌握外部中断的使用方法,包括中断源的设置、中断服务程序的编写和中断请求的处理。
(2)实验步骤:设置外部中断源,编写中断服务程序,实现按键控制LED灯亮灭。
2. 定时/计数器的使用(1)实验原理:通过实验,了解定时/计数器的工作原理,掌握定时/计数器的使用方法,包括定时/计数器的初始化、定时/计数器的启动和停止、定时/计数器的中断处理。
(2)实验步骤:设置定时/计数器,实现LED灯的闪烁。
3. 串口数据发送和接收(1)实验原理:通过实验,了解串口通信的工作原理,掌握串口数据发送和接收的方法,包括串口初始化、发送和接收数据的流程。
(2)实验步骤:实现单片机与计算机之间的串口通信,发送和接收数据。
三、实验结果及分析1. 外部中断实验结果及分析实验中,通过按键控制LED灯亮灭,实现了外部中断的基本功能。
实验结果表明,当按键被按下时,外部中断请求信号被触发,中断服务程序被执行,LED灯状态发生改变。
2. 定时/计数器实验结果及分析实验中,通过定时/计数器实现LED灯的闪烁,实现了定时功能。
实验结果表明,定时/计数器能够按照设定的周期产生中断,中断服务程序能够按照要求执行。
3. 串口数据发送和接收实验结果及分析实验中,通过串口通信实现单片机与计算机之间的数据传输。
实验结果表明,单片机能够按照设定的波特率发送和接收数据,计算机端能够正确接收并显示数据。
四、实验总结1. 通过本次实验,加深了对中断原理的理解,掌握了单片机中断系统的工作机制。
2. 掌握了外部中断、定时/计数器和串口通信的使用方法,为后续学习和实践打下了基础。
3. 在实验过程中,培养了动手实践能力,提高了解决问题的能力。
中断实验报告中断实验报告引言:实验是科学研究的重要手段之一,通过实验我们可以验证假设、探索未知,从而推动科学的发展。
然而,在科学研究中,有时我们需要中断实验,即提前终止实验的进行。
本文将探讨中断实验的原因、影响以及如何合理应对中断实验。
一、中断实验的原因1. 实验设计不合理:有时实验设计可能存在缺陷,导致实验无法顺利进行。
例如,实验中所使用的仪器设备出现故障,无法正常进行测量,或者实验所需的材料无法获得等等。
2. 实验目的达成:有时实验可能提前达到预设的目标,进一步的实验将无法为研究提供更多有意义的信息。
在这种情况下,中断实验是合理的决策。
3. 实验数据异常:实验数据的异常可能是由于实验操作错误、外界干扰等原因引起的。
当数据异常严重影响实验结果的可靠性时,中断实验是必要的。
二、中断实验的影响1. 时间和资源浪费:中断实验将导致之前投入的时间和资源白白浪费。
这对于实验室、研究团队以及资金支持者来说都是不可忽视的损失。
2. 数据不完整:中断实验可能导致实验数据不完整,无法得出准确的结论。
这对于科学研究的可靠性和有效性产生负面影响。
3. 研究进展受阻:中断实验可能会延缓研究进展,使得科学研究的推进受到限制。
这对于科学家和研究机构来说是一种挑战。
三、合理应对中断实验1. 重新评估实验设计:在中断实验后,需要重新评估实验设计,找出问题所在,并进行改进。
这有助于避免类似问题再次发生。
2. 数据分析和总结:对已经获得的数据进行分析和总结,尽可能提取有用的信息。
这有助于在中断实验后仍能得出一定的结论。
3. 寻找替代方案:在中断实验后,可以考虑寻找替代方案,以达到原本实验的目的。
这有助于减少时间和资源的浪费,并继续推进研究工作。
4. 合作与交流:与其他研究团队进行合作和交流,分享经验和资源,有助于克服中断实验带来的困难,推动科学研究的进展。
结论:中断实验是科学研究中常见的情况,它可能由多种原因引起,并对研究工作产生不可忽视的影响。
中断实验报告结果分析实验报告一——中断处理姓名:xxxx 学号:xxxx 班级:xxxxx一、实习内容运用某种高级语言(如C或C++)模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。
二、实习目的现代计算机系统的硬件部分都设有中断机构,中断机构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。
本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,自行设计。
希望学生通过本实习了解中断及中断处理程序的作用。
三、实习题目1. 计算机系统工作过程中,若出现中断事件,硬件就把它记录在中断寄存器中。
中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成“1”。
处理器每执行一条指令后,断寄存器,当中断寄存器内容不为“0”时,说明有中断事件发生。
硬件把中断寄存器内容以及现行程序的断点存在主存的固定单元。
操作系统分析保存在主存固定单元中的中断寄存器内容就可知道出现的中断事件的性质,从而作出相应的处理。
本实习中,用从键盘读入息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令。
每模拟一条指令执行后,从键盘读入息且分析,当读入息=0时,表示无中断事件发生,继续执行指令;当读入息=1时,表示发生了时钟中断事件,转时钟中断处理程序。
2. 假定计算机系统有一时钟,它按电源频率(50Hz)产生中断请求号,即每隔20毫秒产生一次中断请求号,称时钟中断号,时钟中断的间隔时间(20毫秒)称时钟单位。
? 学生可按自己确定的频率在键盘上键入“0”或“1”来模拟按电源频率产生的时钟中断号。
3. 中断处理程序应首先保护被中断的现行进程的现场(通用寄存器内容、断点等),现场息可保存在进程控制块中;然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其运行。
第1篇一、实验目的1. 理解中断的概念和作用。
2. 掌握单片机中断系统的基本原理和配置方法。
3. 学会编写中断服务程序,实现外部中断和定时器中断的应用。
4. 通过实验加深对中断系统在实际应用中的理解。
二、实验原理中断是计算机系统中一种重要的机制,它允许CPU在执行程序过程中,响应某些外部或内部事件,从而暂停当前程序的执行,转而处理这些事件。
单片机的中断系统主要包括外部中断和定时器中断两种类型。
三、实验环境1. 单片机:80C512. 开发环境:Keil for 80513. 仿真软件:Proteus4. 实验电路:外部按钮电路、LED灯电路、定时器电路四、实验内容1. 外部中断实验(1)实验目的:学习外部中断的工作原理,掌握外部中断的配置和编程方法。
(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。
b. 配置外部中断源,设置中断优先级。
c. 编写外部中断服务程序,实现LED灯的闪烁。
d. 在Proteus中搭建实验电路,并进行仿真测试。
(3)实验结果:当按下按钮时,LED灯闪烁,松开按钮后LED灯熄灭。
2. 定时器中断实验(1)实验目的:学习定时器中断的工作原理,掌握定时器中断的配置和编程方法。
(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。
b. 配置定时器工作模式,设置定时时间。
c. 编写定时器中断服务程序,实现LED灯的闪烁。
d. 在Proteus中搭建实验电路,并进行仿真测试。
(3)实验结果:定时器中断触发后,LED灯闪烁,达到设定时间后停止闪烁。
五、实验分析1. 外部中断实验分析通过外部中断实验,我们了解了外部中断的工作原理和配置方法。
在实验中,我们设置了外部中断源,并编写了中断服务程序,实现了LED灯的闪烁。
这表明外部中断可以有效地响应外部事件,并执行相应的操作。
2. 定时器中断实验分析通过定时器中断实验,我们掌握了定时器中断的配置和编程方法。
实验报告一——中断处理:xxxx 学号:xxxx 班级:xxxxx 一、实习容•运用某种高级语言(如C或C++)模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。
二、实习目的•现代计算机系统的硬件部分都设有中断机构,中断机构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。
•本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,自行设计。
•希望学生通过本实习了解中断及中断处理程序的作用。
三、实习题目1. 计算机系统工作过程中,若出现中断事件,硬件就把它记录在中断寄存器中。
中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成“1”。
•处理器每执行一条指令后,必须查中断寄存器,当中断寄存器容不为“0”时,说明有中断事件发生。
硬件把中断寄存器容以及现行程序的断点存在主存的固定单元。
操作系统分析保存在主存固定单元中的中断寄存器容就可知道出现的中断事件的性质,从而作出相应的处理。
•本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令。
每模拟一条指令执行后,从键盘读入信息且分析,当读入信息=0时,表示无中断事件发生,继续执行指令;当读入信息=1时,表示发生了时钟中断事件,转时钟中断处理程序。
2. 假定计算机系统有一时钟,它按电源频率(50Hz)产生中断请求信号,即每隔20毫秒产生一次中断请求信号,称时钟中断信号,时钟中断的间隔时间(20毫秒)称时钟单位。
•学生可按自己确定的频率在键盘上键入“0”或“1”来模拟按电源频率产生的时钟中断信号。
3. 中断处理程序应首先保护被中断的现行进程的现场(通用寄存器容、断点等),现场信息可保存在进程控制块中;然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其运行。
•本实习主要模拟中断事件的处理,为简单起见可省去保护现场和处理器调度的工作。
4. 为模拟时钟中断的处理,先分析一下时钟中断的作用。
利用时钟中断可计算日历时钟,也可作定时闹钟等。
•计算日历时钟——把开机时的时间存放在指定的称为“日历时钟”的工作单元中,用一计时器累计时钟中断次数。
根据时钟中断的次数和时钟单位(20毫秒)以及开机时的日历时钟可计算出当前的精确的日历时钟。
•定时闹钟——对需要定时的场合,可把轮到运行的进程的时间片值送到称为“定时闹钟”的工作单元中,每产生一次时钟中断就把定时闹钟值减1,当该值为“0”时,表示确定的时间已到,起到定时的作用。
5. 本实习的模拟程序可由两部分组成,一部分是模拟硬件产生时钟中断,另一部分模拟操作系统的时钟中断处理程序。
模拟程序的算法如图1-1。
其中,保护现场和处理器调度的工作在编程序时可省去。
约定处理器调度总是选择被中断进程继续执行。
6. 按模拟算法设计程序,要求显示或打印开机时间、定时闹钟初值、定时闹钟为“0”时的日历时钟。
确定三个不同的定时闹钟初值,运行设计的程序,观察得到的结果。
四、主要数据结构及符号说明star = localtime(& t);st=asctime(star);//获取开机时间作为起始时间定义每个时间单元为2说明:因为要输入数字模拟有无中断发生,输入频率无法保证和电脑同步,所以用一个数字来记录时间,输出的结束时间不是结束时电脑的时间,而是设每个时间但愿为2s计算的时间。
时钟中断处理模拟算法五、实现代码为:#include<time.h>#include<stdio.h>#include<stdlib.h>int main(){//初始化,显示开机时间time_t t;double p;int a,m,r,n,e,o,u;int count=0,clock_alarm,w,Timer=0;int i;char *st,s[27];struct tm * star;t = time(NULL);star = localtime(& t);st=asctime(star);for(i=0;i<27;i++){s[i]=*st;st++;}printf("*****a simulation program of clock to deal with disruptions*****\n");printf("star time:");for( i=4;i<25;i++){printf("%c",s[i]);}//时间存储在数组中,从第5位开始为月份、时间、年份printf("set clock alarm :");scanf("%d",&clock_alarm);//设置定时闹钟printf("the clock alarm is %d,timer is 0\n",clock_alarm);while(clock_alarm!=0){ //模拟时钟中断do{printf("A piece of order have been finished\n");count++;//模拟一条指令被执行,计数器加1printf("input a number(1 means an interrupt,while 0 means there is no interrupt!\n");scanf("%d",&w);//读键盘信息}while(w==0);//模拟时钟中断处理if(w==1)printf("the spot have been saved!\n");//保护现场,计时器加1,定时闹钟减1,处理器调度Timer++;clock_alarm--;printf("processor finished assignment\n");}//计算当前日历时间p=Timer*2;//define the time unit is 2a=(int)Timer*2;if((p-a)>=0.5)p=a+1;elsep=a;m=(int)p;printf("time have passed :%d\n",m);r=s[17]-48;//计算运行时间n=s[18]-48;e=r*10+n;p=p+e;if(p<60){s[17]=((int)p/10)+48;s[18]=((int)p%10)+48;for( i=4;i<27;i++){printf("%c",s[i]);}}else{s[14]=s[14]-48;s[15]=s[15]-48;o=s[14]*10+s[15];o=o+(int)p/60;if(o<60){s[14]=(o/10)+48;s[15]=(o%10)+48;s[17]=((int)p%60)/10+48;s[18]=((int)p%60)%10+48;for( i=4;i<27;i++){printf("%c",s[i]);}}else{s[11]=s[11]-48;s[12]=s[12]-48;u=s[11]*10+s[12];u=u+o/60;if(u<24){s[11]=u/10+48;s[12]=u%10+48;s[14]=(o%60)/10+48;s[15]=(o%60)%10+48;s[17]=((int)p%60)/10+48;s[18]=((int)p%60)%10+48;for( i=4;i<25;i++){printf("%c",s[i]);}}}}}六、在虚拟机上的具体操作及结果七、思考题将进程调度策略结合到本实习中,可选用时间片轮转的调度策略。
给每个进程分配一个相同的时间片,每产生一次时钟中断经处理后,被中断进程时间片减1,时间片值≠0时,该进程优先运行,若时间片值=0且该进程尚未运行结束,则将它排入队尾,再给它分配一个时间片,直到所有的进程运行结束。
应怎样设计进程控制块?各进程的状态怎样变化?在本实习的程序中加入处理器调度程序。
1、数据结构设计struct dsh{int year;int month;int day;int hour;int min;int sec;int msec;}clock[2]; typedef struct PCB{char name[10];int timep;int time;struct PCB *next;}PCB,*Pnode;//定义结构体2、算法设计#include<stdio.h>#include<stdlib.h>void creat(Pnode L)//用指针连接需要处理的进程{Pnode p,q;int i;i=i;printf("\n 请输入中断时需要处理的一个进程\n");p=(Pnode)malloc(sizeof(PCB));printf("\n 请输入该进程的名字及需要服务的时间\n");scanf("%s%d",p->name,&p->time);p->next=NULL;p->timep=5;q=L;while(q->next)q=q->next;q->next=p;}void disp(Pnode L)//显示出每次中断后,各个进程的信息{Pnode p;p=L->next;if(p!=NULL){printf("\n 目前进程的信息为:\n");printf("\n 名字还需服务时间时间片时间\n");while(p){printf("\n %s\t\t%d\t\t%d\n",p->name,p->tim e,p->timep);p=p->next;}}}void chang(){clock[1].msec=clock[2].msec;clock[1].sec=clock[2].sec;clock[1].min=clock[2].min;clock[1].hour=clock[2].hour;clock[1].day=clock[2].day;clock[1].month=clock[2].month;clock[1].year=clock[2].year;}void disp1()//显示当前时间函数{// ptr=localtime(<);// printf(asctime(ptr),"\n");printf("\n 年\t月\t日\t时\t分\t秒\t毫秒\n");printf("\n %d\t%d\t%d\t%d\t%d\t%d\t%d\n", clock[1].year,clock[1].month,clock[1].day,clock[1].hour,clock[1].min,clock[1].sec,clock[1].msec);}void cut(Pnode L,int count)//中断产生后,进程的运行情况{Pnode p,q;int i,j,z,d,m,x,y;x=1;if(L->next==NULL)printf("\n 所有进程已经运行完毕!\n");else{q=L;p=L->next;p->time=p->time-1;p->timep=p->timep-1;if(p->time==0)//如果进程需要服务时间为0,则表示该进程已运行完毕,释放该进程{chang();printf("\n 此进程已经运行结束,它的名字为:%s\n",p->name);L->next=p->next;clock[1].msec=clock[1].msec+count*20;//计算产生中断到该进程运行结束所经历的时间if(clock[1].msec>=1000){i=clock[1].msec/1000;clock[1].sec=clock[1].sec+i;clock[1].msec=clock[1].msec-i*1000;if(clock[1].sec>=60){j=clock[1].sec/60; clock[1].min=clock[1].min+j;clock[1].sec=clock[1].sec-j*60;if(clock[1].min>=60){z=clock[1].min/60;clock[1].hour=clock[1].hour+z;clock[1].min=clock[1].min-z*60;if(clock[1].hour>=24){d=clock[1].hour/24;clock[1].day=clock[1].day+d;clock[1].hour=clock[1].hour-d*24;if(clock[1].day>28){if(clock[1].year%400==0||(clock[1].year%4== 0&&clock[1].year%100!=0)){while(clock[1].day>28&&x==1){x=0;if(clock[1].day>31&&(clock[1].month==1||clock[ 1].month==3||clock[1].month==5||clock[1].m onth==7||clock[1].month==8||clock[1].month ==10||clock[1].month==12)){clock[1].day=clock[1].day-31;clock[1].month=clock[1].month+1;x=1;}if(clock[1].month==2&&clock[1].day>29){clock[1].day=clock[1].day-29;clock[1].month=clock[1].month+1;x=1;}if(clock[1].day>30&&(clock[1].month==4||clock [1].month==6||clock[1].month==9||clock[1].m onth==11)){clock[1].day=clock[1].day-30;clock[1].month=clock[1].month+1;x=1;}}}else{ while(clock[1].day>29&&x==1){x=0;if(clock[1].day>31&&(clock[1].month==1||clock[ 1].month==3||clock[1].month==5||clock[1].m onth==7||clock[1].month==8||clock[1].month ==10||clock[1].month==12)){clock[1].day=clock[1].day-31;clock[1].month=clock[1].month+1;x=1;}if(clock[1].month==2){clock[1].day=clock[1].day-28;clock[1].month=clock[1].month+1;x=1;}else{clock[1].day=clock[1].day-30;clock[1].month=clock[1].month+1;x=1;}}}if(clock[1].month>12){y=clock[1].month/12;clock[1].year=clock[1].year+y;clock[1].month=clock[1].month-y*12;}}}}}}printf("\n 此进程到结束所经历的时间为:\n");disp1();free(p);if(L->next==NULL)disp(L);}if(p->timep==0&&p->time!=0)//如果时间片时间为0,而进程需要服务的时间不为0,//则把该插到队尾,并为该进程分配时间片{L->next=p->next;p->next=NULL;while(q->next)q=q->next;q->next=p;p->timep=5;// p->num++;}disp(L);}}int main(){Pnode L;int count,p,i;L=(Pnode)malloc(sizeof(PCB));L->next=NULL;count=0;printf("\n*----------------------------------------------------------*\n");printf("|**********************中断处理算法模拟********************|\n");printf("*----------------------------------------------------------*\n\n");printf("\n 请置开机时间:\n");printf("\n 年\t月\t日\t时\t分\t秒\t毫秒\n");scanf("%d%d%d%d%d%d%d",&clock[2].year,& clock[2].month,&clock[2].day,&clock[2].hour,&cl ock[2].min,&clock[2].sec,&clock[2].msec);printf("\n 开机时间为\n");chang();disp1(L);while(p!=0){creat(L);printf("\n 进程输入完毕,则输入0,否则输入其它值\n");scanf("%d",&p);}disp(L);for(i=0;i<100;i++){printf("\n 已经执行了一条指令\n");printf("\n 请输入中断的信息\n");scanf("%d",&i);if(i==1){count++;cut(L,count);if(L->next==NULL){printf("\n 打回车退出\n");getch();exit(0);}}if(i==0)printf("\n 没有中断产生\n");}return 0;}八、实验总结通过本次实验明白了中断处理的详细过程,即中断处理程序应首先保护被中断的现行进程的现场,然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其运行。