⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 时间片轮转法
💻 CPP
字号:
//时间片轮转法调度
#define M 200
#include "conio.h"
#include "stdio.h"
typedef struct pcb /*进程控制块的定义*/
{
   char Processname[M]; /*进程名*/
   int runtime;        /*运行时间*/
   int arrivetime;     /*到达时间*/
   char state;         /*进程状态*/
   struct pcb*next;    /*链接指针*/
}PCB;
PCB head_input;
PCB head_run;
PCB*pcb_input;
static char R='r',C='c';
unsigned long current;  /*记录系统当前时间的变量*/
int Processready();    /*建立就绪队列函数*/
int Dataready();      /*判断进程是否就绪函数*/
void inputprocess();  /*建立进程函数*/
int runprocess();     /*运行进程函数*/
int Processready()
{
   while(1)
   {
     if(Dataready()==0)
        return 1;
      else
         runprocess();
   }
}
int Dataready()
{
   if(head_input.next==NULL)
   {
    if(head_run.next==NULL)
     return 0;
         else
           return 1;
}
PCB *p1,*p2,*p3;
p1=head_run.next;
p2=&head_run;
while(p1!=NULL)
{
   p2=p1;
   p1=p2->next;
}
p1=p2;
p3=head_input.next;
p2=&head_input;
while(p3!=NULL)
{
   if(((unsigned long)p3->arrivetime<=current)&&(p3->state==R))
   {  
     
    printf("时间片是:%d(时间:%d),进程%s开始  \n",current,(current+500)/1000,p3->Processname);
      
       p2->next=p3->next;
       p3->next=p1->next;
       p1->next=p3;
       p3=p2;
}
p2=p3;
p3=p3->next;
}
return 1;
}
void inputprocess()
{
   PCB *p1,*p2;
   int num;
   unsigned long max=0;
 
   printf("你要运行多少个进程:\n");
  
   scanf("%d",&num);
   p1=&head_input;
   p2=p1;
   p1->next=new PCB;
   p1=p1->next;
   for(int i=0;i<num;i++)
   {
   
      printf("  第%d个输入的进程名称:\n",i+1);
   
   scanf("%s",p1->Processname);
    
   printf(" 输入运行时间:\n");
   
   scanf("%d",&(p1->runtime));
  
   printf(" 输入到达时间:\n");
 
   scanf("%d",&(p1->arrivetime));
   p1->runtime=(p1->runtime)*1000;
   p1->arrivetime=(p1->arrivetime)*1000;
   p1->state=R;
   if((unsigned long)(p1->arrivetime)>max)
    max=p1->arrivetime;
   p1->next=new PCB;
   p2=p1;
   p1=p1->next;
   }
   delete p1;
   p1=NULL;
   p2->next=NULL;
}
int runprocess()
{
   PCB *p1,*p2;
   if(head_run.next==NULL)
   {
      current++;
      return 1;
   }
else
{
   p1=head_run.next;
   p2=&head_run;
   while(p1!=NULL)
   {
      p1->runtime--;
      current++;
      if(p1->runtime<=0)
   {
        
  printf("时间片是:%d(时间:%d),进程%s结束  \n",current,(current+500)/1000,p1->Processname);
    
        p1->state=C;
        p2->next=p1->next;
        delete p1;
        p1=NULL;
}
else
{
        p2=p1;
        p1=p2->next;
}
}
   return 1;
}
}
//这样做,设定一个周期的联系来解决问题
void main()
{
        
     printf("\t按时间片轮转法调度的算法进行CPU调度 时间:1=1000 时间片\n");
       
        current=0;
  inputprocess();
  Processready();
  getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -