2024年操作系统实验报告-包括实验内容_第1页
2024年操作系统实验报告-包括实验内容_第2页
2024年操作系统实验报告-包括实验内容_第3页
2024年操作系统实验报告-包括实验内容_第4页
2024年操作系统实验报告-包括实验内容_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

实验报告试验課程:计算机操作系统學生姓名:學号:专业班级:電气Ⅲ类班12月15曰目录试验一编程实現银行家安全算法…………3试验二存储管理的模拟实現……………6试验三磁盘调度算法的模拟实現………15 南昌大學试验汇报(1)编程实現银行家安全算法學生姓名:學号:专业班级:试验类型:□验证□综合■设计□创新试验曰期:10.25,11.1试验成绩:一、试验目的通過试验加强對银行家安全算法的理解和掌握。二、试验内容熟悉防止死锁发生的措施,死锁与安全序列的关系,编程实現银行家算法,规定输出進程的安全序列。三、试验规定1、需写出设计阐明;2、设计实現代码及阐明3、运行成果;四、重要试验环节根据试验规定设计本次试验流程图,并根据试验流程图编写出试验程序。上机运用C語言進行程序输入,并進行程序检查,找出编程錯误,直到程序运行成功為止。分析本次试验所获得的收获。五、试验数据及处理成果六、试验体會或對改善试验的提议程序基本实現了银行家算法的功能,并在其基础上考虑了输出显示的格式的美观性、输入錯误规定重新输入等几种方面,尽量的使程序完整某些。這段程序算是三個试验中最困难最复杂的一种,由于能力有限,因此在紧张的的编写和调试過程中碰到了許多的問題,通過查询资料、翻阅書本、向同學請教、多次调试等措施逐渐处理了大部分問題,编写的過程中也有比较某些算法的优劣性,找出比很好的算法,收获非常大。七、参照资料《计算机操作系统》汤子瀛等

