用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

模拟进程调度时间片轮转算法

2016-06-05 作者: 三工耳举报

[c++]代码库

#include"stdio.h"
#include"stdlib.h"
#include<iostream>
using namespace std;
#define ready 1
#define run 2

struct pcb
{
      char name[10];  
      int priority;   /*进程的优先级*/
      int state;      /*进程的状态:可以有运行和就绪*/
	  int needtime;   /*进程需要运行的时间*/
	  int runtime;
      int  time;    /*进程已运行的时间*/
   	  struct pcb *next;  /*指向下一个进程PCB的指针*/ 
};     
typedef struct pcb PCB;
PCB *head=NULL;

 void create()      /*此函数用于创建进程队列*/  
{ 
	 PCB *p, *q;
     int n,i;
     printf("请输入要创建的进程的数量:");
     scanf("%d",&n);                          
     head=(PCB *)malloc(sizeof(PCB));         
     p=head;
     for(i=1;i<=n;i++)                        
     {  
		 q=(PCB*)malloc(sizeof(PCB));
	     p->next=q;
	     p=q;
	     printf("\n请输入 NO.%d 个进程的标识符:",i);
         scanf("%s",&p->name);
	     printf("请输入进程的优先级:");
	     scanf("%d",&p->priority);
         printf("请输入进程所需的时间:");
         scanf("%d",&p->needtime);
	     p->state=ready;
         p->runtime=0;
        p->next=NULL;
     }
 }

void lunzhuan ()      /*时间片轮转*/
{
	PCB *p,*q,*r;
   int time;
   printf("请输入时间片大小:\n ");
   scanf("%d",&time);
   for(p=head->next;p->next;p=p->next)
      r=p;
   while(head->next)
   {
	   p=head->next;       /*选出就绪队列的第一个进程*/
       p->state=run;
       printf("\n正在运行的进程是:\n"); /*输出该进程的信息*/
       printf("%s\t",p->name);
       printf("state: 运行\t");
       printf("needtime: %d\t",p->needtime);
       printf("runtime: %d\n",p->needtime);
       q=head->next;
       if(p->needtime-p->runtime<=p->time)   /*时间片内,进程运行结束否*/
	   {
		   p->runtime=p->needtime;
           printf("runtime:%d\n",p->runtime);
	   }
       else
	   {
		   p->runtime=p->runtime+p->time;
           printf("runtime:%d\n",p->runtime);
       }
       q=p->next;
       if(q!=NULL)                         /*输出就绪队列中的进程信息*/
           printf("就绪队列是:\n");
       else 
		   printf("就绪队列为空!\n");
      while(q)
	  {
		  printf("%s\t",q->name);
          printf("state:   就绪\t");
          printf("needtime:%d\t",q->needtime);
          printf("runtime:%d\t",q->runtime);
          printf("\n");
          q=q->next;  
	  }
     if(p->runtime==p->needtime)
	 { 
		 delete(head,p);
	 }
     else
	 { 
		 head->next=p->next;
         r->next=p;
         r=p;
         r->state=ready;
         r->next=NULL;
	 }
   }
}
 
void main()
{
	cout<<"开始创建进程:"<<endl;
    create();
	if(head==NULL || head->next==NULL)
      printf("就绪队列没有进程,请先创建进程\n");
	else
      lunzhuan();
}
  


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...