操作系统实验指导书--计算机专业.doc

上传人:飞****2 文档编号:66779687 上传时间:2022-12-21 格式:DOC 页数:27 大小:493.50KB
返回 下载 相关 举报
操作系统实验指导书--计算机专业.doc_第1页
第1页 / 共27页
操作系统实验指导书--计算机专业.doc_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《操作系统实验指导书--计算机专业.doc》由会员分享,可在线阅读,更多相关《操作系统实验指导书--计算机专业.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、LIAOCHENG UNIVERSITY计算机操作系统实验指导书聊城大学计算机学院2011年3月目录计算机操作系统课程实验教学大纲1实验一单处理器系统的进程调度3基本信息3实验目的3实验内容3实验原理及设计3实验条件5实验过程5实验要求8思考题8实验二动态资源分配实验8基本信息8实验目的8实验内容8实验原理及设计8实验条件10实验过程12实验要求17思考题18实验三请求页式存储管理18基本信息18实验目的18实验内容18实验原理及设计18实验条件21实验过程21实验要求22思考题23计算机操作系统课程实验教学大纲课程名称:计算机操作系统英文名称:Computer Operating Syste

2、ms设置形式:非独立设课课程模块:专业核心课实验课性质:专业实验课程编号:课程负责人:姜华大纲主撰人:姜华大纲审核人:左风朝一、学时、学分 课程总学时:78实验学时:16课程学分:4二、适用专业及年级计算机科学与技术、软件工程、网络工程专业 二、 三年级三、课程目标与基本要求操作系统是计算机教学中最重要的环节之一,也是计算机及其相关专业学生的一门重要的专业课程。操作系统课程主要内容包括:进程管理、处理机调度与死锁、存储管理、设备管理、文件系统、操作系统接口、网络操作系统、操作系统安全性以及Unix系统内核结构。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要

3、学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。课程目标: 培养学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。基本要求:1通过对操作系统中经典算法的模拟,是学生深入理解算法的实现和应用,了解操作系统在计算机系统中的作用,培养学生在实验过程中发现问题、分析问题和解决问题的能力。2掌握系统程序设计的基本方法和有关开发环境

4、的使用。通过实验着重培养学生阅读参考资料、算法分析和设计、程序调试、处理实验数据以及分析与总结实验结果等方面的能力。3通过实验加深对计算机操作系统原理的理解,培养实事求是、踏实细致、严肃认真的科学态度和克服困难、坚韧不拔的工作作风,以及科学、良好的实验素质和习惯。四、主要仪器设备 硬件:台式计算机;软件:C、C+环境。五、实验项目及教学安排序号实验项目名称实验基本方法和内容项目 学时项目类型每组人数教学 要求1进程调度实验用C/C编写和调试单处理器进程调度的模拟程序,观察调度过程,以加深对进程的概念及进程调度算法的理解。4设计型1必修2资源管理实验用C/C+编写和调试系统动态分配资源的简单模拟

5、程序,采用银行家算法,有效地防止和避免死锁的发生。6设计型1必修3存储器管理实验用C/C+编写和调试虚拟内存管理的模拟程序,通过虚存管理的地址转换过程和各种页面淘汰算法的编程实现,加深对存储管理方案的理解。6综合型1必修六、考核方式及成绩评定认真学习教学过程中讲授的与实验相关的内容,提前做好实验预习。按实验指导书要求事先编好程序;准备好需要输入的中间数据;估计可能出现的问题;预计可能得到的运行结果。做到在每个实验前明确实验目的、掌握实验的基本内容及操作方法;在实验中正确使用实验设备 ,认真观察、分析实验结果;实验后要根据要求做好总结,上交实验报告。根据学生实验出勤情况、实验态度、实验报告成绩等

6、评定实验成绩。 实验报告(含实验理论)占实验成绩的60%40%,实验技能(含实验态度)占实验成绩的40%60%。 各次实验成绩的平均值为最终实验成绩,占该课程考核总成绩的2030%。七、实验教科书、参考书1实验教科书自编实验指导书。 2实验参考书郁红英、李春强,计算机操作系统实验指导,清华大学出版社,2008.9实验一单处理器系统的进程调度基本信息实验课程:计算机操作系统设课形式:非独立课程学分:4实验项目:进程调度项目类型:设计型项目学时:4实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。实验内容本实验

