当前位置:文档之家› 操作系统A综合实验报告

操作系统A综合实验报告

华北科技学院计算机系综合性实验
实验报告
课程名称操作系统A
实验学期 2010 至 2011 学年第 5 学期学生所在系部计算机系
年级 09 专业班级信管B091
学生姓名郑印学号 200907034117 任课教师杜杏青
实验成绩
计算机系制
实验报告须知
1、学生上交实验报告时,必须为打印稿(A4纸)。

页面空间不够,可以顺延。

2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、
内容、结果及分析等。

3、教师应该填写的内容包括:实验成绩、教师评价等。

4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合
性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。

综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。

任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。

5、未尽事宜,请参考该课程的实验大纲和教学大纲。

《操作系统A》课程综合性实验报告
开课实验室:年月日
实验题目进程调度算法程序设计
一、实验目的
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。

二、设备与环境
1. 硬件设备:PC机一台
2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。

三、实验内容
用C语言实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。

四、实验结果及分析
1.实验设计说明
本实验为进程调度中的短作业优选(非抢占式)算法的实现。

定义结构struct jincheng,其中
d表示其进程名,数组啊a[2]表示其到达时间和所需求的服务时间。

b[5],c[5],e[5]分别表示进程的完成时间,周转时间,平均周转时间。

t表示时间刻表。

开始时,选输出各进程,进程A到达,执行晚后,其服务时间置0,根据时间刻t,判断是否所有进程都到达,若没有,则判断哪些进程到达,从中找出最短的服务时间(不包括已调度的进程),执行,若全部到达,则从全部进程中找到最短服务时间的进程(不包括已调度的进程),执行。

最后输出各进程的完成时间,周转时间,平均周转时间。

及他们的平均时间。

2.实验代码
/***********spf(非抢占)************/
#include <stdio.h>
void main()
{
struct jincheng
{
char d;
int a[2];
}v[5]={{'A',0,3},{'B',2,6},{'C',4,4},{'D',6,5},{'E',8,2}} ; //定义进程的到达时间和服务时间int t=0,i=0,j,m,n=0,p,q,s=0,g[5];
int b[5]; //表示完成时间
int c[5]; //表示周转时间
float e[5],k=0,l,h; //表示带权周转时间
/*********要调度的进程*************************/
printf("进程到达时间和服务时间: \n");
printf("进程到达时间服务时间\n");
for(i=0;i<5;i++)
{
printf("%c %d %d\n",v[i].d,v[i].a[0],v[i].a[1]);
g[i]=v[i].a[1];
}
/****************进程调度的实现******************/
for(j=0;j<5;j++)
{
t=t+v[n].a[1];
b[n]=t;
v[n].a[1]=0;
if(t<v[4].a[0])
{
for(p=0;p<5;p++)
{
if(t<v[p].a[0])
{
q=v[p-1].a[1];
n=p-1;
break;
}
}
for(m=0;m<p;m++)
{
if(q>v[m].a[1] && v[m].a[1]!=0)
n=m;
}
}
else
{
for(m=0;m<5;m++)
{
if(v[m].a[1]!=0)
{q=v[m].a[1];n=m;break;}
}
for(m=0;m<5;m++)
{
if(q>v[m].a[1] && v[m].a[1]!=0)
n=m;
}
}
}
printf("\n");
printf("进程的完成时间\n");
for(i=0;i<5;i++)
{
printf("%c ",v[i].d);
}
printf("\n");
for(i=0;i<5;i++)
{
printf("%d ",b[i]);
c[i]=b[i]-v[i].a[0];
}
printf("\n");
printf("\n");
printf("进程的周转时间\n");
for(i=0;i<5;i++)
{
printf("%d ",c[i]);
s=s+c[i];
e[i]=c[i]/(g[i]*1.0);
}
printf("\n");
printf("\n");
printf("进程的带权周转时间\n");
for(i=0;i<5;i++)
{
printf("%.2f ",e[i]);
k=k+e[i];
}
l=s/5.0;
h=k/5.0;
printf("\n");
printf("\n");
printf("平均周转时间:%.2f\n",l); printf("平均带权周转时间:%.2f\n",h);
getch();
}
3.实验结果
4.实验结果分析
实验结果,输出了周转时间,带权周转时间,及平均周转时间,平均带权周转时间,根据结果数据比先来先服务算法大大的提高了作业的平均周转时间,平均带权周转时间,提高的系统吞吐量,但不利于长作业和紧迫的作业的运行。

5.实验心得
通过这次实验,我又一遍复习了有关c语言编程需要注意的事项,加深了印象,更好的掌握这门语言
除此之外,当然对操作系统进程调度算法,有了更深的了解,每个进程在计算机上是怎么运行的。

通过模拟,对每种的进程调度的优缺点,有了个大致的认识,像先来先服务算法,简单,易于实现,但不利于短作业和I/o型作业的运行常作辅助调度算法等。

通过这次实验,我还了解到自己有很多的不足,如,对实现调度算法,感觉很困难,程序出错,很难自己改过来,等等,这都反应了我对c语言的掌握不足,还有对调度算法的不熟悉,所以,以后还需要我更进一步学习。

教师评价
评定项目 A B C D 评定项目 A B C D 算法正确界面美观,布局合理
程序结构合理操作熟练
语法、语义正确解析完整
实验结果正确文字流畅
报告规范题解正确
其他:
评价教师签名:
年月日。

相关主题