大连理工大学操作系统实验报告.doc_第1页
大连理工大学操作系统实验报告.doc_第2页
大连理工大学操作系统实验报告.doc_第3页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

大连理工大学本科实验报告课程名称: 操作系统实验 学院(系): 计算机科学与技术学院 专 业: 计算机科学与技术 班 级: 电计 学 号: 学生姓名: 年 月 日实验项目列表序号实验项目名称学时成 绩指导教师预习操作结果1进程管理2存储管理3磁盘移臂调度456789101112131415161718总计学分: 大连理工大学实验报告学院(系):计算机科学与技术学院 专业: 计算机科学与技术 班级:电计1301 姓 名: 学号: 组: _ 实验时间: 2016.6.3 实验室: 综412 实验台: 指导教师签字: 成绩: 进程管理实验一、 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。二、 实验原理和内容原理:(1)fork成功创建子进程后将返回子进程的进程号,不成功会返回-1 (2)exec 系统调用有一组6个函数,其中示例实验中引用了 execve 系统调用语法: #include unistd.h int execve(const char *path, const char *argv, const char * envp); path 要装入的新的执行文件的绝对路径名字符串. argv 要传递给新执行程序的完整的命令参数列表(可以为空). envp 要传递给新执行程序的完整的环境变量参数列表(可以为空). Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。exec调用失败,它会返回-1。内容:(1) 每个进程都执行自己独立的程序,打印自己的pid,每个父进程打印其子进程的pid;父子1子2父子1子2(2) 每个进程都执行自己独立的程序,打印自己的pid,父进程打印其子进程的pid; (3) 编写一个命令处理程序,能处理max(m,n), min(m,n)和 average(m,n,l)这几个命令。(使用exec函数族)三 实验代码及结果(1)#includestdio.h#includeunistd.hint main() if(fork() = 0) printf(子进程的pid为:%d.n,getpid(); if(fork() = 0) printf(二级子进程的pid为:%d.n,getpid(); else printf(父进程的pid为%d.n,getpid(); return 0;运行结果:(2)#includestdio.h#includeunistd.hint main() if(fork() = 0) printf(子进程的pid为 %d.n,getpid(); else if(fork() = 0) printf(子进程2的pid %d.n,getpid(); else printf(父进程的pid为 %d.nn,getpid(); return 0;(3)调用函数为:include unistd.h#include string.h#include stdio.h#define N 10int main() int i; char cmdnameN; printf($ ); scanf(%s,cmdname); if(strcmp(cmdname,min)=0) execl(/home/lenovo/min,min,NULL); else if(strcmp(cmdname,max)=0) execl(/home/lenovo/max,max,NULL); else if(strcmp(cmdname,ave)=0) execl(/home/lenovo/average,ave,NULL); else printf(!n); return 0;Max函数为:#include stdio.h#include stdlib.h#include unistd.hint main() int a,b; printf(请输入要比较的两个数:n); scanf(%d%d,a,b); printf(大的数是:%dn,ab?a:b);Min函数为:#include stdio.h#include stdlib.h#include unistd.hint main() int a,b; printf(请输入要比较的两个数:n); scanf(%d%d,a,b); printf(小的数是:%dn,ab?a:b);Average函数为:#include stdio.h#include stdlib.h#include unistd.hint main() float a,b,c; printf(请输入要求平均值的两个数:n); scanf(%f%f%f,a,b,c); printf(平均值为:%.3fn,(a+b+c)/3);实验结果为:(此处文字打错,实际输入三个数)四 实验总结 本次实验熟悉了用cygwin软件模拟linux系统的编译环境,熟悉了编译语句gcc 1.c o 1和执行语句./1.exe的使用。并且编程实现了fork成功创建子进程及父子进程间的关系,比如else则代表父进程,比如二级子进程的建立方法。大连理工大学实验报告学院(系):计算机科学与技术学院 专业: 计算机科学与技术 班级:电计1301 姓 名: 学号: 组: _ 实验时间: 2016.6.3 实验室: 综412 实验台: 指导教师签字: 成绩: 存储管理实验一 实验目的加深对于存储管理的了解,掌握虚拟存储器的实现原理;观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。二 实验内容1. 示例实验程序中模拟两种置换算法:LRU算法和FIFO算法。 2. 能对两种算法给定任意序列不同的页面引用串和任意页面实内存数目的组合测试,显示页置换的过程。 3. 能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。三 实验代码及结果#include stdio.h#include stdlib.h#include time.hint a100,b100;/执行页号序列、主存中的队列int len;/序列长度int n;/引用页面号的个数0n-1int m;/内存中可容纳页面数目int no;/缺页次数float qyl;/缺页率int front,rear;int check(int x)/检查队列中是否有该页号 int j; for(j=front;j=rear;j+) if(bj=x) return 1; return 0;int find(int i)/寻找队列中最近最少使用的页号,仅lrU算法使用该函数 int j,k,small=100,x,count=0; int flag100;/标记这个数是否在最近使用的m个数中 memset(flag,0,sizeof(flag); for(k=i-1;k=0;k-) if(flagak=0) flagak=1; count+; if(count=m) for(j=front;j=rear;j+) if(bj=ak) return j; return x;void FIFO()/先进先出算法 int i,j; front=rear=0; no=0; bfront=a0; printf(%d 无淘汰 缺页加1n,bfront); no+=1; for(i=1;ilen;i+) if(rear-front+1)m)/内存页数未满 if(check(ai)=0)/检测到队列中没有该页号 b+rear=ai; for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 缺页加1n); no+=1; else if(check(ai)=1)/检测到队列中有该页号 for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 不缺页n); else if(rear-front+1)=m)/内存页数已满 if(check(ai)=0)/检测到队列中没有该页号 b+rear=ai; front+=1; for(j=front;j=rear;j+) printf(%d ,bj); printf(淘汰页号%d 缺页加1n,bfront-1); no+=1; else if(check(ai)=1)/检测到队列中有该页号 for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 不缺页n); qyl=(float)no/(float)len; printf(序列长度:%d 缺页次数:%d 缺页率:%.2fn,len,no,qyl);void LRU()/最近最少使用算法 int i,j,temp; front=rear=0; no=0; bfront=a0; printf(%d 无淘汰 缺页加1n,bfront); no+=1; for(i=1;ilen;i+) if(rear-front+1)m)/内存页数未满时,策略和FIFO相同 if(check(ai)=0)/检测到队列中没有该页号 b+rear=ai; for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 缺页加1n); no+=1; else /检测到队列中有该页号 for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 不缺页n); else if(rear-front+1)=m)/内存页数已满,置换策略与FIFO不同 if(check(ai)=0)/检测到队列中没有该页号 temp=bfind(i); bfind(i)=ai;/替换掉最近最少使用的页号 for(j=front;j=rear;j+) printf(%d ,bj); printf(淘汰页号%d 缺页加1n,temp); no+=1; else if(check(ai)=1)/检测到队列中有该页号 for(j=front;j=rear;j+) printf(%d ,bj); printf(无淘汰 不缺页n); qyl=(float)no/(float)len; printf(序列长度:%d 缺页次数:%d 缺页率:%.2fn,len,no,qyl);int main() int i,choice; printf(请输入序列长度、页号个数、页面实内存数目:n); scanf(%d%d%d,len,n,m); /for(i=0;ilen;i+) scanf(%d,ai); printf(随机生成页面引用串:); srand( (unsigned)time( NULL ) ); /这个就是生成了一个种子 for(i=0;ilen;i+) /循环len次,生成len个随机数 ai=rand()%n; /通过rand()%n来生成一个0n-1的随机数,并将它赋给ai printf(%d ,ai); printf(n请选择要使用的算法:1 FIFO 2 LRUn); scanf(%d,choice); printf(nn); if(choice=1) FIFO(); else if(choice=2) LRU();实验结果:如图,选择FIFO算法序列长度为12,可选页号个数为10个(即随机生成09的页号),内存页数为4。页面置换过程如图,缺页11次,缺页率为0.92。如图,选择LRU算法,序列长度为12,可选页号个数为10个(即随机生成09的页号),内存页数为4。页面置换过程如图,缺页9次,缺页率为0.75。四 实验总结 本次实验用C语言编程,确定序列长度、页号范围、内存中页面数目,随机生成页号序列。可分别选择两种算法来算出置换过程及缺页情况。本次实验使我深入的理解了FIFO算法和LRU算法的置换过程,并且通过比较发现,在大多数情况下LRU算法都具备更低的缺页率。大连理工大学实验报告学院(系):计算机科学与技术学院 专业: 计算机科学与技术 班级:电计1301 姓 名: 学号: 组: _ 实验时间: 2016.6.3 实验室: 综412 实验台: 指导教师签字: 成绩: 存储管理实验一 实验目的加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性;掌握几种重要的磁盘移臂调度算法,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。二 实验内容1. 示例实验程序中模拟两种磁盘移臂调度算法:SSTF算法和SCAN算法 2. 能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。 3. 能统计和报告不同算法情况下响应请求的顺序、移臂的总量。三 实验代码及结果#include stdio.h#include stdlib.hint cidao20;/要被访问的磁道序列int biaoji20;/标记是否访问过int n,sum;/要访问的磁道个数,疑臂总量void SSTF() int i,j,k,min,now=100;/now为当前磁头所在磁道位置 sum=0; printf(使用SSTF算法处理:n); for(i=0;in;i+) min=200;/min的最大值可能是0199,必须设为200 for(j=0;jn;j+) if(abs(cidaoj-now)minbiaojij=0) min=abs(cidaoj-now); k=j; biaojik=1; sum+=abs(cidaok-now); printf(访问:%d 移动距离:%dn,cidaok,abs(cidaok-now); now=cidaok; printf(移臂总量为:%dn,sum);void SCAN() int i,j,k,min,now=100;/now为当前磁头所在磁道位置 int a=0,b;/ab分别为大于等于100 小于100的磁道个数 sum=0; printf(使用SCAN算法处理:n); for(i=0;in;i+) if(cidaoi=100) a+=1; b=n-a; for(i=0;ia;i+) min=200;/min的最大值可能是0199,必须设为200 for(j=0;jn;j+) if(abs(cidaoj-now)minbiaojij=0cidaoj=now) min=abs(cidaoj-now); k=j; biaojik=1; sum+=abs(cidaok-now); printf(访问:%d 移动距离:%dn,cidaok,abs(cidaok-now); now=cidaok; for(i=0;ib;i+) min=200;/min的最大值可能是0199,必须设为200 for(j=0;jn;j+) if(abs(cidaoj-now)minbiaojij=0cidaojnow) min=abs(cidaoj-now); k=j; biaojik=1; sum+=abs(cidaok-now); printf(访问:%d

温馨提示

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

最新文档

评论

0/150

提交评论