7、为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。实验模拟创建若干进程(人为输入或随机数产生),选择一种或几种单处理机的进程调度算法,如FCFS(先来先服务),SPF(短进程优先),RR(时间片轮转法),优先级算法等,模拟进行进程调度。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB,并能在进程完成后及时撤消该进程。实验原理及设计设计一个按优先数调度算法实现处理器调度的算法流程描述。(1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:进程名指针要求运行时间优先数状态进程名作为进程的标识,假设五个进程的进程名分别为P1,P2,P

8、3,P4,P5。指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。要求运行时间假设进程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例: 队

9、首标志 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数-1要求运行时间-1来模拟进程的一次运行。提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。(5) 进程运行一次后,若要求运行时间0,则再将它加入队列(按优先数大小插入,且置队

10、首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。(6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(8) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。图1 优先权进程调度流程图实验条件1、装有Windows操作系统的微型计算机;2、Borland C+软件。实验过程1、根据实验预习阶段的实验设计方案,编写应用程

11、序。参考代码如下。#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ void input() /* 建

12、立进程控制块函数*/ int i,num; printf(n 请输入进程数量?); scanf(%d,&num); for(i=0;iname); printf(n 输入进程优先数:); scanf(%d,&p-super); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l);

13、 void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); void check() /* 建立进程查看函数 */ PCB* pr; printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运

14、行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else (p-super)-;

15、p-state=w; sort(); /*调用sort函数*/ void main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已经完成.n);

16、ch=getchar();2、编译、链接、运行程序实验要求1、完成上述实验示例程序,按照优先级算法补充出sort()子程序的内容。2、分析结果含义并写出自己的心得体会。思考题1、若实验内容中,在修改优先数时增加下列原则:进程等待的时间超过某一时限时增加其优先数,参考上述例程,写出程序。2、若采用基于时间片轮转的调度算法模拟进程调度,试设计算法与程序。实验二动态资源分配实验基本信息实验课程:计算机操作系统设课形式:非独立课程学分:4实验项目:资源分配项目类型:设计项目学时:4实验目的本实习要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当银行家算法,有效地防止和

17、避免死锁的发生。实验内容利用银行家算法实现进程的动态资源分配。对进程运行过程中提出的资源请求进行检查,若分配后系统处于安全状态,则满足请求,否则拒绝申请。实验原理及设计1银行家算法基本思想 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。2银行家算法中用到的主要数据结构可利用资源向量 int Availablej j为资源的种类。最大需求矩阵 int Maxij i为进程的数量。分配矩阵 int Allocationij 需求矩

18、阵 int needij= Maxij- Allocationij申请各类资源数量 int Request ij i进程申请j资源的数量工作向量 int Workx int Finishy 3银行家算法bank()进程i发出请求申请k个j资源,Request ij=k (1) 检查申请量是否不大于需求量:Request ij=needi,j,若条件不符重新输入,不允许申请大于需求量。(2) 检查申请量是否小于系统中的可利用资源数量:Request ij=availablei,j,若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。(3) 若以上两个条件都满足,则系统试探着将资源

19、分配给申请的进程,并修改下面数据结构中的数值:Availablei,j= Availablei,j- Request ij;Allocationij= Allocationij+ Request ij;needij= needij- Request ij;(4) 试分配后,执行安全性检查,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。(5) 用dowhile 循环语句实现输入字符y/n判断是否继续进行资源申请。4安全性检查算法(safe()函数) (1) 设置两个向量:工作向量Work,它

20、表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=0;当有足够的资源分配给进程时,再令Finishi=1。(2) 在进程中查找符合以下条件的进程:条件1:Finishi=0;条件2:needij=Workj若找到,则执行步骤(3)否则,执行步骤(4)(3) 当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;(4) 如果所有的Fin

