操作系统实验报告 中断操作_第1页
操作系统实验报告 中断操作_第2页
操作系统实验报告 中断操作_第3页
操作系统实验报告 中断操作_第4页
操作系统实验报告 中断操作_第5页
全文预览已结束

付费下载

下载本文档

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

文档简介

实验一时钟中断事件模拟实习目的模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序。通过实习了解中断及中断处理程序的作用。本实习模拟“时钟中断事件”的处理,对其它中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法。实习内容现代计算机系统的硬件部分都设有中断机构,它是实现多道程序设计的基础。中断机构能发现中断事件,且当发现中断事件后迫使正在处理器上执行的进程暂时停止执行,而让操作系统的中断处理程序占有处理器去处理出现的中断事件。对不同的中断事件,由于它们的性质不同,所以操作系统应采用不同的处理。实习原理及编程思想(1)出现中断事件,硬件就把它记录在中断寄存器中。中断寄存器的每一位可与一个中断事件对应,当出现某中断事件后,对应的中断寄存器的某一位就被置成“1”本实习中,用从键盘读入信息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令当读入信息=0时,表示无中断事件发生,继续执行指令;当读入信息=1时,表示发生了时钟中断事件,转时钟中断处理程序。(2)计算机系统有一时钟,按电源频率(50Hz)产生中断请求信号,即每隔20毫秒产生一次中断请求信号,称时钟中断信号,时钟中断的间隔时间(20毫秒)称时钟单位。我们可用自己确定的频率在键盘上键入“0”或“1(3)中断处理程序应首先保护被中断的现行进程的现场(通用寄存器内容、断点等),现场信息可保存在进程控制块中;然后处理出现的中断事件,根据处理结果修改被中断进程的状态;最后转向处理器调度,由处理器调度选择可运行的进程,恢复现场使其运行。本实习主要模拟中断事件的处理,用打印相应的字符代替保护现场和处理器调度的工作。(4)为模拟时钟中断的处理,先分析一下时钟中断的作用。利用时钟中断可计算日历时钟,也可作定时闹钟等。定时闹钟——对需要定时的场合,例如,处理器调度采用“时间片轮转”策略调度时,可把轮到运行的进程的时间片值(以时钟单位计算)送到称为“定时闹钟”的工作单元中,每产生一次时钟中断就把定时闹钟值减1,当该值为“0”时,表示确定的时间已到,起到定时的作用。(5)本实习的模拟程序可由两部分组成,一部分是模拟硬件产生时钟中断,另一部分模拟操作系统的时钟中断处理程序。模拟程序的算法如图其中,保护现场和处理器调度的工作在编程序时可省去。约定处理器调度总是选择被中断进程继续执行。(6)按模拟算法设计程序,要求显示或打印开机时间、定时闹钟初值、定时闹钟为“0”时的日历时钟。确定三个不同的定时闹钟初值,运行设计的程序,观察得到的结果。实习原代码及注释#include<time.h>#include<stdio.h>#include<stdlib.h>voidmain(){ doublep; inta,m,r,n,e,o,u;structtm*local; char*st,s[27];time_tt;t=time(NULL);local=localtime(&t);st=asctime(local);//记录初试时间 for(inti=0;i<27;i++) { s[i]=*st; st++; } printf("当前系统时间为:\n"); for(i=4;i<27;i++) { printf("%c",s[i]); }printf("这里!\n"); //设置为时钟闹铃为8,每个时钟间隔为2秒 intcount=0,count1=0,k=8,w; while(k!=0) { do{ printf("已执行完一条指令!\n"); count++; printf("请输入一个数字(1表示中断,0表示无中断):\n"); scanf("%d",&w);//读取键盘输入 }while(w==0);//如果w一直为0,则程序一直在此循环执行 if(w==1)printf("现场保存完毕!\n"); count1++; k--;//对k--,当出现8次中断时 if(k!=0) printf("处理器完成调度!\n"); } p=count1*2;a=(int)count1*2; if((p-a)>=0.5) p=a+1; elsep=a;//这段代码是对硬件的模拟,就是当count1出现偏差时的处理 m=(int)p; printf("现在已过时间为:%d\n",m); r=s[17]-48; n=s[18]-48; e=r*10+n;p=p+e;//下面部分代码为ASCII码的转换 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<27;i++) { printf("%c",s[i]);模拟程序运行结果截图打印当前时间并显示,然后输入1作为中断执行八次中断后,时钟闹铃到,打印出当前时间:=初试时间+8*2截图中可以看出结果正确。总结与体会开始接触实习部分的文档时,不知道在l

温馨提示

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

评论

0/150

提交评论