• 大小: 15KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: C语言  操作系统  

资源简介

处理机调度的模拟实现,用先来先服务、短作业优先、最短剩余时间优先、时间片轮转、基于静态优先级的调度,基于高响应比优先的动态优先级调度处理机调度算法的实现,能够模拟进程调度情况,并输出进程的完成时间,计算周转时间、带权周转时间,平均周转时间和平均带权周转时间。要求使用链表,进程个数由用户提供,按照进程的实际个数生成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;/

评论

共有 条评论