大连理工大学操作系统实验报告

大连理工大学

本科实验报告

课程名称:操作系统实验

学院(系):计算机科学与技术学院

学业:计算机科学与技术级:号:电计

学生姓名:

年月日

实验项目列表序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

总计学分:实验项目名称进程管理存储管理磁盘移臂调度学时成预习绩操作结果指导教师

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

进程管理实验

一、实验目的

加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。

二、实验原理和内容

原理:(1)fork成功创建子进程后将返回子进程的进程号,不成功会返回-1

(2)exec系统调用有一组6个函数,其中示例实验中引用了execve

系统调用语法:

#include

intexecve(constchar*path,constchar*argv[],constchar*envp[]);path要装入的新的执行文件的绝对路径名字符串.

argv[]要传递给新执行程序的完整的命令参数列表(可以为空).

envp[]要传递给新执行程序的完整的环境变量参数列表(可以为空).Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。exec调用失败,它会返回-1。内容:

(1)每个进程都执行自己独立的程序,打印自己的pid,每个父进程打印其

子进程的pid;

父子1子2(2)每个进程都执行自己独立的程序,打印自己的pid,父进程打印其子进

程的pid;

子1

子2

(3)编写一个命令处理程序,能处理max(m,n),min(m,n)和average(m,n,l)

这几个命令。(使用exec函数族)

三实验代码及结果

(1)

#include#includeintmain(){if(fork()==0){printf("子进程的pid为:%d.\n",getpid());if(fork()==0){printf("二级子进程的pid为:%d.\n",getpid());}}else{

}

运行结果:}return0;printf("父进程的pid为%d.\n",getpid());

(2)

#include#includeintmain(){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)

调用函数为:

include#include#include

#defineN10intmain(){inti;charcmdname[N];printf("$");scanf("%s",cmdname);if(strcmp(cmdname,"min")==0){

execl("/home/lenovo/min","min",NULL);}elseif(strcmp(cmdname,"max")==0){

}elseif(strcmp(cmdname,"ave")==0)

{execl("/home/lenovo/max","max",NULL);

}Max函数为:#include#include#includeintmain(){inta,b;printf("请输入要比较的两个数:\n");scanf("%d%d",&a,&b);printf("大的数是:%d\n",a>b?a:b);}Min函数为:#include#include#includeintmain(){inta,b;}elseprintf("´íÎó!\n");return0;execl("/home/lenovo/average","ave",NULL);

}Average函数为:#include#include#includeintmain(){floata,b,c;printf("请输入要求平均值的两个数:\n");scanf("%f%f%f",&a,&b,&c);printf("平均值为:%.3f\n",(a+b+c)/3);}

