《操作系统原理》课程设计报告书题目:高优先权调度算法学号:学生姓名:专业:指导教师:5月30日目录1功能描述.................................................................................................12系统设计.................................................................................................12.1总体设计..............................................................................................12.2详细设计..............................................................................................12.3程序运行流程图.................................................................................13系统实现.................................................................................................23.1程序代码..............................................................................................34系统测试与分析....................................................................................74.1程序运行开始界面见图2和图3......................................................74.2高优先权程序正常运行.....................................................................8教师评分表...............................................................................................1311功能描述先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。高优先权优先调度算法可以使紧迫型作业进入系统后能得到优先处理。此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统。该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。2系统设计2.1总体设计验内容利用C语言来实现对N个进程采用动态优先权优先算法的进程调度。优先数改变的原则:进程每运行一个时间片,优先数减1。2.2详细设计1.在运行界面里输入进程名称,进程优先级和进程时间;2.每运行一个时间单位,作业的优先权级数减一;3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;4.每次调度前后显示作业队列;2.3程序运行流程图程序运行流程图见流程图123系统实现用c++编写的高优先权调度算法算法。是输入进程名、优先数、运行时间从就绪队列中选择优先级高的进程运行优先数减一、运行时间加一需要时间是否等于运行时间进程运行完成结束开始按1回车否否是流程图133.1程序代码程序源代码如下:#includestdio.h#includestdlib.hstructPCB{charp_name[20];intp_priority;intp_needTime;intp_runTime;charp_state;structPCB*next;};voidHighPriority();voidRoundRobin();voidInformation();charChoice();structPCB*SortList(PCB*HL);intmain(){Information();charchoice=Choice();switch(choice){case'1':system(cls);HighPriority();break;default:break;}system(pause);return0;}voidInformation(){4printf(按回车键进入演示程序);getchar();system(cls);}charChoice(){printf(\n\n);printf(1.演示最高优先数优先算法。);printf(按1继续:);charch=getchar();returnch;system(cls);}voidHighPriority(){structPCB*processes,*pt;//pt作为临时节点来创建链表,使用for语句,限制进程数为5个processes=pt=(structPCB*)malloc(sizeof(structPCB));for(inti=0;i!=5;++i){structPCB*p=(structPCB*)malloc(sizeof(structPCB));printf(进程号No.%d:\n,i);printf(输入进程名:);scanf(%s,p-p_name);printf(输入进程优先数:);scanf(%d,&p-p_priority);printf(输入进程运行时间:);scanf(%d,&p-p_needTime);p-p_runTime=0;p-p_state='W';p-next=NULL;pt-next=p;pt=p;printf(\n\n);}getchar();//接受回车//processes作为头结点来存储链表processes=processes-next;intcases=0;structPCB*psorted=processes;while(1){5++cases;pt=processes;//对链表按照优先数排序//psorted用来存放排序后的链表psorted=SortList(psorted);printf(Theexecutenumber:%d\n\n,cases);printf(****当前正在运行的进程是:%s\n,psorted-p_name);psorted-p_state='R';printf(qnamestatesuperndtimeruntime\n);printf(%s\t%c\t%d\t%d\t%d\t\n\n,psorted-p_name,psorted-p_state,psorted-p_priority,psorted-p_needTime,psorted-p_runTime);pt-p_state='W';psorted-p_runTime++;psorted-p_priority--;printf(****当前就绪状态的队列为:\n\n);//pt指向已经排序的队列pt=psorted-next;while(pt!=NULL){printf(qnamestatesuperndtimeruntime\n);printf(%s\t%c\t%d\t%d\t%d\t\n\n,pt-p_name,pt-p_state,pt-p_priority,pt-p_needTime,pt-p_runTime);pt=pt-next;}//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的pt=psorted;structPCB*ap;ap=NULL;//ap指向pt的前一个节点while(pt!=NULL){if(pt-p_needTime==pt-p_runTime){if(ap==NULL){pt=psorted-next;psorted=pt;}elseap-next=pt-next;}ap=pt;pt=pt-next;}if(psorted-next==NULL)6break;getchar();}}structPCB*SortList(PCB*HL){structPCB*SL;SL=(structPCB*)malloc(sizeof(structPCB));SL=NULL;structPCB*r=HL;while(r!=NULL){structPCB*t=r-next;structPCB*cp=SL;structPCB*ap=NULL;while(cp!=NULL){if(r-p_prioritycp-p_priority)break;else{ap=cp;cp=cp-next;}}if(ap==NULL){r-next=SL;SL=r;}else{r-next=cp;ap-next=r;}r=t;}returnSL;}74系统测试与分析经过测试运行正常,可以达到预期的输出结果。4.1程序运行开始界面见图2和图3图2图384.2高优先权程序正常运行输入进程名输入5个进程名、优先数、运行时间,然后程序自动从就绪队列中选择优先级高的进程运行优先执行,一直到所有进程全部运行完毕。具体的见图4—图12。图49图5图610图7图811图9图1012图12图1113教师评分表评分细则分数理解功能及基本原理程度。(20分)报告文字、图、表格式规范、整齐程度。(15分)报告内容完整、逻辑性程度。(15分)程序代码是否有注释、是否有语法错误。(10分)程序运行是否正常。(20分)程序运行界面是否美观。(15分)是否有创新思考、做法等。(5分)其他说明:总分:成绩:指导老师签名:日期: