视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
操作系统-进程管理实验C语言
2025-10-02 04:46:47 责编:小OO
文档
#include"stdio.h"

#include"stdlib.h"

#define ready 1

#define run 2

struct pcb

{

      int priority;   /*进程的优先级*/

      int state;      /*进程的状态:可以有run、ready、finish(可有可无)*/

 进程需要运行的时间*/

          int  time;    /*进程已运行的时间*/

  指向下一个进程PCB的指针*/ 

typedef struct pcb PCB;

PCB *head=NULL;

 

/*此函数用于创建进程队列*/

 void create(void)  

{ PCB *p, *q;

  int n,i;

  printf("Enter the number of the process:");

 输入要创建的进程的数量*/

 创建一个表头结点*/

  p=head;

 用循环来创建指定个结点*/

 }

 /*删除执行完毕的进程*/

 void delete(PCB *head,PCB *p)

{PCB *q;

q=head;

while(q->next!=p)

q=q->next;

q->next=p->next;

free(p);

}

 

/*找出执行时间最短的进程*/ 

 PCB *getminneedtime(PCB *head)

 {PCB *p,*q;

p=head->next;

q=p->next;

{if(p->needtime>q->needtime)

  }

  return(p);

 }

/*找出优先级最高的进程*/ 

 PCB *getpriority(PCB *head)

{PCB *p,*q;

p=head->next;

q=p->next;

while(q)

{if (p->priority>q->priority)

p=q;

}

return (p);

}

/*时间片轮转*/

void RR (void)

{ PCB *p,*q,*r;

int time;

printf("input the time:\\n ");

scanf("%d",&time);

for(p=head->next;p->next;p=p->next)

{r=p;}

while(head->next)

{选出就绪队列的第一个进程*/

p->state=run;

 输出该进程的信息*/

 时间片内,进程运行结束否*/

   if(q!=NULL)                         /*输出就绪队列中的进程信息*/

  {

  }

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 HPF (void)

{PCB *p,*q;

 int flag=1;

while(head->next)

 { if(flag==1)

 调用“找出执行时间最短的进程”函数*/

   }            /*将选出的进程的状态改为“run”*/

 

 输出该进程的信息*/

 输出就绪队列中的进息*/

  {if(q!=p)

  }

}

  

 将该运行结束的进程删除掉*/

 }

}

/*短作业优先*/

void SJF (void) 

{PCB *p,*q;

while(head->next)

 { p=getminneedtime(head);  /*调用“找出执行时间最短的进程”函数*/

 将选出的进程的状态改为“run”*/

 输出该进程的信息*/

 输出就绪队列中的进程信息*/

  {if(q!=p)

  }

d将该运行结束的进程删除掉*/

 }

}

/*输出菜单*/ 

void printfunc(void)

 printf("    *     1-create    *\\n"); 

 printf("    *     2-SJF       *\\n"); 

 printf("    *     3-HPF       *\\n"); 

 printf("    *     4-RR        *\\n"); 

 printf("    *     0-exit      *\\n"); 

 }

/*主函数*/ 

main()

{int choice;

printfunc();

do

{printf("please input the number:");

 scanf("%d",&choice);

 getchar();

 switch (choice)

  {case 1:

 就绪队列没有进程,请先创建进程\\n");

 

 就绪队列没有进程,请先创建进程\\n");

 

 就绪队列没有进程,请先创建进程\\n");

 

 

  }

}

while(1);

}下载本文

显示全文
专题