#include
#define MAX 100
typedef struct PCB //pcb进程控制块定义 {
int num[N]; //进程序号 char name[10]; //进程名 char state; //进程状态
int tijiaotime; //进程到达时间 int runtime; //进程开始时间 int finishtime; //进程结束时间 int needtime; //服务时间 int pro;//进程优先级
struct PCB *next; //链接指针指向下个作业的 }pcb;
struct PCB *head_input; struct PCB *head_run; struct PCB *head_run_pre;
unsigned long current; //记录系统当前时间的变量
int time=10000,n; //计时器
pcb *head=NULL,*p,*q;
void getInfo() //创建进程 {
int num;
printf(\请输入要建立的进程个数:\ scanf(\
for(num=0;num p=(pcb *)malloc(sizeof(pcb)); if(head==NULL) {head=p;q=p;} printf(\依次输入:\\n进程号进程名到达时间服务时间 \\n\ scanf(\ if(p->tijiaotime < time) time=p->tijiaotime; q->next=p; p->runtime=0; p->finishtime=0; p->next=NULL; p->state='W'; q=p; } } // *********************1.先来先服务调度算法******************************* void run_fcfo(pcb *p1)//定义先来先到服务的算法 { time = p1->tijiaotime > time? p1->tijiaotime:time; p1->runtime=time; printf(\现在时间是%d,开始运行进程%s\\n\ time+=p1->needtime; p1->state='F'; p1->finishtime=time; printf(\进程名开始时间所需时间结束时间\\n\ printf(\ %d %d \} void fcfo()//定义运行进程函数 { int i,j,t; for(j=0;j p=head; t=10000; for(i=0;i if(p->tijiaotime t=p->tijiaotime; q=p; //标记当前未完成的进程 } p=p->next; } %d run_fcfo(q); } } // ************************2.优先级调度************************************ int readydata() { //建立就绪队列 if(head_input->next==NULL) { return 0; } struct PCB *p1=head_input->next,*pmax,*p2; int maxpro=0xffff; pmax=p1; p2=head_input; while(p1!=NULL) { if(p1->pro head_run=pmax; head_run_pre->next=head_run->next; return 1; } void runprocess() //运行进程函数 { head_run->runtime-=10; head_run->pro++; struct PCB *p1,*p2; printf(\时间片的大小 %d\ current+=10; printf(\ %s 开始\\n\ 服务算法 printf(\时间片的大小 %d\ printf(\ %s 结束\\n\ if(head_run->runtime<=0) {//判断进程是否运行结束 } else { p1=head_input; p2=head_input->next; p1->next=head_run; head_run->next=p2; } } int readyprocess() { while(1) { if(readydata()==0) return 0; else runprocess(); } } void Init() { head_input=new PCB; head_input->next=NULL; current=0; int numpro; printf(\请重新输入要建立的进程个数:\ scanf(\ printf(\请依次输入进程名运行时间优先级\\n\ for(int i=0;i } } // ************************3.时间片轮转调度服************************************ void shijianpian() { int b,i,X,t,k; int a[MAX];//存放进程的剩余时间 int cnt[MAX];//存放进程调度次数 printf(\请输入进程数:\scanf(\ printf(\请输入时间片t大小:\scanf(\ printf(\请依次输入各个进程的服务时间\for(i=0;i scanf(\cnt[i]=0; } printf(\被调度进程\\t进程调度次数 \\t本次运行时间结果\\t剩余时间\\n\k=1; while(k) { for(i=0;i if(a[i]!=0) if(a[i]>=t) { a[i]-=t; b+=t; cnt[i]=cnt[i]+1; printf(\ } else { b=b+a[i]; cnt[i]=cnt[i]+1; a[i]=0; printf(\} else continue; } for(i=0;i 务算法