实验结果为:printf("请输入要比较的两个数:\n");scanf("%d%d",&a,&b);printf("小的数是:%d\n",a

(此处文字打错,实际输入三个数)

四实验总结

本次实验熟悉了用cygwin软件模拟linux系统的编译环境,熟悉了编译语句gcc1.c–o1和执行语句./1.exe的使用。并且编程实现了fork成功创建子进程及父子进程间的关系,比如else则代表父进程,比如二级子进程的建立方法。

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

存储管理实验

一实验目的

加深对于存储管理的了解,掌握虚拟存储器的实现原理;观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。

二实验内容

1.示例实验程序中模拟两种置换算法:LRU算法和FIFO算法。

2.能对两种算法给定任意序列不同的页面引用串和任意页面实内存数目的组合测试,显示页置换的过程。

3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。

三实验代码及结果

#include#include#includeinta[100],b[100];//执行页号序列、主存中的队列intlen;//序列长度intn;//引用页面号的个数0~n-1intm;//内存中可容纳页面数目intno;//缺页次数floatqyl;//缺页率

intfront,rear;

intcheck(intx)//检查队列中是否有该页号{intj;for(j=front;j=0;k--){if(flag[a[k]]==0){flag[a[k]]=1;count++;if(count==m){for(j=front;j

if((rear-front+1)

elseif((rear-front+1)==m)//内存页数已满if(check(a[i])==0)//检测到队列中没有该页号{b[++rear]=a[i];front+=1;for(j=front;j

}voidLRU()//最近最少使用算法{inti,j,temp;}qyl=(float)no/(float)len;printf("序列长度:%d缺页次数:%d缺页率:%.2f\n",len,no,qyl);

front=rear=0;no=0;b[front]=a[0];printf("%d无淘汰缺页加1\n",b[front]);no+=1;for(i=1;i

elseif((rear-front+1)==m)//内存页数已满,置换策略与FIFO不同

if(check(a[i])==0)//检测到队列中没有该页号{temp=b[find(i)];b[find(i)]=a[i];//替换掉最近最少使用的页号for(j=front;j

}intmain(){inti,choice;printf("请输入序列长度、页号个数、页面实内存数目:\n");scanf("%d%d%d",&len,&n,&m);//for(i=0;i

printf("\n请选择要使用的算法:1FIFOscanf("%d",&choice);printf("\n\n");if(choice==1)FIFO();elseif(choice==2)LRU();2LRU\n");}qyl=(float)no/(float)len;printf("序列长度:%d缺页次数:%d缺页率:%.2f\n",len,no,qyl);}

实验结果:

如图,选择FIFO算法序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页11次,缺页率为0.92。

如图,选择LRU算法,序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页9次,缺页率为0.75。

四实验总结

本次实验用C语言编程,确定序列长度、页号范围、内存中页面数目,随机生成页号序列。可分别选择两种算法来算出置换过程及缺页情况。本次实验使我深入的理解了FIFO算法和LRU算法的置换过程,并且通过比较发现,在大多数情况下LRU算法都具备更低的缺页率。

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

存储管理实验

一实验目的

加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性;掌握几种重要的磁盘移臂调度算法,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。

二实验内容

1.示例实验程序中模拟两种磁盘移臂调度算法:SSTF算法和SCAN算法

2.能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。

3.能统计和报告不同算法情况下响应请求的顺序、移臂的总量。三实验代码及结果

#include#include

intcidao[20];//要被访问的磁道序列intbiaoji[20];//标记是否访问过intn,sum;//要访问的磁道个数,疑臂总量

voidSSTF(){inti,j,k,min,now=100;//now为当前磁头所在磁道位置sum=0;

}voidSCAN(){inti,j,k,min,now=100;//now为当前磁头所在磁道位置inta=0,b;//ab分别为大于等于100小于100的磁道个数sum=0;printf("使用SCAN算法处理:\n");for(i=0;i=100)a+=1;b=n-a;for(i=0;i=now){min=abs(cidao[j]-now);k=j;}}biaoji[k]=1;sum+=abs(cidao[k]-now);printf("访问:%d移动距离:%d\n",cidao[k],abs(cidao[k]-now));now=cidao[k];}printf("使用SSTF算法处理:\n");for(i=0;i

}intmain()//默认从100磁道开始{inti;printf("请输入磁道序列长度:\n");scanf("%d",&n);for(i=0;i

printf("随机生成磁道序列:");srand((unsigned)time(NULL));//这个就是生成了一个种子for(i=0;i

memset(biaoji,0,sizeof(biaoji));SSTF();

memset(biaoji,0,sizeof(biaoji));SCAN();}

如图,输入磁道数量10,随机生成访问磁道的序列[***********]129793149,范围在0~199之间。同时用两个算法对这个序列处理,“访问”即为访问磁道的顺序,最后SSTF算法移臂总量240,SCAN算法移臂总量222。两个算法移臂总量差距不大,对于某些序列二者的移臂总量相同。

四实验总结

