下载此文档

操作系统实验全(五个).doc


文档分类:IT计算机 | 页数:约24页 举报非法文档有奖
1/24
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/24 下载此文档
文档列表 文档介绍
该【操作系统实验全(五个) 】是由【天随人愿的夏天】上传分享,文档一共【24】页,该文档可以免费在线阅读,需要了解更多关于【操作系统实验全(五个) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。..操作系统试验指导—.课程的性质、目的和任务操作系统在整个计算机系统软件中占有中心地位。 其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务, 为用户创造既灵活又方便的使用环境。 本课程是计算机及应用专业的一门专业主干课和必修课。通过本课程的学****使学生掌握操作系统的基本概念、设计原理及实施技术 ,具有分析操作系统和设计、实现、开发实际操作系统的能力。。 操作系统质量对整个计算机系统的性能和用户对计算机的使用有重大的影响。 一个优良的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率, 提高系统工作的可靠性。 由于操作系统涉及计算机系统中各种软硬件资源的管理, 内容比较繁琐,具有很强的实践性。 要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学****效果。培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧, 提高学生编制清晰、 合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 :C语言编程环境上机前的准备工作包括:按实验指导书要求事先编好程序;准备好需要输入的中间数据;估计可能出现的问题;预计可能得到的运行结果。、银行家算法、页式地址重定位模拟, LRU算法模拟和先来先服务算法五个实验。每个实验介绍了实****的目的要求、内容和方法。;....实验一、进程调度试验[目的要求]用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.[准备知识]一、基本概念1、进程的概念;2、进程的状态和进程控制块;3、进程调度算法;二、进程调度1、进程的状态进程调度程序把处运行进程因某事件(如等待I/O理机分配给进程(3)完成)变成阻塞状态1)时间片(2) 已用完就绪(4)阻塞某事件被 解除I/O完成)2、进程的结构—— PCB进程都是由一系列操作 (动作)所组成,通过这些操作来完成其任务。因此,不同的进程,其内部操作也不相同。在操作系统中,描述一个进程除了需要程序和私有数据之外,最主要的是需要一个与动态过程相联系的数据结构, 该数据结构用来描述进程的外部特性(名字、状态等)以及与其它进程的联系 (通信关系)等信息,该数据结构称为进程控制块(PCB,ProcessControlBlock)。进程控制块 PCB与进程一一对应, PCB中记录了系统所需的全部信息、用于描述进程情况所需的全部信息和控制进程运行所需的全部信息。 因此,系统可以通过进程的 PCB来对进程进行管理。[试验内容]设计一个有 N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法 (即把处理机分配给优先数最高的进程)和先来先服务算法。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用 CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定 (也可以由随机数产生) 。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成 F(Finish)三种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用已占用 CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一;....个时间片后进程的已占用 CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减 1(即降低一级),然后把它插入就绪队列等待 CPU。每进行一次调度程序都打印一次运行进程、就绪队列、 以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的流程图如下 :进程调度源程序如下:#include""#include<>#include<>#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb{/* 定义进程控制块 PCB*/charname[10];charstate;intsuper;intntime;intrtime;structpcb*link;;....}*ready=NULL,*p;typedefstructpcbPCB;sort()/* 建立对进程进行优先级排列函数 */{PCB*first,*second;intinsert=0;if((ready==NULL)||((p->super)>(ready->super)))/* 优先级最大者 ,插入队首*/{p->link=ready;ready=p;}else/*进程比较优先级 ,插入适当的位置中 */{first=ready;second=first->link;while(second!=NULL){if((p->super)>(second->super))/*若插入进程比当前进程优先数大 ,*/{/*插入到当前进程前面*/p->link=second;first->link=p;second=NULL;insert=1;}else/*插入进程优先数最低 ,则插入到队尾*/{first=first->link;second=second->link;}}if(insert==0)first->link=p;}}input()/* 建立进程控制块函数 */{inti,num;clrscr();/*清屏*/printf("\n 请输入进程号 ?");scanf("%d",&num);for(i=0;i<num;i++);....{printf("\n 进程号No.%d:\n",i);p=getpch(PCB);printf("\n 输入进程名:");scanf("%s",p->name);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函数*/}}intspace(){intl=0;PCB*pr=ready;while(pr!=NULL){l++;pr=pr->link;}return(l);}disp(PCB*pr)/*建立进程显示函数 ,用于显示当前进程 */{printf("\nqname\tstate\tsuper\tndtime\truntime\n");printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->super);printf("|%d\t",pr->ntime);printf("|%d\t",pr->rtime);printf("\n");}check()/* 建立进程查看函数 */{PCB*pr;printf("\n**** 当前正在运行的进程是 :%s",p->name);/*显示当前运行进程 */disp(p);pr=ready;printf("\n**** 当前就绪队列状态为 :\n");/*显示就绪队列状态 */while(pr!=NULL);....{disp(pr);pr=pr->link;}}destroy()/*建立进程撤消函数 (进程运行结束,撤消进程)*/{printf("\n 进程 [%s]已完成.\n",p->name);free(p);}running()/* 建立进程就绪函数 (进程运行时间到 ,置就绪状态*/{(p->rtime)++;if(p->rtime==p->ntime)destroy();/* 调用destroy函数*/else{(p->super)--;p->state='w';sort();/*调用sort函数*/}}main()/*主函数*/{intlen,h=0;charch;input();len=space();while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf("\nTheexecutenumber:%d\n",h);p=ready;ready=p->link;p->link=NULL;p->state='R';check();running();printf("\n 按任一键继续 ......");ch=getchar();}printf("\n\n 进程已经完成 .\n");ch=getchar();};....实验二、银行家算法(一) 目的和要求银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法。本实验要求用高级语言编写一个银行家的模拟算法。通过本实验可以对预防死锁和银行家算法有更深刻的认识。(二) 实验内容1、设置数据结构包括可利用资源向量(Availiable),最大需求矩阵(Max),分配矩阵(Allocation),需求矩阵(Need)2、设计安全性算法设置工作向量 Work表示系统可提供进程继续运行可利用资源数目, Finish表示系统是否有足够的资源分配给进程(三) 实验环境1、pc2、vc++(四)、程序源代码:/*子函数声明*/intIsprocessallover(); //判断系统中的进程是否全部运行完毕voidSystemstatus(); //显示当前系统中的资源及进程情况intBanker(int,int*); //银行家算法voidAllow(int,int*); //若进程申请不导致死锁,用此函数分配资源voidForbidenseason(int); //若发生死锁,则显示原因/*全局变量*/intAvailiable[3]={3,3,2}; //初始状态,系统可用资源量intMax[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};各进程对各资源的最大需求量intAllocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//初始状态,各进程占有资源量intNeed[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//初始状态时,各进程运行完毕,还需要的资源量intover[5]={0,0,0,0,0}; //标记对应进程是否得到所有资源并运行完毕#include<>/*主函数*/voidmain(){intprocess=0; //发出请求的进程intdecide=0; //银行家算法的返回值intRequest[3]={0,0,0}; //申请的资源量数组intsourcenum=0; //申请的各资源量/*判断系统中进程是否全部运行完毕 */step1: if(Isprocessallover()==1);....{cout<<"系统中全部进程运行完毕! ";return;}/*显示系统当前状态 */Systemstatus();/*人机交互界面 */step2:cout<<"\n输入发出请求的进程(输入“0”退出系统):";cin>>process;if(process==0){cout<<"放弃申请,退出系统!";return;}if(process<1||process>5||over[process-1]==1){cout<<"系统无此进程! \n";gotostep2;}cout<<"此进程申请各资源( A,B,C)数目:\n";for(inth=0;h<3;h++){cout<<char(65+h)<<"资源:";cin>>sourcenum;Request[h]=sourcenum;}/*用银行家算法判断是否能够进行分配 */decide=Banker(process,Request);if(decide==0){/*将此进程申请资源分配给它 */Allow(process,Request);gotostep1;}else{/*不能分配,显示原因 */Forbidenseason(decide);gotostep2;}}/*子函数Isprocessallover()的实现*/intIsprocessallover();....{intprocessnum=0;for(inti=0;i<5;i++){/*判断每个进程是否运行完毕 */if(over[i]==1)processnum++;}if(processnum==5)/*系统中全部进程运行完毕 */return1;elsereturn0;}/*子函数Systemstatus()的实现*/voidSystemstatus(){cout<<"此刻系统中存在的进程: \n";for(inti=0;i<5;i++){if(over[i]!=1)cout<<"P"<<i+1<<" ";}cout<<endl;cout<<"此刻系统可利用资源(单位:个) :\n";cout<<"A B C\n";for(inta=0;a<3;a++){cout<<Availiable[a]<<" ";}cout<<endl;cout<<"此刻各进程已占有资源如下(单位:个) :\n"<<" A B C\n";for(intb=0;b<5;b++){if(over[b]==1)continue;cout<<"P"<<b+1<<" ";for(intc=0;c<3;c++)cout<<Allocation[b][c]<<" ";cout<<endl;}cout<<"各进程运行完毕还需各资源如下(单位:个) :\n";....<<" A B C\n";for(intf=0;f<5;f++){if(over[f]==1)continue;cout<<"P"<<f+1<<" ";for(intg=0;g<3;g++)cout<<Need[f][g]<<" ";cout<<endl;}}/*子函数Banker(int,int&)的实现*/intBanker(intp,int*R){intnum=0; //标记各资源是否能满足各进程需要intFinish[5]={0,0,0,0,0}; //标记各进程是否安全运行完毕intwork[5]={0,0,0,0,0}; //用于安全检查intAvailiableTest[3]; //用于试分配intAllocationTest[5][3]; //同上intNeedTest[5][3]; //同上/*判断申请的资源是否大于系统可提供的资源总量 */for(intj=0;j<3;j++){if(*(R+j)>Availiable[j])/*返回拒绝分配原因 */return1;}/*判断该进程申请资源量是否大于初始时其申明的需求量 */for(inti=0;i<3;i++){if(*(R+i)>Need[p-1][i])/*返回拒绝原因 */return2;}/*为检查分配的各数据结构赋初值 */for(intt=0;t<3;t++){AvailiableTest[t]=Availiable[t];}for(intu=0;u<5;u++){for(intv=0;v<3;v++){;..

操作系统实验全(五个) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息