• 大小: 78KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: C语言  调度  源码  

资源简介

进程调度
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务
进程调度
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#define N 10
///////////////////////////////高响应比///////////
typedef char string[10];
struct task
{
int ID; //进程号
string name;     //进程名
int arrivetime; //到达时间
int servicetime; //服务时间
int     waittime; //等待时间
int starttime; //开始运行时间
int finishtime; //结束运行时间
float turnaroundtime; //周转时间
float weightedturnaroundtime; //带权周转时间
int priority; //优先权
int     finish; //是否已经完成
}PCB[10];
int num;
void input()
{
int i;
system(“cls“);
printf(“\n请输入作业数量:“);
scanf(“%d“&num);
for(i=0;i {
printf(“\n请输入进程%d:\n“i);
printf(“进程名 到达时间 服务时间\n“);
scanf(“%s%9d%9d“PCB[i].name&PCB[i].arrivetime&PCB[i].servicetime);
PCB[i].priority=0;
PCB[i].finish=0;
}
}
int HRN(int pre)
{
int current=1ij; //优先权=(等待时间+要求服务时间)/要求服务时间
for(i=0;i {
PCB[i].waittime=PCB[i].finishtime-PCB[i].arrivetime; //等待时间=上一个进程的完成时间-到达时间
PCB[i].priority=(PCB[i].waittime+PCB[i].servicetime)/PCB[i].servicetime;
}
for(i=0;i {
if(!PCB[i].finish)
{
current=i; //找到第一个还没完成的作业
break;
}
}
for(j=i;j {
if(!PCB[i].finish) //还没完成(运行)
{
if(PCB[current].arrivetime<=PCB[pre].finishtime) //如果进程在上一个进程完成之前到达
{
if(PCB[j].arrivetime<=PCB[pre].finishtime && PCB[j].priority>PCB[current].priority)
current=j; //找出到达时间在上一个进程完成之前,优先权高的进程
}
else //如果进程是在上一个进程完成之后到达
{
if(PCB[j].arrivetime current=j; //找出比较早到达的一个
if(PCB[j].arrivetime==PCB[current].arrivetime) //如果同时到达
if(PCB[j].priority>PCB[current].priority)
current=j; //找出服务时间比较短的一个
}
}
}
return current; //返回当前进程
}
void running(int iint timesint preint statimeint endtime)
{
if(times==0)
{
PCB[i].starttime=PCB[i].arrivetime;
PCB[i].finishtime=PCB[i].starttime+PCB[i].servicetime;
PCB[i].turnaroundtime=PCB[i].servicetime;
PCB[i].weightedturnaroundtime=1.0;
statime=PCB[i].starttime;
}
else
{
if(PCB[i].arrivetime>PCB[pre].finishtime)
PCB[i].starttime=PCB[i].arrivetime;
else
PCB[i].starttime=PCB[pre].finishtime;
PCB[i].finishtime=PCB[i].starttime+PCB[i].servicetime;
PCB[i].turnaroundtime=PCB[i].finishtime-PCB[i].arrivetime;
PCB[i].weightedturnaroundtime=PCB[i].turnaroundtime/PCB[i].servicetime;
}
if(times==num-1)
endtime=PCB[i].finishtime;
PCB[i].finish=1;
}
void print(int iint times)
{
if(times==0)
{
printf(“到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间\n“);
}
printf(“%8d%8d%8d%8d%9.1f%9.2f\n“PCB[i].arrivetimePCB[i].servicetime
PCB[i].starttimePCB[i].finishtimePCB[i].turnaroundtimePCB[i].weightedturnaroundtime);
}
void check()
{
int i;
int statimeendtimesumturtime=0.00sumwtutime=0.00aveturtimeavewtutime;
int current=0times=0pre=0;
PCB[pre].finishtime=0;
for(i=0;i {
PCB[i].finish=0;
}
statimeendtim

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7357  2019-11-15 21:38  20173488林慧杰\作业调度.cpp

     文件     221249  2019-11-15 21:39  20173488林慧杰\作业调度.exe

     文件       8373  2019-12-10 09:53  20173488林慧杰\进程调度.cpp

     文件     188486  2019-12-10 09:53  20173488林慧杰\进程调度.exe

     目录          0  2019-12-10 10:21  20173488林慧杰

----------- ---------  ---------- -----  ----

               425465                    5


评论

共有 条评论