1、任务二、单处理机系统的进程调度实验目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度。实验代码:#include “stdio.h“ #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块 PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL
2、,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入进程比当前进程优先数大,*/ /*
3、插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*/ int i,num; printf(“n 请输入进程数量:“); scanf(“%d“, for(i=0;iname); printf(“n 输入进程优先数:“); scanf(“%d“, printf(“n 输入进程运行时间:“)
4、; scanf(“%d“, printf(“n“); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用 sort 函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void show()printf(“nqnametstatetsupertndtimetruntimen“); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(“ %st“,pr-name); printf(“ %ct“
5、,pr-state); printf(“ %dt“,pr-super); printf(“ %dt“,pr-ntime); printf(“ %dt“,pr-rtime); printf(“n“); void check() /* 建立进程查看函数 */ PCB* pr; printf(“n*当前正在运行的进程是:%s“,p-name); /*显示当前运行进程*/ show();disp(p); pr=ready; if(pr=NULL)printf(“n*当前就绪队列为空!“);else printf(“n*当前就绪队列状态为:“); /*显示就绪队列状态*/show();while(pr!
6、=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(“n 进程%s 已完成 .n“,p-name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用 destroy 函数*/ else (p-super)-; p-state=w; sort(); /*调用 sort 函数*/ void main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0) h+; printf(“n 当前运行次数为:%d n“,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(“n 按任一键继续“); ch=getchar(); printf(“nn 进程已经完成.n“); ch=getchar(); 运行结果: