湖南大学操作系统实验报告(1)_第1页
湖南大学操作系统实验报告(1)_第2页
湖南大学操作系统实验报告(1)_第3页
湖南大学操作系统实验报告(1)_第4页
湖南大学操作系统实验报告(1)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 中断处理 实验报告一、实习内容模拟中断事件的处理。二、实习目的现代计算机系统的硬件部分都设有中断机构,它是实现多道程序设计的基础。中断机构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。对不同的中断事件,由于它们的性质不同,所以操作系统应采用不同的处理。通过实习了解中断及中断处理程序的作用。本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,然后依照本实习,自行设计。三、实习题目模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。提示:(1

2、) 计算机系统工作过程中,若出现中断事件,硬件就把它记录在中断寄存器中。中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成1。处理器每执行一条指令后,必须查中断寄存器,当中断寄存器内容不为0时,说明有中断事件发生。硬件把中断寄存器内容以及现行程序的断点存在主存的固定单元,且让操作系统的中断处理程序占用处理器来处理出现的中断事件。操作系统分析保存在主存固定单元中的中断寄存器内容就可知道出现的中断事件的性质,从而作出相应的处理。本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加 1 来模拟处理器执行了一条指令。每模拟一条指令执行后,从键盘读入信息

3、且分析,当读入信息=0 时,表示无中断事件发生,继续执行指令;当读入信息=1 时,表示发生了时钟中断事件,转时钟中断处理程序。(2)假定计算机系统有一时钟,它按电源频率(50Hz)产生中断请求信号,即每隔 20毫秒产生一次中断请求信号,称时钟中断信号,时钟中断的间隔时间(20 毫秒)称时钟单位。学生可按自己确定的频率在键盘上键入0或1来模拟按电源频率产生的时钟中断信号。(3) 中断处理程序应首先保护被中断的现行进程的现场(通用寄存器内容、断点等)现场信息可保存在进程控制块中;然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其

4、运行。本实习主要模拟中断事件的处理,为简单起见可省去保护现场和处理器调度的工作。(4) 为模拟时钟中断的处理,先分析一下时钟中断的作用。利用时钟中断可计算日历时钟,也可作定时闹钟等。计算日历时钟把开机时的时间(年、月、日、时、分、秒)存放在指定的称为日历时钟的工作单元中,用一计时器累计时钟中断次数。显然,根据时钟中断的次数和时钟单位 (20 毫秒) 以及开机时的日历时钟可计算出当前的精确的日历时钟 (年、月、日、时、分、秒) 。因此,可按需要计算出一个作业装入时的时间,一个作业撤离时的时间,终端用户使用终端的时间,以及其它场合需要确定的时间。定时闹钟对需要定时的场合,例如,处理器调度采用时间片

5、轮转策略调度时,可把轮到运行的进程的时间片值(以时钟单位计算)送到称为定时闹钟的工作单元中,每产生一次时钟中断就把定时闹钟值减 1,当该值为0时,表示确定的时间已到,起到定时的作用。(5) 本实习的模拟程序可由两部分组成,一部分是模拟硬件产生时钟中断,另一部分模拟操作系统的时钟中断处理程序。模拟程序的算法如图 1-1。其中,保护现场和处理器调度的工作在编程序时可省去。约定处理器调度总是选择被中断进程继续执行。(6) 按模拟算法设计程序,要求显示或打印开机时间、定时闹钟初值、定时闹钟为0时的日历时钟。确定三个不同的定时闹钟初值,运行设计的程序,观察得到的结果。四、源程序及程序中使用的数据结构、符

6、号说明/start at 2016-10-28-15:46/finish at 2016-10-28-19:08/OSexp1 About interruption#include#include#includeusing namespace std;int main()int clock3;/定时闹钟 int timer3=0,0,0;/计时器 int count=0;/计数器 int command;char cout_time130,cout_time230;cout 开机时间 endl;/从1970.1.1 8:00:00开始以秒为单位计时 /time_t:longtime_t tim

7、e_now = time(NULL);/time_t time_now = 1;tm* ptime1=localtime(&time_now);/输出当前时间 strftime(cout_time1, 30, %Y年%m月%d日 %H:%M:%S, ptime1); coutcout_time1endl;cout- endl;cout 设置定时闹钟:以秒为时钟单位 endl;for(int i=0;i3;i+)cout输入第i+1clocki; cout- endl;cout本程序从键盘输入1或0模拟是否有中断产生的指令(1:有中断 0:无中断)endl; while (1)cout 执行了一

8、条指令,计数器加1,检测是否有中断发生. endl;count+;cout读取指令. command;if (command = 1)cout有中断产生 保护现场.endl计时器+1,闹钟值-1 endlendl;for(int i=0;i3;i+)timeri+;clocki-;for(int i=0;i3;i+)/如果第i个闹钟 时间没到 if(clocki!=0)/do nothing elsecout- endl;cout!闹钟i+1的时间到了!endl; time_t time_end = time_now+timeri;tm* ptime2=localtime(&time_end)

9、;/输出闹钟响起的时间 strftime(cout_time2, 30, %Y年%m月%d日 %H:%M:%S, ptime2); cout当前时间为:cout_time2endl; cout- endlendl; if(i=2) exit(0);return 0;流程图:代码详细说明:本实验代码结构较为简单,只是简单地获取一个程序起始运行时间,然后接收控制台的指令,对0和1进行判断,达到中断次数时触发闹钟并输出最终时间,控制时间的函数由ctime提供time_t time_now = time(NULL);tm* ptime1=localtime(&time_now); strftime(c

10、out_time1, 30, %Y年%m月%d日 %H:%M:%S, ptime1); 首先生成时间型数据time_now,time型实际上就是long型,然后使用tm*型变量获取当前时间,这个时间是相对于1970年1月1日的偏差,其结构如下:#ifndef _TM_DEFINEDstruct tm int tm_sec; /* 秒 取值区间为0,59 */int tm_min; /* 分 - 取值区间为0,59 */int tm_hour; /* 时 - 取值区间为0,23 */int tm_mday; /* 一个月中的日期 - 取值区间为1,31 */int tm_mon; /* 月份(从

11、一月开始,0代表一月) - 取值区间为0,11 */int tm_year; /* 年份,其值等于实际年份减去1900 */int tm_wday; /* 星期 取值区间为0,6,其中0代表星期天,1代表星期一,以此类推 */int tm_yday; /* 从每年的1月1日开始的天数 取值区间为0,365,其中0代表1月1日,1代表1月2日,以此类推 */int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/在输出时间时,可以按顺序对上述成员变量做输出,但也可以通过strftime(cout_time1, 30, %Y年%m月%d日 %H:%M:%S, ptime1); 该语句方便地输出时间,对于末尾时间的处理与当前时间的处理类似,就不赘述了。五、打印程序运行时的初值和运行结果运行环境:DevC+ 5.11控制台运行结果:由于题目要求设置三个定时闹钟,所以此处要输入三个定时时间,并分别判断是否到达触发条件。在展示的运行结果中,共运行了10条指令,其中有8次中断,2次无中断,不触发中断时只有计数器累加,无计时器的更改。因此只在触发中断的第8次时才会响起闹钟3。六 实验心得本次实验总的来说较为简单,是为了让我们熟悉计算机内

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论