资源简介
进程调度算法包括先来先服务调度算法FCFS、最短作业时间优先SJF(抢占式
和非抢占式)、最高响应比调度HRN算法4种。(每个人必须做非抢占式SJF,
然后在后面的三种中任选一种,即每个人必须做2种调度算法的模拟。)

代码片段和文件信息
#include
#include
#include
#include
#define DELAY 100
using namespace std;
unsigned short TIME = 0; //当前时间
unsigned short NUM = 0; //进程数量
char TYPE = ‘1‘; //算法类型
//进程控制块PCB
typedef struct PCB {
char name[16];
char state; //[R]Run[F]Finish[P]Pause[N]New
unsigned short t_arrive; //到达时间
unsigned short t_start; //开始时间
unsigned short t_finish; //完成时间
unsigned short t_service; //服务时间
unsigned short t_run; //运行时间
unsigned short t_wait; //等待时间
struct PCB *next;
} pcb;
pcb *now = NULL //现在运行的进程
*head = NULL; //pcb链头部指针
void fcfs(); //先到先服务
void sjf(); //短作业优先
void init(); //初始化,完成pcb录入
pcb *sort(pcb*); //对init()录入的pcb按到达时间排序
void timer(); //定时器,每一个延迟自我调用一次
void result(); //打印结果
//先到先服务算法
void fcfs() {
if (now->t_arrive>TIME) {//还未到达,则是无进程状态
printf(“[时间:%d]\t无进程运行\n“ TIME);
return;
}
if (now->state == ‘N‘) {//N新进程改为R正在运行进程。设置开始时间为time,并打印。
now->state = ‘R‘;
now->t_start = TIME;
printf(“[时间:%d]\t进程:%s 首次运行\n“ TIME now->name);
}
else if (now->state == ‘R‘) {//R正在运行进程的话
(now->t_run)++;//运行时间自动加一
if (now->t_run >= now->t_service) {//运行结束时
now->state = ‘F‘;//标记结束
now->t_finish = TIME;//标记结束时间
printf(“[时间:%d]\t进程:%s 任务完成\n“ TIME now->name);//打印
now = now->next;//跳转到下一个进程
if (now != NULL) fcfs();
}
else //打印运行状态
printf(“[时间:%d]\t进程:%s 正在运行,已运行时间:%d\n“ TIME now->name now->t_run);
}
}
void sjf() {
if (now->t_arrive>TIME) {//所有进程都完毕,新进程进程还未到达,则是无进程状态
printf(“[时间:%d]\t无进程运行\n“ TIME);
return;
}
if (now->state == ‘N‘) {//N新进程改为R正在运行进程。设置开始时间为time,并打印。
now->state = ‘R‘;
now->t_start = TIME;
printf(“[时间:%d]\t进程:%s 首次运行\n“ TIME now->name);
}
else if (now->state == ‘R‘) {//R正在运行的进程
(now->t_run)++;//运行时间自动加一
if (now->t_run >= now->t_service) {//运行结束时
now->state = ‘F‘;//标记结束
now->t_finish = TIME;//标记结束时间
printf(“[时间:%d]\t进程:%s 任务完成\n“ TIME now->name);//打印
pcb *p = head//检索指针,从头检索。
*p_min = NULL;//最小进程
unsigned short t_min = 9999;
while (p != NULL && p->t_arrive <= TIME) {//从【现在时间及以前】并且未结束的进程中,选出服务时间最小的进程
if (p->state == ‘F‘) {//当前检索进程已经结束,则检索指针指向下一个进程检索。
p = p->next;
continue;
}
if (p->t_service < t_min) {//当前检索进程的服务时间更短,标记并记录位置。
t_min = p->t_service;
p_min = p;
}
p = p->next;//检索下一个
}
now = p_min;//跳转到最短进程
if (now != NULL) sjf();
}
else //打印运行状态
printf(“[时间:%d]\t进程:%s 正在运行,已运行时间:%d\n“ TIME now->name now->t_run);
}
}
//格式化输出结果
void result() {
pcb *p = head;
double zhouzhuan = 0 pingjunzhouzhuan = 0;
printf(“\n=========运行结果=========\n\n“);
printf(“名称 到达时间 开始时间 完成时间 服务时间 周转时间 带权周转时间\n“);
while (p != NULL)
{
printf(“ %s\t%d\t %d\t %d\t %d\t %d\t %.2f\n“ p->name p->t_arrive
p->t_start p->t_finish p->t_service p->t_finish - p->t_arrive
1.0*(p->t_finish - p->t_arrive) / p->t_service);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-15 18:35 os\
文件 5346 2017-04-11 16:05 os\os.cpp
文件 71945 2017-04-11 16:02 os\运行结果.docx
- 上一篇:POPGENE中文使用说明
- 下一篇:软件学院操作系统第五次上机
相关资源
- 升腾Win终端系统升级方法新版.doc
- Uninstall_Cortana_WINCLIENT.CN.rar
- STM32基于rt_thread操作系统的SDHC卡文件
- 操作系统 LRU算法 实验报告 及 程序代
- [免费]车载CE6.0操作系统
- 分页系统模拟实验 操作系统 课程设
- 模拟段页式虚拟存储管理中地址转换
- 操作系统实验——虚存管理实验
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- Bochs入门教程[操作系统第一步]
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 二级文件系统(操作系统)
- uCOS编译环境建立 BC45 TASM
- Linux 操作系统实验(全)
- 操作系统实验综合设计【附代码】
- 操作系统共享内存实验
- 操作系统循环首次适应算法
- 操作系统课程设计实现可变分区存储
- 基于GTK的Linux环境下的简易任务管理器
- 操作系统课程设计 二级文件管理系统
- 加快Windows XP操作系统开机速度
- 操作系统教程课后答案华中科技大学
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 嵌入式实时操作系统ucos-II 第二版 源
- 计算机操作系统课后_汤小丹_第四版
- 计算机操作系统(第四版)汤小丹课
评论
共有 条评论