本次实验使用C语言模拟了访问磁道顺序的算法,初始位置设为100,随机生成了0~199的序列,用SSTF和SCAN算法处理,对于大多数序列,SCAN要比SSTF算法节省移臂总量,但节省得不算太多,对于某些序列二者的移臂总量会出现相同的情况,使我深入理解了这两个算法以及比较出了算法之间的优劣。

大连理工大学

本科实验报告

课程名称:操作系统实验

学院(系):计算机科学与技术学院

学业:计算机科学与技术级:号:电计

学生姓名:

年月日

实验项目列表序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

总计学分:实验项目名称进程管理存储管理磁盘移臂调度学时成预习绩操作结果指导教师

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

进程管理实验

一、实验目的

加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。

二、实验原理和内容

原理:(1)fork成功创建子进程后将返回子进程的进程号,不成功会返回-1

(2)exec系统调用有一组6个函数,其中示例实验中引用了execve

系统调用语法:

#include

intexecve(constchar*path,constchar*argv[],constchar*envp[]);path要装入的新的执行文件的绝对路径名字符串.

argv[]要传递给新执行程序的完整的命令参数列表(可以为空).

envp[]要传递给新执行程序的完整的环境变量参数列表(可以为空).Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。exec调用失败,它会返回-1。内容:

(1)每个进程都执行自己独立的程序,打印自己的pid,每个父进程打印其

子进程的pid;

父子1子2(2)每个进程都执行自己独立的程序,打印自己的pid,父进程打印其子进

程的pid;

子1

子2

(3)编写一个命令处理程序,能处理max(m,n),min(m,n)和average(m,n,l)

这几个命令。(使用exec函数族)

三实验代码及结果

(1)

#include#includeintmain(){if(fork()==0){printf("子进程的pid为:%d.\n",getpid());if(fork()==0){printf("二级子进程的pid为:%d.\n",getpid());}}else{

}

运行结果:}return0;printf("父进程的pid为%d.\n",getpid());

(2)

#include#includeintmain(){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)

调用函数为:

include#include#include

#defineN10intmain(){inti;charcmdname[N];printf("$");scanf("%s",cmdname);if(strcmp(cmdname,"min")==0){

execl("/home/lenovo/min","min",NULL);}elseif(strcmp(cmdname,"max")==0){

}elseif(strcmp(cmdname,"ave")==0)

{execl("/home/lenovo/max","max",NULL);

}Max函数为:#include#include#includeintmain(){inta,b;printf("请输入要比较的两个数:\n");scanf("%d%d",&a,&b);printf("大的数是:%d\n",a>b?a:b);}Min函数为:#include#include#includeintmain(){inta,b;}elseprintf("´íÎó!\n");return0;execl("/home/lenovo/average","ave",NULL);

}Average函数为:#include#include#includeintmain(){floata,b,c;printf("请输入要求平均值的两个数:\n");scanf("%f%f%f",&a,&b,&c);printf("平均值为:%.3f\n",(a+b+c)/3);}

