操作系统A综合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院计算机系综合性实验
实验报告
课程名称操作系统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
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 { for(p=0;p<5;p++) { if(t { q=v[p-1].a[1]; n=p-1; break; } } for(m=0;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);