21、ishi=1都满足,则表示系统处于安全状态,否则,处于不安全状态。5、算法流程如图2所示。6、具体实验设计(1)设计一个3个并发进程共享10个同类资源的系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。(2)用银行家算法,实现资源分配程序,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。(3)打印输出银行家算法的资源申请情况和安全性状况。实验条件1、装有Windows操作系统的微型计算机;2、Borland C+软件。Safe();输出提示:同意分配请求是否进行再次分配退出程序,银行家算法Bank()结束;安全性算法Safe()开始Work=AVAILA

22、BLE;FINISH=false;NEEDi=Work&FINISHi=falseWork+=ALLOCATIONi;FINISHi=true;所有进程的FINISH=true;安全,输出安全序列 Return true;安全算法safe()结束输出提示:系统是不安全的输出提示:你的请求被拒!AVAILABLEi-=REQUESTi;ALLOCATIONi-=REQUESTi;NEEDi+=REQUESTi;输入各进程对各类资源的最大需求初始化函数chushihua()开始输入进程的数量输入资源种类数输入个资源当前可用资源数输入各进程当前已分配的资源数输出提示:输入有误,请重新输入初始化函数c

23、hushihua()结束,银行家函数Bank()提出请求REQUESTiREQUESTi=NEEDiREQUESTi=AVAILABLEiError;Error;图2 银行算法模拟流程实验过程1、根据实验预习阶段的实验设计方案,编写应用程序。参考代码如下。#include #include #include #include /定义全局变量const int x=10,y=10; /常量,便于修改int Availablex; /各资源可利用的数量int Allocationyy; /各进程当前已分配的资源数量int Maxyy; /各进程对各类资源的最大需求数int Needyy; /尚需多

24、少资源int Requestx; /申请多少资源int Workx; /工作向量,表示系统可提供给进程继续运行所需的各类资源数量int Finishy; /表示系统是否有足够的资源分配给进程,1为是int py; /存储安全序列int i,j; /i表示进程,j表示资源int n,m; /n为进程i的数量,m为资源j种类数int l=0; /l用来记录有几个进程是Finishi=1的,当l=n是说明系统状态是安全的int counter=0;/函数声明void chushihua(); /初始化函数void safe(); /安全性算法void show(); /函数show,输出当前状态vo

25、id bank(); /银行家算法void jieshu(); /结束函数void chushihua() coutn; coutm; coutendl输入各种资源当前可用的数量( m 种): endl; for (j=0; jm; j+) cout输入资源 j 可利用的数量AvailablejAvailablej; /输入数字的过程. Workj=Availablej; /初始化Workj,它的初始值就是当前可用的资源数 coutendl输入各进程当前已分配的资源数量Allocationnm: endl; for (i=0; in; i+) for (j=0; jm; j+) cout 输入

26、进程 i 当前已分配的资源 jAllocationij; coutendl; Finishi=0;/初始化Finishi coutendl输入各进程对各类资源的最大需求Maxnm: endl; for (i=0; in; i+) for (j=0; jm; j+) cout 输入进程 i 对资源 jMaxij; if(Maxij=Allocationij) /若最大需求大于已分配,则计算需求量 Needij = Maxij-Allocationij; else Needij=0;/Max小于已分配的时候,此类资源已足够不需再申请 coutendl; coutendl初始化完成endl;/安全性

27、算法函数void safe() /显示当前状态函数void show() /函数show,输出当前资源分配情况 int i,j; /局部变量 int Ally; /各种资源的总数量 int L1; /局部变量L1 cout当前的状态为:endl; cout各种资源的总数量:endl; for (j=0;jm;j+) cout 资源j: ; Allj=Availablej; /总数量=可用的+已分配的 for (i=0;in;i+) Allj+=Allocationij; coutAllj ; coutendl当前各种资源可用的量为(available):endl; for (j=0;jm;j+

28、) cout 资源j: Availablej ; coutendl各进程已经得到的资源量(allocation): endl; for(i=0;i=m;i+) for (j=i;jm;j+) cout 资源j; coutendl; for(L1=0;L1n;L1+) cout进程L1:; for (j=i;jm;j+) coutAllocationL1j ; coutendl; coutendl各进程还需要的资源量(need):endl; for(i=0;i=m;i+) for (j=i;jm;j+) cout 资源j; coutendl; for(L1=0;L1n;L1+) cout进程L1