西安電子科技大學出版社 南昌大學试验汇报(2)存储管理的模拟实現學生姓名:學号:专业班级:试验类型:□验证□综合■设计□创新试验曰期:11.8,11.15,11.22试验成绩:一、试验目的存储管理的重要功能之一是合理地分派空间。祈求页式管理是一种常用的虚拟存储管理技术。本试验的目的是通過祈求页式存储管理中页面置换算法模拟设计,理解虚拟存储技术的特點,掌握祈求页式管理的页面置换算法。二、试验内容编程实現页面置换算法,规定输出页面的置换過程,详细可以编程实現OPT、FIFO和LRU算法。三、试验规定1、需写出设计阐明;2、设计实現代码及阐明3、运行成果;四、重要试验环节根据试验规定设计出程序图。根据程序图编写出试验程序。上机進行程序调试,并找出錯误,直至程序通過。分析本次试验所得到的收获。五、试验数据及处理成果#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<time.h>#defineoverflow-2#definenull0#definecodenum220//指令数#definepagenum20//页数intn=pagenum,m=3;//n為提供的页流数,m為顾客可用的物理块数typedefstructlink{ intdata; intsign;//访問位 structlink*next; structlink*rear;//總是指向链表的最终一种元素}qnode,*qlink;voidmenu(int*str);int*creatstr()//创立页流,并保留在str[n]中{ int*str; time_tt;int count=0,m1,m2,m3; str=(int*)malloc(sizeof(int)*(pagenum+10)); if(!str)exit(overflow); srand((unsigned)time(&t)); while(count<=pagenum) { m1=rand()%codenum; str[++count]=m1/10; //str[++count]=(m1+1)/10; m2=rand()%(m1+1); str[++count]=m2/10; //str[++count]=(m2+1)/10; m3=(codenum-1)-rand()%(m1+2); str[++count]=m3/10; //str[++count]=(m3+1)/10; } returnstr;}//*********************************FIFO算法**********************int**initstring()//初始化保留每個页面進行時的成果的二维数组a[n][m]{ int**a,i,j; a=(int**)malloc(sizeof(int*)*(n+1)); if(!a)exit(overflow); for(i=0;i<=n;i++) { a[i]=(int*)malloc(sizeof(int)*(m+1)); if(!a[i])exit(overflow); } for(i=1;i<=n;i++)//初始化保留成果的数组,使得一開始都為空 for(j=1;j<=m;j++) a[i][j]=-1; returna;}voidprintresult(int**a,int*str){ inti,j; printf("****************************theordersofpages***********************\n"); for(i=1;i<=n;i++) printf("%3d",str[i]); putchar('\n'); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(a[j][i]==-1)printf(""); elseprintf("%3d",a[j][i]); } putchar('\n'); } putchar('\n');} intsearch(int*b,intx){//從物理块中找目前要执行的页面与否已經存在内存中,找到返回1 inti; for(i=1;i<=m;i++) if(b[i]==x)returni; return0;}voidfifo(int*str)//先進先出置换算法{ inti,j=0,flag,k; int**a; intcount=0;//用来计算缺页次数的 a=initstring(); for(i=1;i<=n;i++) { flag=search(a[i],str[i]); //假如没有找到,状况一是没有满,二是當物理块满了就得置换 if(!flag)count++; if(!flag) a[i][j++%m+1]=str[i]; //else假如找到什么也不做 if(i!=n) for(k=1;k<=m;k++) a[i+1][k]=a[i][k]; } printresult(a,str);//输出成果; printf("shortofpages:%d\n",count);}//***********************************LRU算法************************qlinkinitlink(){ //初始化链表,其有M個节點,即可以寄存m個页面 qlinkl,q,s; inti; l=(qlink)malloc(sizeof(qnode)); if(!l)exit(overflow); q=l; for(i=1;i<=m;i++) { s=(qlink)malloc(sizeof(qnode)); if(!s)exit(overflow); s->data=-1; q->next=s; q=s; } l->rear=q;//指向尾部,以便操作 l->rear->next=null; returnl;}qlinklsearch(int**a,qlinkl,intx,int*pagnum){ qlinkstatick=l;//k->next一直指向下一种空的物理块 qlinkq=l,temp,p; intflag=0,tempx,findid,j,reardata,flag2=0; intstatici=1; intstatick1=m; intstaticcount=0;//用来计算缺页数 reardata=l->rear->data; while(q->next) { temp=q; q=q->next; if(q->data==x)//假如新来的页面内存中已經有,则将它压入栈顶,即链表的最终一位 if(q!=l->rear)//假如找到的不是最终一种节點 {//這個循环仅仅在已满的环境下有用 if(l->rear->data==-1){flag=1;break;}//假如没有满且新的页面已存在内存中 temp->next=q->next; l->rear->next=q; q->next=null; l->rear=q; flag2=2; } //else假如已存在的页面在链尾,则不動 }//endwhile if(flag2!=2) { //状况一物理块未填满,状况二满了要置换新的 if(l->rear->data==-1)//物理块没有放满 { if(flag)//新的页面已存在内存中 { temp->next=q->next; q->next=k->next; k->next=q; k=k->next; } else{k=k->next;k->data=x;count++;} } else//假如满了,且新来的页面在内存中也没有,就置换出栈底的元素,即近来最久的 { tempx=l->next->data; l->next->data=x; l->rear->next=l->next; l->rear=l->next; l->next=l->next->next; l->rear->next=null; count++; } }//endifflag2 if(reardata==-1)//當内存中没有满的時候 { //printf("i1=%d\n",i); if(!flag)//假如页本来没有在内存中 for(p=l->next,j=1;j<=m;j++,p=p->next)//将栈的状态保留到二维数组中 a[i][j]=p->data; elseif(flag)//假如已經在内存中裏 { if(i!=n) for(j=1;j<=m;j++) a[i+1][j]=a[i][j]; } }//endif else//假如满了 { if(i<=n) { //printf("i2=%d\n",i); for(j=1;j<=m;j++) a[i][j]=a[i-1][j]; findid=search(a[i],tempx); /*if(findid)*/a[i][findid]=x; } }//endelsei++; *pagnum=count; returnl;}voidlru(int*str){//实現措施:栈 int**a; inti; intcount=0; qlinkl; //其中第一种节點是最久的,而最终一种节點總是最新的 l=initlink(); //初始化特殊的栈a=initstring();//初始化保留成果的二维数组 for(i=1;i<=n;i++) l=lsearch(a,l,str[i],&count);//查找并处理 printresult(a,str); printf("shortofpages:%d\n",count);}//************************clock置换算法**************************intrsearch(qlinkr,intx)//在循环队列中查找,即在内存中找页面与否已存在{ inti; qlinkp; for(p=r->next,i=1;i<=m;i++,p=p->next) if(x==p->data)return1; return0;}voidnru(int*str){ int**a; intflag,i,j; intcount=0; qlinkpt,r,p; r=initlink(); a=initstring(); r->rear->next=r->next;//形成循环队列 pt=r->next; for(i=1;i<=n;i++) { flag=rsearch(r,str[i]); if(!flag)count++; if(!flag)//假如没有找到 { if(r->rear->data==-1)//假如没有满 { pt->data=str[i]; pt->sign=1; pt=pt->next; } else//假如满了 { while(pt->sign!=0) {//找第一种访問位為0的页 pt->sign=0; pt=pt->next; } pt->data=str[i];//置换 pt->sign=1; }//endelse }//endif(!flag) //else假如已存在内存中,就保持不動 for(p=r->next,j=1;j<=m;j++,p=p->next) a[i][j]=p->data; }//endfor printresult(a,str); printf("shortofpages:%d\n",count);}//****************主函数*****************voidmenu(int*str){ intco; printf("1.FIFO\n"); printf("2.LRU\n"); printf("3.LFU\n"); printf("4.NRU\n"); printf("5.exit\n"); printf("choose(1--5):"); scanf("%d",&co); switch(co) { case1:fifo(str);break; case2:lru(str);break; case3:lru(str);break; case4:nru(str);break; case5:exit(-1);break; }}intmain(){ //intstr[]={-1,7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//页流 //clrscr();int*str=creatstr();//用随机措施创立页流 //intstr[]={-1,4,7,0,7,1,0,1,2,1,2}; menu(str);}六、试验体會或對改善试验的提议通過本次課程设计,加深了對操作系统的认识,理解了操作系统中多种资源分派算法的实現,尤其是對虚拟存储,页面置换有了深入的理解,并可以用高级語言進行模拟演示。通過查阅有关资料對OPT、FIFO和LRU算法有了一定的理解,基本掌握了C語言编写的基本措施三种页面置换算法的比较,OPT、FIFO和LRU算法,對页面置换有更深一层的理解。使我對操作系统尤其是页面置换這一部分的认识有了很大的加深。七、参照资料《计算机操作系统》汤子瀛等

西安電子科技大學出版社 南昌大學试验汇报(3)磁盘调度算法的模拟实現學生

温馨提示

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

评论

0/150

提交评论