资源简介
处理机调度的模拟实现,用先来先服务、短作业优先、最短剩余时间优先、时间片轮转、基于静态优先级的调度,基于高响应比优先的动态优先级调度处理机调度算法的实现,能够模拟进程调度情况,并输出进程的完成时间,计算周转时间、带权周转时间,平均周转时间和平均带权周转时间。要求使用链表,进程个数由用户提供,按照进程的实际个数生成PCB。程序能够让用户选择使用哪种调度算法,进程基本信息要既可从文件读入,也可手动输入。程序还要考虑用户界面的友好性和使用方便性。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef struct PCB{
char id; //进程名字
float arrival_time;//到达时间
float service_time;//服务时间
float start_time;//开始执行时间
float finish_time;//完成时间
float turnover_time;//周转时间
float weight_time;//带权周转时间
int True;//标志是否运行结束
float sum_waittime;//等待时间
float remain_time;//剩余时间
int static_begin;//静态优先级
float run_time;//运行时间
}PCB;
static queueRRqueue; //声明一个队列
static int T; //时间片
static int n; //进程个数
static PCB p[100]; //进程结构
static PCB q[100]; //模拟进程就绪队列
static PCB temp;//用于交换两个进程所有信息的中间变量
void init()//进程信息初试化
{
int ij;
for(i=0;i {
p[i].True=0;//都有进程状态都置为0,表示没有执行完该进程
p[i].sum_waittime=0;
}
//对进程按到达时间排序
for(i=0;i {
for(j=0;j<=i;j++) //按照各进程到达时间升序,对进程排序
{
if(p[j].arrival_time>p[i].arrival_time)
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
}
}
}
//for(i=0;i // printf(“%c\n“p[i].id);//检测是否排序对
}
void input()//进程信息输入
{
int choice;
printf(“\t\t*****************************\n“);
printf(“\t\t选择你要输入进程信息的方式:\n“);
printf(“\t\t1 文件读入方式\n“);
printf(“\t\t2 手动输入方式\n“);
printf(“\t\t*****************************\n“);
scanf(“%d“&choice);
system(“cls“);
int i;
if(choice==1)
{
//文件读取模式
ifstream inData;
inData.open(“input.txt“);
inData>>n;
for (i=0;i {
inData>>p[i].id;
}
for (i=0;i {
inData>>p[i].arrival_time;
}
for (i=0;i {
inData>>p[i].service_time;
}
}
else
{
//用户输入模式
printf(“请输入进程的个数:“);
scanf(“%d“&n);
printf(“请输入这些进程的名字id:\n“);
for (i=0;i {
cin>>p[i].id;
}
printf(“请输入进程到达时间:\n“);
for (i=0;i {
cin>>p[i].arrival_time;
}
printf(“请输入进程服务时间:\n“);
for (i=0;i {
cin>>p[i].service_time;
}
}
init();//初始化
// 输出用户所输入的信息
printf(“The information of processes is the following:\n“);
printf(“\t进程名\t到达时间\t服务时间\n“);
for (i=0;i {
cout< cout< cout< }
printf(“************************************************\n“);
}
//先来先服务
void FCFS()
{
input();
int i;
float sum=0;
float sum1=0;
float avg_time;//平均周转时间
float avg_time1;//平均带权周转时间
//初始化第一个进程的开始时间(即到达时间),和结束时间。
p[0].start_time=p[0].arrival_time;
p[0].finish_time=p[0].service_time+p[0].start_time;
for(i=1;i {
//判断到达时间与前一个进程的完成时间
if(p[i].arrival_time {
p[i].start_time=p[i-1].finish_time;
}
else
{
p[i].start_time=p[i].arrival_time;
}
//完成时间等于开始时间+服务时间
p[i].finish_time=p[i].service_time+p[i].start_time;
}
for(i=0;i {
p[i].turnover_time=p[i].finish_time-p[i].arrival_time;//计算周转时间
p[i].weight_time=p[i].turnover_time/p[i].service_time;/
- 上一篇:二维FDTD正演C代码
- 下一篇:单向空间后方交会实验代码
相关资源
- 二维FDTD正演C代码
- 操作系统课程设计,设备分配与磁盘
- C语言模拟ATM机的编写程序
- 《C语言程序开发范例宝典》光盘源码
- 51单片机直流电机控制C语言代码.rar
- 多道批处理系统两级调度的模拟
- C语言实现的bitmap位图代码分享
- 哈夫曼编码与解码(C语言实现)
- c语言实现linux shell下的cat命令
- 用C语言编制查询某班同学的平均成绩
- 空闲分区链源代码
- C++标准函数库.docx
- 操作系统 4种经典同步互斥问题
- C语言实现Optimal、FIFO、LRU页面置换算
- 纯C语言+libalsa实现最简单录音程序
- C语言 可视化界面 亚马逊棋 AmazonChe
- 学院学生管理系统C语言 数据结构 文
- 中值滤波、均值滤波和高斯滤波代码
- 最小二乘法曲线拟合C语言可执行代码
- 字模提取程序汇编、C语言编码
- nurbs的c语言代码
- 计算机专业外文文献
- 哈夫曼编码译码器 C语言 数据结构课
- C图像读写源代码.zip
- 基于单片机的数字时钟设计与实现p
- 基于c51可调数字钟包括整点报时功能
- ADS1210读写函数C语言
- 用C语言设计并实现一个一元稀疏多项
- c语言实现设置ip、网关、子网掩码
- 广工操作系统课设:多道批处理系统
评论
共有 条评论