您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 大连理工大学操作系统实验报告
大连理工大学本科实验报告课程名称:操作系统实验学院(系):计算机科学与技术学院专业:计算机科学与技术班级:电计学号:学生姓名:年月日实验项目列表序号实验项目名称学时成绩指导教师预习操作结果1进程管理2存储管理3磁盘移臂调度456789101112131415161718总计学分:大连理工大学实验报告学院(系):计算机科学与技术学院专业:计算机科学与技术班级:电计1301姓名:学号:组:___实验时间:2016.6.3实验室:综412实验台:指导教师签字:成绩:进程管理实验一、实验目的加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。二、实验原理和内容原理:(1)fork成功创建子进程后将返回子进程的进程号,不成功会返回-1(2)exec系统调用有一组6个函数,其中示例实验中引用了execve系统调用语法:#includeunistd.hintexecve(constchar*path,constchar*argv[],constchar*envp[]);path要装入的新的执行文件的绝对路径名字符串.argv[]要传递给新执行程序的完整的命令参数列表(可以为空).envp[]要传递给新执行程序的完整的环境变量参数列表(可以为空).Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。exec调用失败,它会返回-1。内容:(1)每个进程都执行自己独立的程序,打印自己的pid,每个父进程打印其子进程的pid;(2)每个进程都执行自己独立的程序,打印自己的pid,父进程打印其子进程的pid;(3)编写一个命令处理程序,能处理max(m,n),min(m,n)和average(m,n,l)这几个命令。(使用exec函数族)三实验代码及结果(1)#includestdio.h#includeunistd.hintmain(){if(fork()==0){printf(子进程的pid为:%d.\n,getpid());if(fork()==0){printf(二级子进程的pid为:%d.\n,getpid());}}else{父子1子2父子1子2printf(父进程的pid为%d.\n,getpid());}return0;}运行结果:(2)#includestdio.h#includeunistd.hintmain(){if(fork()==0){printf(子进程的pid为%d.\n,getpid());}else{if(fork()==0){printf(子进程2的pid%d.\n,getpid());}else{printf(父进程的pid为%d.\n\n,getpid());}}return0;}(3)调用函数为:includeunistd.h#includestring.h#includestdio.h#defineN10intmain(){inti;charcmdname[N];printf($);scanf(%s,cmdname);if(strcmp(cmdname,min)==0){execl(/home/lenovo/min,min,NULL);}elseif(strcmp(cmdname,max)==0){execl(/home/lenovo/max,max,NULL);}elseif(strcmp(cmdname,ave)==0){execl(/home/lenovo/average,ave,NULL);}elseprintf(´íÎó!\n);return0;}Max函数为:#includestdio.h#includestdlib.h#includeunistd.hintmain(){inta,b;printf(请输入要比较的两个数:\n);scanf(%d%d,&a,&b);printf(大的数是:%d\n,ab?a:b);}Min函数为:#includestdio.h#includestdlib.h#includeunistd.hintmain(){inta,b;printf(请输入要比较的两个数:\n);scanf(%d%d,&a,&b);printf(小的数是:%d\n,ab?a:b);}Average函数为:#includestdio.h#includestdlib.h#includeunistd.hintmain(){floata,b,c;printf(请输入要求平均值的两个数:\n);scanf(%f%f%f,&a,&b,&c);printf(平均值为:%.3f\n,(a+b+c)/3);}实验结果为:(此处文字打错,实际输入三个数)四实验总结本次实验熟悉了用cygwin软件模拟linux系统的编译环境,熟悉了编译语句gcc1.c–o1和执行语句./1.exe的使用。并且编程实现了fork成功创建子进程及父子进程间的关系,比如else则代表父进程,比如二级子进程的建立方法。大连理工大学实验报告学院(系):计算机科学与技术学院专业:计算机科学与技术班级:电计1301姓名:学号:组:___实验时间:2016.6.3实验室:综412实验台:指导教师签字:成绩:存储管理实验一实验目的加深对于存储管理的了解,掌握虚拟存储器的实现原理;观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。二实验内容1.示例实验程序中模拟两种置换算法:LRU算法和FIFO算法。2.能对两种算法给定任意序列不同的页面引用串和任意页面实内存数目的组合测试,显示页置换的过程。3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。三实验代码及结果#includestdio.h#includestdlib.h#includetime.hinta[100],b[100];//执行页号序列、主存中的队列intlen;//序列长度intn;//引用页面号的个数0~n-1intm;//内存中可容纳页面数目intno;//缺页次数floatqyl;//缺页率intfront,rear;intcheck(intx)//检查队列中是否有该页号{intj;for(j=front;j=rear;j++){if(b[j]==x)return1;}return0;}intfind(inti)//寻找队列中最近最少使用的页号,仅lrU算法使用该函数{intj,k,small=100,x,count=0;intflag[100];//标记这个数是否在最近使用的m个数中memset(flag,0,sizeof(flag));for(k=i-1;k=0;k--){if(flag[a[k]]==0){flag[a[k]]=1;count++;if(count==m){for(j=front;j=rear;j++){if(b[j]==a[k])returnj;}}}}returnx;}voidFIFO()//先进先出算法{inti,j;front=rear=0;no=0;b[front]=a[0];printf(%d无淘汰缺页加1\n,b[front]);no+=1;for(i=1;ilen;i++){if((rear-front+1)m)//内存页数未满{if(check(a[i])==0)//检测到队列中没有该页号{b[++rear]=a[i];for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰缺页加1\n);no+=1;}elseif(check(a[i])==1)//检测到队列中有该页号{for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰不缺页\n);}}elseif((rear-front+1)==m)//内存页数已满{if(check(a[i])==0)//检测到队列中没有该页号{b[++rear]=a[i];front+=1;for(j=front;j=rear;j++)printf(%d,b[j]);printf(淘汰页号%d缺页加1\n,b[front-1]);no+=1;}elseif(check(a[i])==1)//检测到队列中有该页号{for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰不缺页\n);}}}qyl=(float)no/(float)len;printf(序列长度:%d缺页次数:%d缺页率:%.2f\n,len,no,qyl);}voidLRU()//最近最少使用算法{inti,j,temp;front=rear=0;no=0;b[front]=a[0];printf(%d无淘汰缺页加1\n,b[front]);no+=1;for(i=1;ilen;i++){if((rear-front+1)m)//内存页数未满时,策略和FIFO相同{if(check(a[i])==0)//检测到队列中没有该页号{b[++rear]=a[i];for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰缺页加1\n);no+=1;}else//检测到队列中有该页号{for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰不缺页\n);}}elseif((rear-front+1)==m)//内存页数已满,置换策略与FIFO不同{if(check(a[i])==0)//检测到队列中没有该页号{temp=b[find(i)];b[find(i)]=a[i];//替换掉最近最少使用的页号for(j=front;j=rear;j++)printf(%d,b[j]);printf(淘汰页号%d缺页加1\n,temp);no+=1;}elseif(check(a[i])==1)//检测到队列中有该页号{for(j=front;j=rear;j++)printf(%d,b[j]);printf(无淘汰不缺页\n);}}}qyl=(float)no/(float)len;printf(序列长度:%d缺页次数:%d缺页率:%.2f\n,len,no,qyl);}intmain(){inti,choice;printf(请输入序列长度、页号个数、页面实内存数目:\n);scanf(%d%d%d,&len,&n,&m);//for(i=0;ilen;i++)scanf(%d,&a[i]);printf(随机生成页面引用串:);srand((unsigned)time(NULL));//这个就是生成了一个种子for(i=0;ilen;i++)//循环len次,生成len个随机数{a[i]=rand()%n;//通过rand()%n来生成一个0~n-1的随机数,并将它赋给a[i]printf(%d,a[i]);}printf(\n请选择要使用的算法:1FIFO2LRU\n);scanf(%d,&choice);printf(\n\n);if(choice==1)FIFO();elseif(choice==2)LRU();}实验结果:如图,选择FIFO算法序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页11次,缺页率为0.92。如图,选择LRU算法,序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页9次,缺页率为0.75。四实验总结本次实验用C语言编程,确定序列长度、页号范围、内存中页面数目,随机生成页号序列。可分别选择
本文标题:大连理工大学操作系统实验报告
链接地址:https://www.777doc.com/doc-5468147 .html