当前位置:文档之家› 进程调度 实验报告

进程调度 实验报告

实验一进程调度实验报告
一、实验目的
多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。
二、实验内容
1.优先权法、轮转法
简化假设
1)进程为计算型的(无I/O)
2)进程状态:ready、running、finish
{
int num; //进程号
int attime,servtime; //进程到达时间,服务时间
process *next;
};
struct process*creatlist(int); //新建一个链表
void insert(struct process *first,struct process *s); //插入一个节点(尾插法)
}
}
void privilege(struct process1 *first)
{
struct process1* p,*r=first,*t;
p=first->next;
int b=0;
while (first->next)
{
r=first;
p=first->next;
cout<<"/********************"<<b<<"*****************************/"<<endl;
{
struct process1 *p,*r;
p=first->next;
r=first;
int a=1;
while (a)
{
if (p==s)
{
r->next=p->next;
//free(p) ;
a=0;
}
else
{
r=p;
p=p->next;
}
}
}
void print1(struct process1 *first) //打印函数
5.至少三种调度算法
6.若有可能请在图形方式下,将PCB的调度用图形成动画显示。

主函数控制台Main.c
#include<stdio.h>
#include<windows.h>
#include "fcfs.h"
#include "privilege.h"
#include "round.h"
void main()
while (p)
{
finishtime =p->servtime + startime;
wasttime= finishtime-p->attime;
weighttime = wasttime / p->servtime;
cout<<p->num<<setw(8)<<p->attime<<setw(10)<<p->servtime<<setw(10)<<startime<<setw(14)<<finishtime<<setw(8)<<wasttime<<'\t'<<weighttime<<endl;
first ->next=NULL;
for (int i=0;i<n;i++)
{
struct process1 *s;
s =new process1;
s->pcb =i;
s-> privilege=random(20)+5;
s->cpu=random(20)+1;
insert1(first,s );
r=p;
p=p->next;
startime +=r->servtime;
}
}
#endif
动态优先权调度算法privilege.h
#ifndef PRIVILEGE_H
#define PRIVILEGE_H
struct process1
{
int pcb; //进程号PCB
int privilege,cpu; //进程优先权,所需CPU时间
void del1(struct process1 *first,struct process1 *s); //删除(撤销)一个进程
void print1(struct process1 *first); //打印函数
struct process1* search(struct process1 *head,struct process1 *s);
void print(struct process *first); //打印函数
struct process*creatlist(int n)
{
srand((int)time(0));
struct process*first=new process;
first->next=NULL;
for (int i=0;i<n;i+&#*p;
p =first->next;
cout<<"进程号"<<"进程优先权"<<"进程所需CPU片数"<<endl;
while (p)
{
cout<<p->pcb<<setw(8)<<p->privilege<<setw(12)<<p->cpu<<endl;
p=p->next;
p =first->next;
cout<<"随机产生的进程的信息如下"<<endl;
cout<<"进程名"<<"进程到达时间"<<"进程服务时间"<<endl;
while (p)
{
cout<<p->num<<'\t'<<p->attime<<setw(14)<<p->servtime<<endl;
p=p->next;
3)进程需要的CPU时间以时间片为单位确定
2.算法描述
1)优先权法——动态优先权
当前运行进程用完时间片后,其优先权减去一个常数。
2)轮转法
三、流程图
四、实验要求
1. 产生的各种随机数的取值范围加以限制,如所需的CPU时间限制在1~20之间。
2.进程数n不要太大通常取4~8个
3.使用动态数据结构
4.独立编程
cout<<" ***********进程运行前****************"<<endl;
print1(r);
p->cpu =p->cpu-1;
p->privilege =p->privilege-3;
if (p->privilege<0)
{
p->privilege =0;
}
cout<<" ***********进程运行后**********************"<<endl;
#ifndef FCFS_H
#define FCFS_H
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream.h>
#include<iomanip.h>
#define random(x) (rand()%x)
struct process
process1 *next;
};
/*******************优先权调度算法所需函数声明*****************************************************/
struct process1*creatlist1(); //新建链表(就绪队列)
void insert1(struct process1 *first,struct process1 *s); //增加一个进程或将一个进程查入到队列中
{
struct process *r=first;
struct process *p;
while(r){p=r;r=r->next;}
p->next=s;p=s;
p->next=NULL;
}
void print(struct process *first) //打印函数
{
struct process *p;
cin>>choice;
switch (choice)
{
case 1: {struct process *first=creatlist(n);print(first);fcfs(first);break;}
case 2: {struct process1 *first1=creatlist1(n);print1(first1);privilege(first1);break;}
相关主题