操作系统课程设计报告

发布时间 : 星期六 文章操作系统课程设计报告更新完毕开始阅读

者进程加入到就绪队列;初始化缓冲区。 void init() {

s1.type='a'; s1.val=10; s2.type='b'; s2.val=0; m1.type='c'; m1.val=1; m2.type='d'; m2.val=1;

for(int i=0;i

char str2[2]={'P','\\0'}; char * str;

str = join(str2,str1);

strcpy(producter[i].name,str);

producter[i].state='R';//就绪态,要加入就绪队列

21

producter[i].why=' '; producter[i].dd=0;

ready[irn++]=&producter[i];//将生产者加入就绪队列 }

for(int j=0;j

char str2[2]={'C','\\0'}; char * str;

str = join(str2,str1); strcpy(consumer[j].name,str); consumer[j].state='R'; consumer[j].why=' '; consumer[j].dd=0;

ready[irn++]=&consumer[j];//将消费者加入就绪队列 }

for(int k=0;k<10;k++) {

array[k] = ' ';

22

} }

//处理器调度

随机调度一个在就绪队列中的进程,判断是生产者进程还是消费者进程,执行不同的语句,执行一条指令后(执行后pc的值加1),重新调度。 void diaodu() {

while(irn!=0){ x=rand()%irn; rx=x;

process=ready[x]; pc=process->dd;

if(process->name[0]=='P'){ pt=pc; pc++; switch(pt){

case 0:p(&s1);process->dd=pc;break; case 1:p(&m1);process->dd=pc;break; case 2: put();process->dd=pc;break; case 3:v(&m1);process->dd=pc;break; case 4:v(&s2);process->dd=pc;break;

23

case 5: gotol();process->dd=pc; } }

else if(process->name[0]=='C'){ pt=pc; pc++; switch(pt){

case 0:p(&s2);process->dd=pc;break; case 1:p(&m2);process->dd=pc;break; case 2:get();process->dd=pc;break; case 3:v(&m2);process->dd=pc;break; case 4:v(&s1);process->dd=pc;break; case 5:gotol();process->dd=pc; } }

}//end while

printf(\程序结束!\\n\此程序没有结束的时候,固不需要改就绪态为运行态,也没有完成态 }

24

联系合同范文客服:xxxxx#qq.com(#替换为@)