我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 急~~~有一个时间片轮转的进程切换算法 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

samuschen



性别: 美女 状态: 该用户目前不在线
等级: 品行端正
发贴: 201
威望: 0
浮云: 1663
在线等级:
注册时间: 2007-09-15
最后登陆: 2008-06-29

5come5帮你背单词 [ rejection /ri'd3əekən/ n. 拒绝,抵制,驳回 ]


急~~~有一个时间片轮转的进程切换算法

有一个时间片轮转的进程切换算法,编译通过的,就是运行时候老出错,实在不知道什么问题了,请高手帮忙看一下,谢了。。。


Quote:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct node
{
  char name[10]; /*进程标识符*/
  int rtime; /*进程占用CPU时间*/
  int ntime; /*进程到完成还要的时间*/   
  char state; /*进程的状态*/
  struct node *next; /*链指针*/
}PCB;



struct node *ready,*run,*tail,*finish; /*队列指针*/


int N; /*进程数*/
int T=1;//时间片

/*轮转法创建N个进程PCB并放进ready队列*/
void create()
{
 
  int i;
  printf("请输入进程数:");
  scanf("%d",&N); /*输入进程数*/
  printf("\n***请输入进程名和进程所需运行的时间***\n");
  for(i=1;i<=N;i++)
  {
     /*初始化进程信息*/
    PCB *p;
    p=(PCB *)malloc(sizeof(PCB));
    printf("\n 进程名:");
    scanf("%s",&p->name);
    printf("\n 进程运行时间:");
    scanf("%d",&p->ntime);
 
    p->rtime=0;   
    p->state='R';
    tail->next=p;//新进程插入ready队尾
    tail=tail->next;
  }

}

/*输出进程q的属性信息*/
void printq(PCB *q)
{
/*轮转法的输出*/
    printf(" name    rtime  ntime    state\n");
    printf(" %-10s%-10d%-10d%-c\n",q->name,
    q->rtime,q->ntime,q->state);
}


/*输出正在运行的进程的属性信息*/
void printrun()
{

printf("\n **** 当前正在运行的是进程:%s\n",run->name);
printq(run);

}

/*运行ready队列中的进程*/
void running()
{
  if(ready->next!=NULL)
    {       
     while(1)
        {
            run=ready->next;//取对头
            ready->next=ready->next->next;
            run->state='R';
           
            run->rtime=run->rtime+T;
            run->ntime=run->ntime-T;
            printrun();
           
            if(run->ntime==0)
            {
                run->next=finish;//将run进程放进finish队头
                finish=run;
                printf("\n\n 进程已经完成.\n");
                run->state='F';
                run=NULL;
            }
            else
            {
                tail->next=run;
                tail=tail->next;//将run进程放进ready队尾
                run=NULL;
            }
        }


     } 
  else printf("ready队列为空");

/*主函数*/
main()
{
    run=NULL;
    ready=(PCB *)malloc(sizeof(PCB));//ready队列头结点
    ready->next=NULL;
    tail=ready;
    create();
    running();
   
   

 
}
顶端 Posted: 2008-04-05 10:38 | [楼 主]
samuschen



性别: 美女 状态: 该用户目前不在线
等级: 品行端正
发贴: 201
威望: 0
浮云: 1663
在线等级:
注册时间: 2007-09-15
最后登陆: 2008-06-29

5come5帮你背单词 [ center /'sentə/ n. 中心,核心;vi. 居中;vt. 使集中,把…放在中部 ]


Quote:
引用第4楼ljpdxj于2008-04-05 22:34发表的  :
段错误对初学者来说很容易犯,我觉得主要是要理解函数调用的时候1级指针和2级指针的区别
可以这样说:段错误都是因为没有正确处理好在子函数内分配空间后没有正确传给调用函数引起的。

这样啊,看来要好好研究一下了
顶端 Posted: 2008-04-06 18:27 | [1 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.007248(s) query 6, Time now is:11-22 05:51, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号