资源简介
进程调度
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务
进程调度
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务
进程调度
时间片轮转与优先级
作业调度
高响应比 短作业 先到先服务
代码片段和文件信息
#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
- 上一篇:arithmeticcoding.c
- 下一篇:excel中30种常用函数详解
相关资源
- 模糊控制,模糊pid源码
- Arduino 亚博智能平衡小车源码
- 数字钟仿真+源程序.zip
- 蓝牙小车程序 绝对完整 整个工程
- 倒立摆源码,自动起摆源码
- 小型资源管理器源码
- 锐捷商通软件,百威软件万能密码工
- 医疗项目登录界面源码
- Activiti最新工作流教学及项目源码网盘
- 优秀毕业设计以及优秀项目源码
- 即时聊天小程序源码
- 通讯录管理系统源码
- 炉石传说-卡牌游戏开发视频教程源码
- 网上阅卷系统
- 杂志订阅信息管理
- 企业工资管理系统包括源码
- QQ群发协议易语言源码
- STL源码
- 加密解密工具(含程序源码)
- Eclipse中的.class源码的插件JD-Eclipse-s
- 51单片机——简易计算器设计源码、
- 许愿墙.zip
- UDP打洞P2P技术源码
- 会员卡计费系统.docx
- 操作系统-SSTF磁盘调度算法模拟
- 星巴克用星说小程序源码
- 魔方游戏源码
- 扫描SCAN算法
- 中颖单片机SH79F1612A例程
- springboot微信点餐视频源码全.txt
评论
共有 条评论