29、:; for (j=i;jm;j+) coutNeedL1j ; coutendl; /银行家算法函数void bank() coutendl进程申请分配资源:endl; int k=0; /用于输入进程编号 bool r=false; / 初值为假,输入Y继续申请则置为真 do/输入请求 cout输入申请资源的进程(0-n-1k; coutn-1) /输入错误处理 coutendl输入错误,重新输入:endl; coutendl输入申请资源的进程(0-n-1k; coutendl; coutendl输入该进程申请各类资源的数量: endl; for (j=0; jm; j+) do /dow

30、hile 循环判断申请输入的情况 cout进程 k 申请资源jRequestj; coutNeedkj) /申请大于需求量时出错,提示重新输入(贷款数目不允许超过需求数目) cout申请大于需要量!endl; cout申请的资源j的数量为Requestj,大于进程k对该资源需求量Needkj。endl; cout重新输入!Availablej) /申请大于可利用量, 应该阻塞等待? ? coutn没有那么多资源,目前可利用资源j数量为Availablej,本次申请不成功,进程等待!Needkj); /RequestjAvailablej| /改变Avilable、Allocation、Need

31、的值 for (j=0; jm; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判断当前状态的安全性 safe(); /调用安全性算法函数 if (ln) l=0; coutn试分配后,状态不安全,所以不予分配!恢复原状态endl; /恢复数据 for (j=0; jm; j+) Availablej = Availablej+Requestj; Allocationkj = Allocation

32、kj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; in; i+) Finishi=0; /进程置为未分配状态 else l=0; coutn申请资源成功!endl; for(j=0;jm;j+) if(Needkj=0); else /有一种资源还没全部申请到,则该进程不可执行,不能释放拥有的资源 l=1; /置l为1,作为判断标志 break; if(l!=1) /进程可以执行,则释放该进程的所有资源 for (j=0;jm;j+) Availablej=Availablej+Allocationkj;

33、Allocationkj=0; cout该进程已得到所有需求资源,执行后将释放其所有拥有资源!endl; l=0; /归零 coutn安全的状态!endl; cout安全序列为: ; coutendl进程(p0); /输出安全序列,考虑显示格式,先输出第一个 Finish0=0; for (i=1; in; i+) cout进程(pi); Finishi=0; /所有进程置为未分配状态 coutendlendl; show(); /显示当前状态ppp: /申请大于可利用量, 应该阻塞等待,结束本次资源申请,GOTO 语句跳转至此 coutendl是否继续申请资源(y/n) ?; char* b

34、=new char; /输入y/n,判断是否继续申请 b; coutendl; cout-endlendl; coutendl; if(*b=y|*b=Y) r=true; else r=false; /输入非 Y 则令 R =false jieshu(); /调用结束函数 while (r=true);/结束函数void jieshu() coutendlendl; couttt 演示计算完毕endl; coutendlendl;/主函数int main() coutendlendltttt模拟银行家算法endlendl; chushihua(); /初始化函数调用 coutendl; sh

35、ow(); /输出当前状态 safe(); /判断当前状态的安全性 if (ln) /l在safe中是用来记录安全的进程的个数的 coutn当前状态不安全,拒绝申请!endl; coutendl; return 0; else int i; /局部变量 l=0; coutendln当前的状态是安全的!安全序列为:endl; cout进程(p0); /输出安全序列 for (i=1; in; i+) cout进程(pi); for (i=0; in; i+) Finishi=0; /所有进程置为未分配状态 coutendl; bank(); /调用银行家算法函数 couttt 演示计算完毕endl; return 0;2、编译、链接、运行程序。实验要求1、完成上述实验示例程序,按照银行家算法流程补充出safe()函数即安全性检测算法的内容。2、分析bank()中的多种判断的含义以及数据结构的变化。3、思考银

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