资源简介
编写程序模拟进程调度过程,能够按照时间片轮转,短进程优先法,可抢占式和不可抢占式优先级法,以及先来先服务和高响应比优先法处理输入的数据,运行结果包含界面。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
struct node
{
int num; ///序号
char name[10]; ///进程名
int Gen_time; ///产生时间
double Ser_time; ///要求服务时间
int Pty; ///优先级priority
char vis; ///进程状态R表示就绪,E表示结束
int ends; ///完成时间
double t_time; ///周转时间
double rt_time; ///带权周转时间
} p[1000]pc[1000]p1[1000]
p2[1000]p3[1000]p4[1000]p5[1000];
///pc用于记录时间片轮转调度的进程数据,p1可抢占式,p2不可抢占式
///p3短进程优先调度,p4先来先服务,p5高响应比优先
int process_n; ///存放进程的时间片
int number; ///出入的进程个数
struct D_value
{
int sub;
int flage;
}s[1000];///针对时间片轮转算法,记录进程产生差值和是否被处理过一次
void Init(node m[]node n[]) ///初始化基本数据
{
for(int i=0; i {
m[i].num=n[i].num;
strcpy(m[i].namen[i].name);
m[i].Gen_time=n[i].Gen_time;
m[i].Ser_time=n[i].Ser_time;
m[i].Pty=n[i].Pty;
m[i].vis=n[i].vis;
}
}
void print(int by_order[]int knode q[]) ///输出进程执行结果
{
printf(“%-16s%-16s%-16s%-16s%-16s%-16s%-16s\n“
“进程序列号““进程名““产生时间““要求服务时间““完成时间“
“周转时间““带权周转时间“);
double sum1=0sum2=0;
for(int i=0; i {
printf(“%-8d\t%-8s\t%-8d\t%-8.2lf\t%-8d\t%-8.2lf\t%-8.2lf\n“
q[i].numq[i].nameq[i].Gen_timeq[i].Ser_timeq[i].ends
q[i].t_timeq[i].rt_time);
sum1+=q[i].t_time;
sum2+=q[i].rt_time;
}
cout< printf(“平均周转时间为:%.2lf 平均带权周转时间为:%.2lf\n\n“sum1/numbersum2/number);
printf(“各进程执行顺序为:\n“);
for(int i=0; i {
if(i==0)
printf(“%d “by_order[i]);
else if(i!=0&&by_order[i]!=by_order[i-1])
printf(“%d “by_order[i]);
}
printf(“\n“);
return;
}
bool cmp(node anode b) ///按照进程的序号排列
{
return a.num }
void Time_Circular() ///时间片轮转调度
{
printf(“输入时间片:“);
cin>>process_n;
int sum=0run_sum=0;
Init(pcp); ///初始化
memset(s0sizeof(s));
for(int i=0; i {
if(i!=0)
s[i].sub=p[i].Gen_time-p[i-1].Gen_time;
sum+=p[i].Ser_time;
}
int cnt=0k=0;
int by_order[sum]; ///记录进程执行的顺序。
memset(by_order0sizeof(by_order)); ///初始化
node q; ///临时存储出队列的进程
queueQQ1; ///Q存储为执行完成的进程,Q1存储执行完成的进程
Q.push(pc[0]);
for(int i=1;i {
if(s[i].sub<=process_n)
{///将进程产生的间隔差值与时间片比较,分为两种情况,小于等于和大于
Q.push(pc[i]);
s[i].flage=1;
}
else
break;
}
int i=0;
while(!Q.empty())
{
q=Q.front();
Q.pop();
if(q.vis==‘R‘&&q.Gen_time<=i)
{
by_order[k++]=q.num;
if(process_n<=q.Ser_time)///剩余要求服务时间大于等于时间片
{
run_sum=run_sum
- 上一篇:ten超级井字棋人机对战
- 下一篇:C++五子棋源代码程序解析
相关资源
- 操作系统 动态分区存储管理方式的
- 《 Linux操作系统下C语言编程入门》
- 操作系统内存分配C++实现
- 操作系统 读者写者问题c++
- 操作系统实习-快速文件系统
- 操作系统实习:动态分区分配C++实现
- 操作系统c语言模拟作业调度实验
- 进程调度时间片轮转+优先级进程调度
- 操作系统课程设计 文件管理系统模拟
- spooling模拟系统代码.docx
- 操作系统实验-----MFC线程--购票系统演
- 分区式存储管理
- 操作系统抢占式短进程优先调度算法
- 请求调页存储管理方式的模拟
- 缓冲池的模拟(C++)
- 操作系统进程调度C++代码实现
- 操作系统请求分页存储器管理C++代码
- 操作系统银行家算法源码
- 进程的同步-吃水果问题
- 编写并调试一个模拟的进程调度程序
- 东北大学操作系统实验1进程的同步与
- 银行家算法C语言实现源文件
- C语言实现Linux文件系统模拟文档内有
- 时间片轮转算法实现
- 进程同步实验代码c语言
- C语言模拟实现操作系统内存的分配与
- vc++实现哲学家吃面问题
- DOS操作系统的C语言源代码
- linux操作系统下C++封装的基础库
- 操作系统 银行家算法 C++
评论
共有 条评论