实验结果为:printf("请输入要比较的两个数:\n");scanf("%d%d",&a,&b);printf("小的数是:%d\n",a

(此处文字打错,实际输入三个数)

四实验总结

本次实验熟悉了用cygwin软件模拟linux系统的编译环境,熟悉了编译语句gcc1.c–o1和执行语句./1.exe的使用。并且编程实现了fork成功创建子进程及父子进程间的关系,比如else则代表父进程,比如二级子进程的建立方法。

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

存储管理实验

一实验目的

加深对于存储管理的了解,掌握虚拟存储器的实现原理;观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。

二实验内容

1.示例实验程序中模拟两种置换算法:LRU算法和FIFO算法。

2.能对两种算法给定任意序列不同的页面引用串和任意页面实内存数目的组合测试,显示页置换的过程。

3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。

三实验代码及结果

#include#include#includeinta[100],b[100];//执行页号序列、主存中的队列intlen;//序列长度intn;//引用页面号的个数0~n-1intm;//内存中可容纳页面数目intno;//缺页次数floatqyl;//缺页率

intfront,rear;

intcheck(intx)//检查队列中是否有该页号{intj;for(j=front;j=0;k--){if(flag[a[k]]==0){flag[a[k]]=1;count++;if(count==m){for(j=front;j

if((rear-front+1)

elseif((rear-front+1)==m)//内存页数已满if(check(a[i])==0)//检测到队列中没有该页号{b[++rear]=a[i];front+=1;for(j=front;j

}voidLRU()//最近最少使用算法{inti,j,temp;}qyl=(float)no/(float)len;printf("序列长度:%d缺页次数:%d缺页率:%.2f\n",len,no,qyl);

front=rear=0;no=0;b[front]=a[0];printf("%d无淘汰缺页加1\n",b[front]);no+=1;for(i=1;i

elseif((rear-front+1)==m)//内存页数已满,置换策略与FIFO不同

if(check(a[i])==0)//检测到队列中没有该页号{temp=b[find(i)];b[find(i)]=a[i];//替换掉最近最少使用的页号for(j=front;j

}intmain(){inti,choice;printf("请输入序列长度、页号个数、页面实内存数目:\n");scanf("%d%d%d",&len,&n,&m);//for(i=0;i

printf("\n请选择要使用的算法:1FIFOscanf("%d",&choice);printf("\n\n");if(choice==1)FIFO();elseif(choice==2)LRU();2LRU\n");}qyl=(float)no/(float)len;printf("序列长度:%d缺页次数:%d缺页率:%.2f\n",len,no,qyl);}

实验结果:

如图,选择FIFO算法序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页11次,缺页率为0.92。

如图,选择LRU算法,序列长度为12,可选页号个数为10个(即随机生成0~9的页号),内存页数为4。页面置换过程如图,缺页9次,缺页率为0.75。

四实验总结

本次实验用C语言编程,确定序列长度、页号范围、内存中页面数目,随机生成页号序列。可分别选择两种算法来算出置换过程及缺页情况。本次实验使我深入的理解了FIFO算法和LRU算法的置换过程,并且通过比较发现,在大多数情况下LRU算法都具备更低的缺页率。

大连理工大学实验报告

学院(系):计算机科学与技术学院专业:计算机科学与技术

姓名:学号:组:___班级:电计1301

实验时间:2016.6.3

指导教师签字:实验室:综412实验台:成绩:

存储管理实验

一实验目的

加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性;掌握几种重要的磁盘移臂调度算法,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。

二实验内容

1.示例实验程序中模拟两种磁盘移臂调度算法:SSTF算法和SCAN算法

2.能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。

3.能统计和报告不同算法情况下响应请求的顺序、移臂的总量。三实验代码及结果

#include#include

intcidao[20];//要被访问的磁道序列intbiaoji[20];//标记是否访问过intn,sum;//要访问的磁道个数,疑臂总量

voidSSTF(){inti,j,k,min,now=100;//now为当前磁头所在磁道位置sum=0;

}voidSCAN(){inti,j,k,min,now=100;//now为当前磁头所在磁道位置inta=0,b;//ab分别为大于等于100小于100的磁道个数sum=0;printf("使用SCAN算法处理:\n");for(i=0;i=100)a+=1;b=n-a;for(i=0;i=now){min=abs(cidao[j]-now);k=j;}}biaoji[k]=1;sum+=abs(cidao[k]-now);printf("访问:%d移动距离:%d\n",cidao[k],abs(cidao[k]-now));now=cidao[k];}printf("使用SSTF算法处理:\n");for(i=0;i

}intmain()//默认从100磁道开始{inti;printf("请输入磁道序列长度:\n");scanf("%d",&n);for(i=0;i

printf("随机生成磁道序列:");srand((unsigned)time(NULL));//这个就是生成了一个种子for(i=0;i

memset(biaoji,0,sizeof(biaoji));SSTF();

memset(biaoji,0,sizeof(biaoji));SCAN();}

