#include<stdio.h>
#include <iostream>
#include<malloc.h>
#include<string.h>
using namespace std;
#define N 10
#define TIME 2//时间片大小
typedef struct pcb
{
char id[5];//进程标识数
int arrivetime;
int finishtime;
int needtime;
float alltime;
float dqalltime;
char state[12];
struct pcb *next;
} pcb,*PCB;
PCB head;
PCB tail;
int count;
void creatprocess()//创建进程
{
PCB p,q;
int n;//要创建的进程数
int i;
head=tail=(PCB)malloc(sizeof(pcb));
head->next=NULL;
p=q=head;
cout<<"输入要创建的进程数:";
cin>>n;
count=n;
for(i=1;i<=n;i++)
{
p->next=(PCB)malloc(sizeof(pcb));
p=p->next;
tail=p;
cout<<"输入进程的标识符:";
cin>>p->id;
cout<<"输入进程到达时间:";
cin>>p->arrivetime;
cout<<"输入进程还需要运行的时间:";
cin>>p->needtime;
cout<<"进程的状态:";
cin>>p->state;
}
tail->next=p->next=NULL;
}
void RunProcess()
{
//运行进程,简单轮转法Round Robin
PCB p,temp;
p=head->next;
while(1)
{
if(head->next==NULL)
{
cout<<"此时就绪队列中已无进程!"<<endl;
return ;
}
else
{
while(p)
{
if((p->needtime>0)&&!(strcmp(p->state,"wait")))
{
cout<<"进程"<<p->id<<"开始"<<endl;
strcpy(p->state,"run");
p->needtime-=TIME;
if(p->needtime<0)
{
p->needtime=0;
}
else
{
temp=p;//把该时间片内运行完的进程存到临时temp中
//把temp接到链表尾部,销毁P;
if(temp->needtime>0)
{//把该时间片内运行完的进程接到就绪队列的尾部
if(count>1)
{
head->next=temp->next;
tail->next=temp;
tail=tail->next;
strcpy(tail->state,"wait");
tail->next=NULL;
}
else if(count==1)
{//当只有一个进程等待时,分开讨论
head->next=temp;
tail=temp;
strcpy(tail->state,"wait");
tail->next=NULL;
}
}
}
}
if(temp->needtime==0)
{//销毁就绪队列中已经结束的进程
count--;//此时就绪队列中进程数减1
cout<<"进程"<<p->id<<"结束"<<endl;
head->next=temp->next;
free(temp);//撤销就绪队列中已经结束的进程
}
p=head->next;
}
}
}
}
void main()
{
cout<<"**************进程的初始状态!**************"<<endl;
creatprocess();
cout<<"程序运行结果如下:"<<endl;
RunProcess();//简单轮转法Round Robin
}
相关文章
- 精华推荐 |【算法数据结构专题】「延时队列算法」史上非常详细分析和介绍如何通过时间轮(TimingWheel)实现延时队列的原理指南
- 精华推荐 |【算法数据结构专题】「延时队列算法」史上非常详细分析和介绍如何通过时间轮(TimingWheel)实现延时队列的原理指南
- 算法导论 9.3-6 nlgk时间求k分位数
- 2023年美国大学生数学建模时间、分析及算法代码
- 算法刷题-O(1) 时间插入、删除和获取随机元素、汇总区间
- SOFAJRaft源码阅读(肆)-Netty时间轮算法的实践
- 请问,主线程和自己开的线程之间切换的机制是什么。。是根据时间片轮流切换么?
- 浅谈单片机程序设计中的“分层思想”和“时间片轮思想”
- 时间片轮状调度算法
- 进程调度之时间片轮转调度算法(实验三)