您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > 《计算机操作系统原理》课外实验报告
精品WORD文档下载可编缉使用《计算机操作系统原理》课外实验报告《计算机操作系统原理》课外实验报告设计思路和内容先用随机函数初始化PCB结构体,从而模拟3个进程的特性,然后voidProInsert(PCB*p)/*优先数插入算法,将进程p按其优先级插入到就绪队列中相应位置*/、voidPrintPCB(PCB*q)//输出进程控制字信息、voidPrintLine(PCB*head)/*输出以p为队首的队列中所有PCB信息*/、voidPrintAll()//输出某一时刻进程队列信息、voidFirstIn()/*将就绪队列中进程调入运行队列*/等函数体,实现进程调度过程中最基本的功能。在主函数中先调用voidCreatePCB()/*随机产生n个进程,并对各个进程随机赋予初值*/,从而创建了就绪队列,为进程调度做好准备。而后voidSP()/*静态优先级抢占式调度策略*/、voidDP()/*动态优先级抢占式调度策略*/、voidRR()/*时间片轮转调度策略*/等来分别实现静态优先级抢占式调度策略、动态优先级抢占式调度策略和时间片轮转调度策略三种功能。而最后的多级反馈调度策略实现因为与前三者有很大的不同,所以在同一cpp中我几乎是重新重构了所有的基本算法来帮助快速实现多级调度策略的。精品WORD文档下载可编缉使用首先,对于时间的复杂性,我在进程调度实验中忽略了运行队列(CPU处理器的模拟)处理程序是依据进程进入就绪队列的时间来调度的,所以1、静态优先级抢占式调度策略最基本的思想是循环将就绪队列中程序调入到运行队列中,再在运行队列中执行对进程的操作。2、动态优先级抢占式调度策略的基本思想是循环的调度就绪队列中进程程序,然后再运行队列中对进程的优先级进行动态的操作,如每执行一次进程,它的优先级就相应的减2.,如果没有运行完,就将其重新按照优先级重新插入到就绪队列中,从而模拟出调度返回这一操作。3、时间片轮转调度策略,我预先确定时间片的长度为2,在循环从就绪队列中调度进程时,在运行队列中将其执行2个时间点,若没有执行完,则重新插入。4、而对于多级队列调度策略,则首先建立PCB*ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列,再将这些就绪队列逐渐分别(从高优先级到低优先级就绪队列)“时间片轮转法”。最后输出运行、就绪队列1、就绪队列2、就绪队列3、就绪队列4、结束队列5个队列中进程。我将进程随进入运行队列时间的影响与进程调度分开编写程序,进程阻塞实验来模拟进程进入CPU时,遇到阻塞情况下进入到阻塞队列中,从而简化了程序的书写。精品WORD文档下载可编缉使用核心数据结构设计和操作函数设计typedefstructnode{charname[10];/*进程名*/charID;/*进程标识名*/intpriority;/*优先级*/charstate;/*进程状态标志*/intin_time;/*进程进入CPU的时间*/intall_time;/*进程需要的总时间*/intrun_time;/*进程已运行的时间*/intblock_time;/*进程被阻塞的时间点*/intweak_time;/*进程被唤醒的时间点*/精品WORD文档下载可编缉使用intround;/*进程时间轮转时间片*/structnode*next;/*下个PCB指针*/}PCB;/*进程控制块结构字*/PCB*run,*ready,*finish,*tail_r,*tail_f;/*队列指针,依次定义运行队列、就绪队列、结束队列*/PCB*ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列voidSP()/*静态优先级抢占式调度策略*/{printf("现在开始静态优先级抢占式调度模拟\n\n");finish=NULL;精品WORD文档下载可编缉使用while(ready!=NULL){FirstIn();PrintAll();run->run_time+=1;if(run->all_time-run->run_time<=0){run->next=finish;finish=run;finish->state='F';run=NULL;精品WORD文档下载可编缉使用}elseProInsert(run);}PrintAll();}voidDP()/*动态优先级抢占式调度策略*/{printf("现在开始动态优先级抢占式调度模拟\n\n");finish=NULL;while(ready!=NULL)精品WORD文档下载可编缉使用{FirstIn();PrintAll();run->run_time+=1;run->priority-=2;/*每运行一次优先数降低2个单位*/if(run->all_time-run->run_time<=0)/*如所需时间为0将其插入完成队列*/{run->next=finish;finish=run;run->state='F';/*置状态为完成态*/精品WORD文档下载可编缉使用run=NULL;/*运行队列头指针为空*/}else/*没有运行完,则将其变为就绪态插入到就绪队列*/ProInsert(run);}PrintAll();}voidRR()/*时间片轮转调度策略*/{printf("现在开始时间片轮转调度策略\n\n");精品WORD文档下载可编缉使用intR_time=2;//时间片轮转调度法中时间为2finish=NULL;while(ready!=NULL){FirstIn();PrintAll();//就绪队列中进程进入到运行队列中后队列的显示for(inti=1;i<=R_time;i++){run->run_time+=1;run->priority-=1;精品WORD文档下载可编缉使用if(run->all_time-run->run_time<=0)/*如所需时间为0将其插入完成队列*/{run->next=finish;finish=run;run->state='F';/*置状态为完成态*/run=NULL;break;}if(i==R_time&&run->all_time-run->run_time>0)ProInsert(run);精品WORD文档下载可编缉使用}}PrintAll();}voidMLFQ()/*多级反馈队列调度策略*/{printf("现在开始多级反馈队列调度策略模拟\n\n");inttime1=1,time2=2,time3=3,time4=4;//设置每个就绪队列所分配到的时间片长度ready1=ready;finish=NULL;精品WORD文档下载可编缉使用while(ready1!=NULL){FirstIn_Demo1();PrintAll_MLFQ();for(inti=1;i<=time1;i++){run->run_time+=1;if(run->all_time-run->run_time<=0)/*如所需时间为0将其插入完成队列*/{run->next=finish;精品WORD文档下载可编缉使用finish=run;run->state='F';/*置状态为完成态*/run=NULL;break;}if(i==time1&&run->all_time-run->run_time>0)LineInsert2(run);}}while(ready2!=NULL)精品WORD文档下载可编缉使用{FirstIn_Demo2();PrintAll_MLFQ();for(inti=1;i<=time2;i++){run->run_time+=1;if(run->all_time-run->run_time<=0)/*如所需时间为0将其插入完成队列*/{run->next=finish;finish=run;run->state='F';/*置状态为完成态*/精品WORD文档下载可编缉使用run=NULL;break;}if(i==time2&&run->all_time-run->run_time>0)LineInsert3(run);}}while(ready3!=NULL){FirstIn_Demo3();精品WORD文档下载可编缉使用PrintAll_MLFQ();for(inti=1;i<=time3;i++){run->run_time+=1;if(run->all_time-run->run_time<=0)/*如所需时间为0将其插入完成队列*/{run->next=finish;finish=run;run->state='F';/*置状态为完成态*/run=NULL;精品WORD文档下载可编缉使用break;}if(i==time3&&run->all_time-run->run_time>0)LineInsert4(run);}}while(ready4!=NULL){FirstIn_Demo4();PrintAll_MLFQ();精品WORD文档下载可编缉使用run->run_time+=1;if(run->run_time-run->run_time<=0){run->next=finish;finish=run;run->state='F';run=NULL;ready4=ready4->next;}}PrintAll_MLFQ();精品WORD文档下载可编缉使用}
本文标题:《计算机操作系统原理》课外实验报告
链接地址:https://www.777doc.com/doc-7872549 .html