《计算机操作系统》实验指导书_第1页
《计算机操作系统》实验指导书_第2页
《计算机操作系统》实验指导书_第3页
《计算机操作系统》实验指导书_第4页
《计算机操作系统》实验指导书_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、 计算机操作系统实 验 指 导 书沈阳大学信息工程学院课程编号:11245041 课程类别:选修课适用层次:本科 适用专业:电子信息工程课程总学时:48 适用学期:第4学期实验学时:12 开设实验项目数:3实验一:单处理器系统的进程调度 一、实验目的与要求在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。二、实验类型设计型三、实验内容与要求(1)设计多个进程并发执行的模拟调度程序,每个程序由一个PCB表示。(2)模拟调度程

2、序采用动态优先级调度算法实现。(3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。四、实验说明(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:进程名指针要求运行时间优先级状态进程名作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。指 针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为空。要求运行时间假设进程需要运行的单位时间数。优先级赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“

3、就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。(2)在每次运行处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用链式方式组织。(4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数1 ,要求运行时间1,来模拟进程的一次运行。提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了

4、这些工作。(5)进程运行一次后,若要求运行时间不等于0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。(6)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7)在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(8)为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。五、部分参考代码#include<iostream>usi

5、ng namespace std;/PCB块的定义struct PCB int id; struct PCB *next; int runtime; int priority; char status;/创建进程的PCB块,并用链接方式组织,按优先级从大到小排序void create_pcb(PCB *head)int runtime,priority;head->next=NULL; for(int i=0;i<5;i+) cout<<"进程P"<<i+1<<" : " cin>>runtim

6、e>>priority; PCB *p=new PCB; PCB *q=head->next; p->id=i+1; p->runtime=runtime; p->priority=priority; p->status='R' if(q=NULL)|(p->priority>q->priority) p->next=head->next; head->next=p; continue; while(q->next!=NULL)&&(p->priority<(q-&g

7、t;next)->priority) q=q->next; p->next=q->next; q->next=p; /每次调用结束后,调用该函数对PCB链重新按优先级大小排序void sort(PCB *head)if(head->next->runtime=0) head->next->status='E' head->next=head->next->next; return;PCB *p=head->next;head->next=p->next;PCB *q=head->ne

8、xt;if(q=NULL)|(p->priority>q->priority)p->next=head->next;head->next=p;return;while(q->next!=NULL)&&(p->priority<=q->next->priority)q=q->next;p->next=q->next;q->next=p;/调用PCB链中的进程执行(优先级最大的进程,即链首进程)void call(PCB *head)cout<<"$调用P"&l

9、t;<head->next->id<<endl;head->next->runtime-;head->next->priority-;/将调用后,进程的情况显示输出void show(PCB *head)PCB *p=head->next;cout<<"本次调用结束后,进程的状态"<<endl;cout<<"- "<<endl; cout<<"-"<<endl;while(p!=NULL)cout<

10、<" p"<<p->id <<" "<<p->runtime <<" "<<p->priority <<" "<<p->status <<endl;cout<<"-"<<endl;p=p->next;/主函数int main()cout<<"*单处理器系统的进程调度模拟*"<<endl;cout&l

11、t;<"开始执行:请输入各个进程的运行时间和优先级"<<endl; PCB *head=new PCB; create_pcb(head); while(head->next!=NULL) call(head); sort(head); show(head); cout<<"*进程调度结束*"<<endl;return 0;六、实验数据处理与分析程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。七、注意事项在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一

12、次后进程队列的变化。在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在本实验中实现模拟操作,省去了这些工作。八、预习与思考题 进程控制块应包括哪些内容?进程控制块的组织方式?实验二:银行家算法 一、实验目的与要求银行家算法是死锁避免常采取的算法,是一种通过探测来决定是否资源分配的安全算法。通过对该算法的模拟体会对设备安全分配的策略。二、实验类型设计型三、实验原理及说明银行家算法是从当前状态出发,逐个按安全序列检查各客户中谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户。如果所有客户都能完成工作,则找到

13、一个安全序列,银行家才是安全的。四、实验仪器序 号名 称主要用途1一台安装Windows操作系统及C语言编译程序的pc机。 编程模拟操作系统运行五、实验内容和步骤(一)内容:第一部分:银行家算法(扫描)(1)如果Request<=Need,则转向2;否则,出错(2)如果Request<=Available,则转向3,否则等待(3)系统试探分配请求的资源给进程(4)系统执行安全性算法第二部分:安全性算法(1)设置两个向量Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)Finish:表示系统是否有足够资源分配给进程(True:有;False:没有)(2)

14、若Finishi=False&&Need<=Work,则执行(3);否则执行(4)(I为资源类别)(3)进程P获得第i类资源,则顺利执行直至完成!并释放资源:Work=Work+Allocation;Finishi=true;转(2)。(4)若所有进程的Finishi=true,则表示系统安全;否则,不安全!(二)部分参考程序:/M个进程对N类资源最大资源需求量int MAXMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/系统可用资源数int AVAILABLEN=10,5,7; /M个进程已经得到N类资源的资源量int ALLOCATIONMN=0,

15、0,0,0,0,0,0,0,0,0,0,0,0,0,0;/M个进程还需要N类资源的资源量int NEEDMN=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int RequestN=0,0,0; void showdata() int i,j;cout<<" 系统可用的资源数为:"<<endl<<endl;cout<<" "for (j=0;j<N;j+)cout<<" 资源"<<j<<": "<<A

16、VAILABLEj;cout<<endl; cout<<" 各进程还需要的资源量:"<<endl<<endl;for (i=0;i<M;i+)cout<<"进程"<<i<<":"for (j=0;j<N;j+)cout<<" 资源"<<j<<": "<<NEEDij;cout<<endl;cout<<endl;cout<&l

17、t;" 各进程已经得到的资源量: "<<endl<<endl;for (i=0;i<M;i+)cout<<"进程"<<i<<":"for (j=0;j<N;j+)cout<<" 资源"<<j<<": "<<ALLOCATIONij; cout<<endl; cout<<endl; void changdata(int k) int j; for (j=0

18、;j<N;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj; void rstordata(int k) int j; for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj; int chkerr(int s) int WORK,FINISHM,tempM; int i,j,k=0;

19、for(i=0;i<M;i+)FINISHi=FALSE; for(j=0;j<N;j+) WORK=AVAILABLEj; i=s; while(i<M) if (FINISHi=FALSE&&NEEDij<=WORK) WORK=WORK+ALLOCATIONij; FINISHi=TRUE; tempk=i; k+; i=0; else i+; for(i=0;i<M;i+) if(FINISHi=FALSE) cout<<endl;cout<<" 系统不安全! 本次资源申请不成功!"<<

20、;endl; cout<<endl; return 1; cout<<endl;cout<<" 经安全性检查,系统安全,本次分配成功。"<<endl; cout<<endl; cout<<" 本次安全序列:" for(i=0;i<M;i+)cout<<"进程"<<tempi<<"->" cout<<endl<<endl; return 0; 六、实验数据处理与分析实验中要求

21、进程 P 需要申请 8 个资源(假设都是一样的),已经申请了 5 个资源,还差 3 个资源。若这个时候操作系统还剩下 2 个资源。七、注意事项当进程pi提出资源申请时,系统执行下列步骤:(1)若RequestiNeedi,转(2);否则错误返回(2)若RequestiAvailable,转(3);否则进程等待(3)假设系统分配了资源,则有:Available:=Available-Requesti;Allocationi:=Allocationi+Requesti;Needi:=Needi-Requesti若系统新状态是安全的,则分配完成若系统新状态是不安全的,则恢复原状态,进程等待。八、预习

22、与思考题 如何避免资源分配中的死锁问题?实验三:请求页式存储管理中常用页面置换算法模拟 一、实验目的与要求以最近最久未使用算法(LRU)页面置换调度算法为例,设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。二、实验类型设计型三、实验原理及说明最近最久未使用(LRU)置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择现有页面中其t值最大的,

23、即最近最久未使用的页面予以淘汰。四、实验仪器序 号名 称主要用途1一台安装Windows操作系统及C语言编译程序的pc机。 编程模拟操作系统运行五、实验内容和步骤(一)内容:通过从一般常用的调页算法中选取典型算法LRU,了解页面管理的相关细节,并用程序设计实现LRU。 本示例是采用页式分配存储管理方案,并通过分析计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣。另外也考虑到改变页面大小和实际存储器容量对计算结果的影响,从而可为算则好的算法、合适的页面尺寸和实存容量提供依据。(二)部分参考程序:#include <iostream.h> const max=100

24、0; class stack private: char datamax; int top,ncsh; public: void init(stack *s,int nc)/栈初始化,指定栈内空间 s->top=-1; s->ncsh=nc; int empty(stack *s)/判栈满 return s->top=s->ncsh-1; void push(stack *s,char c)/元素进栈 s->data+s->top=c; char pop(stack *s)/出栈 return s->datas->top-; int chazh(stack *s,char c)/是否有相同元素 int i,j,k; k=s->top; for(i=0;s->top!=(-1)&

温馨提示

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

评论

0/150

提交评论