当前位置:
文档之家› 操作系统C-进程调度算法实验报告
操作系统C-进程调度算法实验报告
/*创建进程*/
printf(" ******先来先服务算法****** \n");
printf("请输入进程的数目:\n");
scanf("%d",&m);
i=m;
for(i=0;i<m;i++)
{
printf("请输入进程%d的进程名,到达时间,服务时间\n",i+1);
cin>>pro[i].name>>pro[i].atime>>pro[i].stime;
}
xianshi(pro,m);
fcfs(pro,m);
getchar();
}
2.实验结果
进程的初始化,先输入进程的数目。创建3个进程,并且分别给它们的进程ID、到达时间、服务时间赋值。
首先根据到达时间重新将进程按由小到大的顺序排序,然后再使用FCFS算法,模拟进程快调度过程。
3.实验结果分析
本次进程调度算法采用的是先来先服务(FCFS)调度算法,这是一种最简单的调度算法,该算法既可以用于作业调度,也可以用于进程调度。再作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。再进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而后才放弃处理机。
(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:
进程标识数ID。
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
进程已占用CPU时间CPUTIME。
进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。
进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。
int rtime; /*周转时间*/
float qrtime; /*带权周转时间*/
};Байду номын сангаас
void xianshi(struct program a[],int n){
int i,j;
struct program t;
/*将进程按时间排序*/
printf("根据到达时间重新排序:\n");
printf("*****进程*************到达时间***************服务时间*****\n");
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
二、设备与环境
1.硬件设备:PC机一台
2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java等编程语言环境。
三、实验内容
(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。
}
printf("\nFCFS算法:\n");
printf("*****进程****到达时间****完成时间******周转时间*******带权周转时间*****\n");
for(i=0;i<n;i++)
{
printf(" %c %d %.2d %.2d %.2f |\n",a[i].name,a[i].atime,
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(a[i].atime>a[i+1].atime)
{
t.atime=a[i].atime;a[i].atime=a[i+1].atime;a[i+1].atime=t.atime;
=a[i].name;a[i].name=a[i+1].name;a[i+1].name=;
四、实验结果及分析
1.实验代码
#include <stdio.h>
#include<iostream>
using namespace std;
struct program
{
char name; /*进程名*/
int atime; /*到达时间*/
int stime; /*服务时间*/
int ftime; /*完成时间*/
t.stime=a[i].stime;a[i].stime=a[i+1].stime;a[i+1].stime=t.stime;
}
for(i=0;i<n;i++)
printf(" %c %d %d |\n",a[i].name,
a[i].atime,a[i].stime);
printf("----------------------------------------------------\n");
}
void fcfs(struct program a[],int n)
{
int i;
int time=0;
for(i=0;i<n;i++)
{
time=time+a[i].stime;a[i].ftime=time;
a[i].rtime=a[i].ftime-a[i].atime;
a[i].qrtime=(float)a[i].rtime/a[i].stime;
a[i].ftime,a[i].rtime,a[i].qrtime);
}
printf("-----------------------------------------------------------------------\n");
}
void main()
{
int i,m;
struct program pro[4];
华北科技学院计算机系综合性实验
实 验 报 告
课程名称操作系统C
实验学期2012至2013学年 第2学期
学生所在系部计算机系
年级2010专业班级网络B10
学生姓名学号
任课教师杜杏菁
实验成绩
计算机系制
《操作系统C》课程综合性实验报告
开课实验室:基础六机房2013年6月3日
实验题目
进程调度算法模拟
一、实验目的
进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
进程状态STATE。
队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:
进程在就绪队列中呆一个时间片,优先数增加1。
进程每运行一个时间片,优先数减3。
(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。