- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
一、试验内容
模拟時钟中断的产生及设计一种對時钟中断事件進行处理的模拟程序。
二、试验目的
現代计算机系统的硬件部分都设有中断机构,它是实現多道程序设计的基础。中断机构能发現中断事件,且當发現中断事件後迫使正在处理器上执行的進程临時停止执行,而让操作系统的中断处理程序占有处理器去处理出現的中断事件。對不一样的中断事件,由于它們的性质不一样,因此操作系统应采用不一样的处理。通過实习理解中断及中断处理程序的作用。本实习模拟“時钟中断事件”的处理,對其他中断事件的模拟处理,可根据各中断事件的性质确定处理原则,制定算法,然後根据本实习,自行设计。
试验題目
模拟時钟中断的产生及设计一种對時钟中断事件進行处理的模拟程序。
[提醒]:
(1)计算机系统工作過程中,若出現中断事件,硬件就把它记录在中断寄存器中。中断寄存器的每一位可与一种中断事件對应,當出現某中断事件後,對应的中断;寄存器的某一位就被置成“1”。
处理器每执行一条指令後,必须查中断寄存器,當中断寄存器内容不為“0”時,阐明有中断事件发生。硬件把中断寄存器内容以及現行程序的断點存在主存的固定單元,且让操作系统的中断处理程序占用处理器来处理出現的中断事件。操作系统分析保留在主存固定單元中的中断寄存器内容就可懂得出現的中断事件的性质,從而作出對应的处理。
本实习中,用從键盘讀入信息来模拟中断寄存器的作用,用计数器加1来模拟处理器执行了一条指令。每模拟一条指令执行後,從键盘讀入信息且分析,當讀入信息=0時,表达無中断事件发生,继续执行指令;當讀入信息=1時,表达发生了時钟中断事件,转時钟中断处理程序。
(2)假定计算机系统有一時钟,它按電源频率(50Hz)产生中断祈求信号,即每隔20毫秒产生一次中断祈求信号,称時钟中断信号,時钟中断的间隔時间(20毫秒)称時钟單位。
學生可按自已确定的频率在键盘上键入“0”或“1”来模拟按電源频率产生的時钟中断信号。
(3)中断处理程序应首先保护被中断的現行進程的現場(通用寄存器内容、断點等),現場信息可保留在進程控制块中;然後处理出現的中断事件,根据处理成果修改被中断進程的状态;最终转向处理器调度,由处理器调度选择可运行的進程,恢复現場使其运行。
本实习重要模拟中断事件的处理,為简朴起見可省去保护現場和处理器调度的工作。
(4)為模拟時钟中断的处理,先分析一下時钟中断的作用。运用時钟中断可计算曰历時钟,也可作定期闹钟等。
计算曰历時钟——把開机時的時间(年、月、曰、時、分、秒)寄存在指定的称為“曰历時钟”的工作單元中,用一计時器合计時钟中断次数。显然,根据時钟中断的次数和時钟單位(20毫秒)以及開机時的曰历時钟可计算出目前的精确的曰历時钟(年、月、曰、時、分、秒)。因此,可按需要计算出一种作业装入時的時间,一种作业撤离時的時间,终端顾客使用终端的時间,以及其他場所需要确定的時间。
定期闹钟——對需要定期的場所,例如,处理器调度采用“時间片轮转”方略调度時,可把轮到运行的進程的時间片值(以時钟單位计算)送到称為“定期闹钟”的工作單元中,每产生一次時钟中断就把定期闹钟值減1,當该值為“0”時,表达确定的時间已到,起到定期的作用。
(5)本实习的模拟程序可由两部分构成,一部分是模拟硬件产生時钟中断,另一部分模拟操作系统的時钟中断处理程序。模拟程序的算法如图3-1。其中,保护現場和处理器调度的工作在编程序時可省去。约定处理器调度總是选择被中断進程继续执行。
(6)按模拟算法设计程序,规定显示或打印開机時间、定期闹钟初值、定期闹钟為“0”時的曰历時钟。确定三個不一样的定期闹钟初值,运行设计的程序,观测得到的成果。
四、打印的源程序及附上的注释
#includetime.h
#includestdio.h
#includestdlib.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;i27;i++)
{
s[i]=*st;
st++;
}
printf(目前系统時间為:\n);
for(i=4;i27;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
文档评论(0)