操作系统实验 批处理作业的调度算法
来源:互联网 发布:torch python 编辑:程序博客网 时间:2024/05/16 07:32
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cstdlib>#include <vector>#include <algorithm>using namespace std;typedef pair<int, int> pii;const int N = 10000;int num;struct Node {char name[30];//作业的名字int cTime; //作业进入输入井的时间(以分计)int rTime; //作业的运行时间<以分计算>int sTime; //作业开始运行的时间int eTime; //作业运行结束的时间int tTime; //作业周转时间float circle; //带权周转时间}jobs[N];bool cmp1(Node i, Node j) { return i.cTime < j.cTime;}inline int max(int a, int b) {return a > b ? a : b;}inline float fmax(float a, float b) {return a > b ? a : b;}void FCFS();void SJF();void HRN();void input();void output();int main() { //freopen("Test.in", "r", stdin);int op; printf("*****************************\n\n"); printf(" 欢迎体验作业调度算法\n\n"); printf(" 1.先来先服务\n\n"); printf(" 2.最短作业优先法\n\n"); printf(" 3.最高响应比算法\n\n"); printf(" 0.退出\n\n"); printf(" 请输入作业的个数 "); scanf("%d", &num); input(); while (1) { printf(" 请输入你的选择: "); scanf("%d", &op); switch (op) { case 0: exit(0); case 1: FCFS(); break; //跳转到先来先服务算法 case 2: SJF(); break; //跳转到最短优先服务算法 case 3: HRN(); break; // 跳转到最高响应比算法 default: printf("\n 选择无效\n\n"); } output(); } fclose(stdin);return 0;}void input() { printf("请输入作业的名字和进入时间和估计运行时间:\n"); int a, b; for (int i=0; i<num; i++) { scanf("%s%d:%d%d", jobs[i].name, &a, &b, &jobs[i].rTime); jobs[i].cTime = a*60 + b; }}void output() { printf("*******************************************\n"); for (int i=0; i<num; i++) { int a = jobs[i].cTime / 60; int b = jobs[i].cTime % 60; int c = jobs[i].sTime / 60; int d = jobs[i].sTime % 60; int e = jobs[i].eTime / 60; int f = jobs[i].eTime % 60; printf("%s %02d:%02d %02d %02d:%02d %02d:%02d %02d %.2f\n", jobs[i].name, a, b, jobs[i].rTime, c, d, e, f, jobs[i].tTime, jobs[i].circle); } printf("*******************************************\n");}void FCFS() { sort(jobs, jobs+num, cmp1); int nowTime = jobs[0].cTime; jobs[0].sTime = nowTime; jobs[0].eTime = nowTime + jobs[0].rTime; jobs[0].tTime = jobs[0].eTime - jobs[0].cTime; jobs[0].circle = float(jobs[0].tTime) / float(jobs[0].rTime); for (int i=1; i<num; i++) { nowTime = max(nowTime+jobs[i-1].rTime, jobs[i].cTime); jobs[i].sTime = nowTime; jobs[i].eTime = nowTime + jobs[i].rTime; jobs[i].tTime = jobs[i].eTime - jobs[i].cTime; jobs[i].circle = float(jobs[i].tTime) / float(jobs[i].rTime); }}void SJF() { sort(jobs, jobs+num, cmp1); priority_queue<pii, vector<pii>, greater<pii> > pq; int index = 0; int endTime = -1; while (index < num) { pq.push(pii(jobs[index].rTime, index)); while (!pq.empty()) { pii h = pq.top(); pq.pop(); jobs[h.second].sTime = max(jobs[h.second].cTime, endTime); jobs[h.second].eTime = jobs[h.second].sTime + h.first; jobs[h.second].tTime = jobs[h.second].eTime - jobs[h.second].cTime; jobs[h.second].circle = (float)jobs[h.second].tTime / h.first; endTime = jobs[h.second].eTime; for (index++; index < num; index++) { if (jobs[index].cTime < endTime) pq.push(pii(jobs[index].rTime, index)); else break; } } //index++; }}bool vis[N+5];typedef pair<float, int> pfi;void HRN() { sort(jobs, jobs+num, cmp1); priority_queue<pfi> pq; int index = 0; int endTime = -1; memset(vis, 0, sizeof (vis)); int cnt = 0; while (cnt < num) { float r = (float)(endTime - jobs[index].cTime) / jobs[index].rTime; pq.push(pfi(r, index)); while (!pq.empty()) { pfi h = pq.top(); if (vis[h.second]) { pq.pop(); continue; } else { pq.pop(); vis[h.second] = true; cnt++; } jobs[h.second].sTime = max(jobs[h.second].cTime, endTime); jobs[h.second].eTime = jobs[h.second].sTime + jobs[h.second].rTime; jobs[h.second].tTime = jobs[h.second].eTime - jobs[h.second].cTime; jobs[h.second].circle = (float)jobs[h.second].tTime / jobs[h.second].rTime; endTime = jobs[h.second].eTime; for (int i = 0; i < num; i++) { if (jobs[i].cTime < endTime) { if (!vis[i]) { r = (float)(endTime - jobs[i].cTime) / jobs[i].rTime; pq.push(pfi(r, i)); } } else break; } } index++; }}
0 0
- 操作系统实验 批处理作业的调度算法
- 计算机操作系统实验:作业调度算法的实现
- 【大三操作系统实验】 作业进程调度算法
- 操作系统实验之作业调度算法
- 操作系统实验之批处理系统中作业调度
- 【操作系统】作业调度的算法
- 操作系统的作业调度算法
- 算法 批处理作业调度
- 操作系统实验二 作业调度
- 操作系统作业调度实验报告
- 操作系统 调度算法实验
- 【操作系统】作业调度的五种算法
- JavaScript 批处理系统中作业调度【操作系统】
- 操作系统实验2 作业调度实验
- 操作系统的作业调度和进程调度算法
- 操作系统的作业调度
- 操作系统作业调度算法模拟
- 操作系统银行家算法调度实验
- MySQL高手篇:精妙SQL语句介绍
- [USACO 2014 Mar Silver]irrigation
- CDN详解
- NESASM教程总述
- 用JS给,option添加“选中”属性
- 操作系统实验 批处理作业的调度算法
- 面向对象分析与设计——实战
- poj 4093:倒排索引查询
- js操作select控件大全(包含新增、修改、删除、选中、清空、判断存在等)
- 【和我一起学习Unity3D】初识Unity3D
- 正则表达式
- linux开发板解析不了域名
- MySQL常用函数
- 经典再现交互设计那些事儿(二):交互常用的工具和方法