// SchedulingAlgorithm.cpp: 定义控制台应用程序的入口点。
//
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <string>
#include <list>
using namespace std;
//时间片
int TIMER=1;
//事件类型
enum EventType { ARRIVAL_EVENT, FINISH_EVENT, TIMER_EVENT };
//任务结构
struct Job
{
string name; //作业名
int arriveTime=0; //作业到达时间
float needTime=0; //作业所需运行时间
int priority=0; //作业优先级,数字越小,优先级越高
Job(string name, int at, int nt, int p) {
this->name = name;
needTime = nt;
arriveTime = at;
priority = p;
}
Job(){}
};
//事件链表结点
struct Event
{
EventType type= ARRIVAL_EVENT; //事件类型
int jobBeginTime=0; //作业开始时间
bool isFirstExe=true; //判断是否第一次执行,用于记录作业开始时间
int happenTime=0; //发生时刻
int remainTime=0; //剩余运行时间
double hrr=0; //最高响应比
Job job; //作业
Event *next=NULL; //事件指针
Event()
{
type = ARRIVAL_EVENT;
jobBeginTime = 0;
happenTime = 0;
remainTime = 0;
hrr = 0;
job = Job();
next = NULL;
isFirstExe = true;
}
Event(int ht, int jbt, Job j)
{
Event();
happenTime = ht;
jobBeginTime = jbt;
job = j;
remainTime = j.needTime;
}
};
//*******************************事件队列相关函数************************************
/* 作业复制函数 */
void CopyJob(Job *dest, const Job *sour);
/* 抓取头结点之外的第一个事件
* 作为返回值返回 */
Event *FetchFirstEvent(Event *head);
/* 按作业名称删除第一个匹配项,
* 删除成功返回TRUE,不存在该节点返回FALSE
*/
bool DeleteByJobName(Event *head, string jobName);
/* 删除事件队列 */
void DestroyQueue(Event *head);
//打印事件
void ShowEvent(Event* eventHead,Event *e);
//事件初始化
void InitEvent(Event* &seventHead);
//*******************************进程调度相关函数************************************
/* 插入函数 */
void InsertByHappenTime(Event *head, Event *e);
void InsertByHRR(Event *head, Event *e);
void InsertByJobTime(Event* eventHead,list<Event*> &q, Event *e);
void InsertByPriority(Event* eventHead, list<Event*> &q, Event *e);
void InsertByRemainTime(Event* eventHead, list<Event*> &q, Event *e);
void InsertTail(Event* eventHead, list<Event*> &head, Event *e);
/* 排序函数 */
void SortByHRR(list<Event*> &q, int currentTime);
/* 调度函数 */
void FCFS(Event *eventHead);
void SJF(Event *eventHead);
void SRTF(Event *eventHead);
void HRRF(Event *eventHead);
void Priority(Event * eventHead); //抢占式优先级调
void RR(Event *eventHead); //时间片大小为1
void MFQ(Event *eventHead);
//作业复制
void CopyJob(Job *dest, const Job *sour)
{
dest->name= sour->name;
dest->arriveTime = sour->arriveTime;
dest->needTime = sour->needTime;
dest->priority = sour->priority;
}
//抓取头结点之外的第一个事件
Event *FetchFirstEvent(Event *head)
{
return head->next;
}
bool DeleteByJobName(Event *head, string jobName)
{
Event* cur = head;
if (cur->job.name == jobName)
{
head = cur->next;
return true;
}
while (cur->next)
{
if (cur->next->job.name == jobName)
{
cur->next = cur->next->next;
return true;
}
cur = cur->next;
}
return false;
}
void DestroyQueue(Event *head)
{
delete head;
head = NULL;
}
void ShowEvent(Event* eventHead,Event *e)
{
DeleteByJobName(eventHead, e->job.name);
cout << setprecision(3) << fixed;
cout << setw(12) << e->job.name<< setw(12) << e->job.arriveTime << setw(6)
<< "|" << setw(12) <<e->job.needTime << setw(12)<< e->job.priority <<
setw(12) << e->happenTime << setw(12) << e->jobBeginTime <<endl;
}
void InitEvent(Event* &eventHead)
{
if (eventHead == NULL)
{
cerr << "At: " << __FILE__ << "\nLine: " << __LINE__ << endl;
throw "Head Point is NULL!\n";
}
Event* nullEvent = new Event;
nullEvent->next = eventHead;
eventHead = nullEvent;
}
//按事件发生时间插入事件;早发生的事件排在前面
void InsertByHappenTime(Event *head, Event *e)
{
DeleteByJobName(head, e->job.name);
if (head == NULL || e == NULL)
{
cerr << "At: " << __FILE__ << "\nLine: " << __LINE__ << endl;
throw "H�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SchedulingAlgorithm.zip (28个子文件)
SchedulingAlgorithm
Debug
SchedulingAlgorithm.ilk 621KB
SchedulingAlgorithm.exe 120KB
SchedulingAlgorithm.pdb 1.02MB
.vs
SchedulingAlgorithm
v15
ipch
AutoPCH
cc2e3244b16f535c
SCHEDULINGALGORITHM.ipch 30.13MB
98f6b88ea3fbc7e6
SIMULATION_SJF.ipch 2.81MB
bfc810fa6751e0d4
SCHEDULINGALGORITHM.ipch 30.13MB
fdf6b6ebe38c513f
MAIN.ipch 35.56MB
cde2ad304aa12b61
SIMULATION_FCFS.ipch 2.81MB
3fea8d1db1cd53fc
SCHEDULINGALGORITHM.ipch 24.44MB
1bbc704d75c80605
SCHEDALGOS.ipch 2.81MB
8daaa8c35c21839
SCHEDALGOS.ipch 2.81MB
.suo 41KB
Browse.VC.db 4.88MB
SchedulingAlgorithm.sln 1KB
SchedulingAlgorithm
Debug
vc141.pdb 532KB
SchedulingAlgorithm.log 2KB
Scheduli.4A1D0C84.tlog
CL.read.1.tlog 36KB
link.read.1.tlog 3KB
link.write.1.tlog 612B
CL.write.1.tlog 664B
link.command.1.tlog 3KB
SchedulingAlgorithm.lastbuildstate 215B
CL.command.1.tlog 2KB
SchedulingAlgorithm.obj 384KB
vc141.idb 443KB
SchedulingAlgorithm.cpp 42KB
SchedulingAlgorithm.vcxproj.filters 960B
SchedulingAlgorithm.vcxproj 7KB
共 28 条
- 1
资源评论
寂灭万乘
- 粉丝: 39
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功