如图,输入磁道数量10,随机生成访问磁道的序列[***********]129793149,范围在0~199之间。同时用两个算法对这个序列处理,“访问”即为访问磁道的顺序,最后SSTF算法移臂总量240,SCAN算法移臂总量222。两个算法移臂总量差距不大,对于某些序列二者的移臂总量相同。

四实验总结

本次实验使用C语言模拟了访问磁道顺序的算法,初始位置设为100,随机生成了0~199的序列,用SSTF和SCAN算法处理,对于大多数序列,SCAN要比SSTF算法节省移臂总量,但节省得不算太多,对于某些序列二者的移臂总量会出现相同的情况,使我深入理解了这两个算法以及比较出了算法之间的优劣。


相关文章

  • 进出口业务情景模拟实验报告该
  • 内蒙古工业大学进出口业务情景模拟实验报告目实验目的录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 1 „„„„„„„„„„„„„„„„„„„„„„„ 2 „„„„„„„„„„„„„„„„„„„„„„„„„2 „„„„„„„„„ ...查看


  • 大学生计算机基础实验报告
  • < 大学计算机基础>课程 实验报告手册 学院 年级 专业 姓名 学号 任课教师 上机地点 (以上由学生填写) 实验教师(签字) 西南大学计算机与信息科学学院 计算机基础教育系 年 月 日 一. 实验说明 本课程实验分为一般性实验 ...查看


  • 大学物理实验论文-完整版[1]-好[1]
  • 大学物理实验论文 标题:物理实验的感悟与体会 摘要:在本学期的实验课中,我感悟和体会很多,让我学到许多平时学习不到的大学.虽然在很多的物理实验中,我们只是在复现课堂上所学的理论知识原理与效果,但因为物理实验有着诸多不同的因素,要求我们必须端 ...查看


  • 实验教学质量评价与指标体系建立
  • 第30卷第2期 唐山师范学院学报 2008年3月 Vol.30 No.2 Journal of Tangshan Teachers College Mar. 2008 实验教学质量评价与指标体系建立 史智平 (宝鸡文理学院 物理系,陕西 宝 ...查看


  • 实验室管理部分规章制度目录
  • 实验室管理部分规章制度目录 1. 江西理工大学实验教学管理办法 2. 江西理工大学实验课考试管理办法 3. 江西理工大学实验教学试讲制度 4. 江西理工大学实验室工作条例 5. 江西理工大学实验室规则 6. 江西理工大学学生实验守则 7.  ...查看


  • 植物细胞染色体标本的制作与观察
  • 普通生物学实验课须知 1.新生进实验室之前要认真阅读实验室基本知识. 2.每次进入实验室的时间为以课表为准,提前10分钟进入实验室. 3.应严格按照实验平台上预约时间进入实验室进行实验,不来者,视为旷课.如因特殊情况请假,需在实验开始前至少 ...查看


  • 小型超市销售管理系统
  • 小型超市销售管理系统 实 验 报 告 实验课程: 信息系统分析与设计 学生姓名:曹志明 冯建明 冯伟 胡华 赖玉峰 专业班级: 信息管理041班 组 长:曹志明(6104104002) 小组成员:冯建明(6104104027) 冯 伟(61 ...查看


  • 程序设计基础实验报告
  • 西华大学实验报告(理工类) 开课学院及实验室:汽车学院机房(5D-215) 实验时间: 2008年 3 月 9 日 1.实验目的 1.掌握标签.命令按钮的常用属性.事件和方法. 2.掌握运用图片框和图像框加载图像的方法. 3.掌握计时器和滚 ...查看


  • 大学计算机学习实验报告格式
  • <大学计算机基础>实验报告格式 要求使用 黑色钢笔/签字笔 笔迹工整,尽量不涂抹! 手写! 实验心得不要雷同,应该有自己的见解!通过写实验报告理论联系实际,每次实验都要有收获! 封面时间: 2011 年 10 月 8 日 实验报 ...查看


热门内容