操作系统实验指导书 下载本文

}*ready=NULL,*p。 typedef struct PCB。

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>> /*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面*/ p->link=second。 first->link=p。 second=NULL。 insert=1。 }

else /* 插入进程优先数最低,则插入到队尾*/ {

first=first->link。 second=second->link。 } }

if(insert==0> first->link=p。 } }

input(> /* 建立进程控制块函数*/ {

int i,num。

//clrscr(>。 /*清屏*/

printf(\请输入进程号?\。 scanf(\。 for(i=0。i {

printf(\进程号No.%d:\\n\。 p=getpch(PCB>。

printf(\输入进程名:\。 scanf(\。

printf(\输入进程优先数:\。 scanf(\。

printf(\输入进程运行时间:\。 scanf(\。 printf(\。

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>。 }

disp(PCB * pr> /*建立进程显示函数,用于显示当前进程*/ {

printf(\。 printf(\。 printf(\。 printf(\。 printf(\。 printf(\。 printf(\。 }

check(> /* 建立进程查看函数 */ {

PCB* pr。

printf(\当前正在运行的进程是:%s\。 /*显示当前运行进程*/ disp(p>。 pr=ready。

printf(\当前就绪队列状态为:\\n\。 /*显示就绪队列状态*/

while(pr!=NULL> {

disp(pr>。 pr=pr->link。 } }

destroy(> /*建立进程撤消函数(进程运行结束,撤消进程>*/ {

printf(\进程 [%s] 已完成.\\n\。 free(p>。 }

running(> /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {

(p->rtime>++。

if(p->rtime==p->ntime>

destroy(>。 /* 调用destroy函数*/ else {

(p->super>--。 p->state='w'。

sort(>。 /*调用sort函数*/ } }

main(> /*主函数*/ {

int len,h=0。 char ch。 input(>。 len=space(>。

while((len!=0>&&(ready!=NULL>> {

ch=getchar(>。 h++。

printf(\。 p=ready。

ready=p->link。 p->link=NULL。 p->state='R'。 check(>。 running(>。

printf(\按任一键继续......\。

ch=getchar(>。 }

printf(\进程已经完成.\\n\。 ch=getchar(>。 }

六、注意事项

因为程序长而且有难度,所以在设计实验时,要细心,多次调试。

七、思考题

实验三 批处理系统中作业调度

一、实验目的

模拟批处理系统中的作业调度,以加深对作业调度的概念的理解.

二、实验类型<含验证型、设计型或综合型)

设计型

三、实验仪器

一台安装Windows操作系统及C语言编译程序的pc机

四、实验原理 五、实验方法与步骤

#include #include

typedef struct jcb {

char name[4]。 /*作业名*/

int length。 /*作业长度,所需主存大小*/ int printer。 /*作业执行所需打印机的数量*/ int tape。 /*作业执行所需磁带机的数量*/ int runtime。 /*作业估计的执行时间*/

int waittime。 /*作业在输入井中的等待时间*/

struct jcb *next。/*指向下一个作业控制块的指针*/ }JCB。 /*作业控制块类型定义*/

JCB *head。 /*作业队列头指针定义*/ int tape,printer。 long memory。

shedule( > /*作业调度函数*/ {