操作系统实验指导书--实验一 基于优先级的进程调度.docx

上传人:王** 文档编号:724458 上传时间:2023-12-27 格式:DOCX 页数:22 大小:157.16KB
下载 相关 举报
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第1页
第1页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第2页
第2页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第3页
第3页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第4页
第4页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第5页
第5页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第6页
第6页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第7页
第7页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第8页
第8页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第9页
第9页 / 共22页
操作系统实验指导书--实验一 基于优先级的进程调度.docx_第10页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统实验指导书--实验一 基于优先级的进程调度.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导书--实验一 基于优先级的进程调度.docx(22页珍藏版)》请在优知文库上搜索。

1、操作系统实验指导书实验一基于优先级的进程调度一、实验名称进程调度算法的模拟实现二、实验目标进程调度是处理机管理的核心内容。本实验要求用高级程序设计语言编写和调试一个简单的进程调用程序,模拟完成进程控制及进程调度算法。进程控制包括进程的创建、阻塞、唤醒和撤销,进程调度算法包括先来先服务、优先级(包括动态和静态)和论证法。通过本实验可以使学生加深对进程控制块和进程队列的概念的理解,并了解循环轮转调度和优先级调度的实现方法。三、实验环境要求:1 .PC机。2 .Dos;Windows;Linux环境。3 .BorlandC+forDos;VisualC+6.0forWindows;g+forLinu

2、xo四、实验基本原理1 .设计进程控制块PCB结构,PCB结构包括以下信息:进程ID,用户ID,进程状态,进程优先数(或轮转时间片),进程创建时间,进程开始执行时间,进程执行完的时间,进程所占用的CPU时间,进程预计执行时间,进程剩余的执行时间等。2 .模拟实现进程调度算法,包括:FCFS(先来先服务)、RoundRobin(轮转法)、PRI(优先级法,包括静态和动态优先级)。FCFS调度算法:将进程按提交时间的先后顺序排成队列,并按照先来先服务(firstcomefirstserve)的方式进行调度处理。RoundRobin调度算法:其基本思想是让每个进程在就绪队列中的等待时间与享受服务的时

3、间成一定的比例关系。系统给每一个进程分一段CPU时间,这段时间称为进程时间片。运行进程时间片用完后,系统将发生中断,强制该进程退出CPU,并释放相关资源,此进程进入就绪队列尾部等待CPU再次调度。PRI调度算法:其基本思想是每个进程都有一个优先权,在进程调度时,系统选取优先级最高的进程占有CPU。在dynamicPRI调度算法中,随着运行进程的执行,系统将不断地重新评估其优先级。而在StatiCPRl调度算法中,进程优先级初始化后直到进程执行完毕不再发生改变。PRI算法的核心是,一旦就绪进程中有更高优先级的进程时,立即发生高优先级中断。运行进程按优先级序列插入就绪队列等待,高优先级的进程被调度

4、,占有CPU。五、数据结构设计(1)进程控制块:系统中PCB块同操作系统中的PCB并不完全相同,考虑到调度算法的可行性问题,将PCB中的部分信息忽略,以简化算法;主要提取了进程描述和控制信息,这些是算法实现所必需的基本信息。ClassPCBProcessControlBlock(intID;进程IDintuserID;用户IDintstatus;进程状态intpriority;进程优先级intSubmitTime;进程创建时间intStartTime;进程开始执行时间intfinishTime;进程执行完的时间inttotalCpuTime;/进程预计执行时间intIeftCpuTime;进程

5、剩余的执行时间intOneCpuTime;进程时间片(2)进程控制预处理信息保存类:保存进程控制的基本信息,主要是进程ID和发生时间。进程控制包括进程阻塞、唤醒和撤销。ClassBarrageWakeintid;进程IDinttime;时间)(3)进程队列控制类:最核心的数据类型,是进程调度算法的实现类。其功能有,初始化用户输入数据,创建预处理信息,管理各进程队列,实现进程调度算法。ClassPCBQueuepublic:intinitialize。;读取输入文件信息,并进程预处理intretractProcess(int);/撤销进程intWakeProcess(int);唤醒进程intba

6、rrageProcess(int);阻塞进程voidSubmitProcessO;创建进程voidinspector();CPU控制函数,检测进程控制信息voidFCFS();先来先服务(firstcomefirstserive)voidroundRobin();轮转法(roundrobin)voidStaticPRIO;静态优先级(StatiCPRDvoiddynamicPRI();动态优先(dynamicPRI)private:intCPU_TIME;intCurrentTime;当前时间inttimeSlice;时间片PCB*running;运行进程PCB*submissionHead,

7、*submissionTail;预处理信息记录PCB*readyHead,*readyTail;就绪队列头(尾)指针PCB*waitHead,*waitTail;等待队列头(尾)指针PCB*finishHead,*finishTail;完成队列头(尾)指针BarrageWake*barrageHead,*barrageTail;预阻塞进程BarrageWake*awakenHead,*awakenTail;预唤醒进程BarrageWake*retractHead,*retractTail;预撤销进程;(4)PCB画图类:描述PCB块的画图类,用于显示系统中,它提取了PCB块中的部分信息,去除了

8、一些不必要的信息。其中的部分信息将在动态显示过程中传递给用户。ClasspcbDrawpublic:intID;进程ID号intpriority;进程优先级inttotalCpuTime;进程需运行的总CPU时间intIeftCpuTime;进程剩余的CPU时间intOneCpuTime;进程时间片;(5)画图控制系统:可视化平台的实现部分;包括初始化显示系统,初始化系统设置,读取系统和用户调度过程的记录文件,可视化显示运行进程和各进程队列,错误检测和错误信息显示与记录机制。Classdrawpublic:voidinitRoom(int);初始化显示系统voidinitSystem();初始

9、化系统设置intreadinformations(int);读取调度过程记录信息voiddrawing(int);在屏幕上画出PCB队列和各PCB块voidcompareO;错误检测private:intmode,debug;系统模式和运行模式interror_count,warning_count;/记录错误和警告interror;错误标志ints_time,u_time;系统CPU时间和用户CPU时间intsys_slice,use_slice;系统时间片和用户时间片pcbRect*user,*system;封装的系统和用户进程队列;六、流程图开始图2优先级进程调度算法流程图图4优先级调度

10、算法中的中断处理程序七、源代码/进程调度算法的模拟实现#includestring.h#includestdio.h,#include#defineNUMBER5#defineNULLO#definePCBSTRUCTstructPCBSTRtypedefPcbstruct*pcb;enumAlgorithmPR,RR;charMeans3;charb;PCBSTRUCT(charName10;intProi;Round;CpuTime;NeedTime;Count;charState;Pcbstruct*Next;;/创建PCB结构体PCBFinish,Ready,Tail,Run;void

11、Firstln()(Run=Ready;Run-State=R;Ready=Ready-Next;voidPrintl()(if(strcmp(Means,PR)=O)(strcmp(Means,pr)=O)printf(nNameCpuTimeNeedTimePrioprityStatenr);elseprintf(nNameCpuTimeNeedTimeCountRoundStaten);if(strcmp(Means,PR)=O)(strcmp(Means,pr)=O)printf(%8s%6d%8d%10d%8cn,temp-Name,temp-CpuTime,temp-NeedTim

12、e,temp-Proi,temp-State);elseprintf(,%8s%6d%8d%8d%8d%8cn,temp-Name,temp-CpuTime,temp-NeedTime,temp-Count,temp-Round,temp-State);)输出结果显示voidprint()(PCBp;Print1();printf(ItstheRunqueuen);if(Run!=NULL)Print2(Run);p=Ready;printf(,ItstheReadyqueuen);while(p!=NULL)(Print2(p);p=p-Next;)printf(ItstheFinished

13、queuen);p=Finish;while(p!=NULL)p=p-Next;)printf(nn);)按优先级从高到低插入就绪队列voidInsertl(PCBq)intb;PCBpl,s,r;s=q;pI=Ready;r=pl;b=l;WhiIe(P1!=NULL)&b)if(pl-Proi=s-Proi)F=P1;pl=pl-Next;)elseb=0;if(r!=pl)(r-Next=s;s-Next=p1;elses-Next=pl;Ready=s;IvoidInsert2(PCBp2)(Tail-Next=p2;Tail=p2;p2-Next=NULL;voidCreate(enumAlgorithmalg)(PCBp;inti,time;charNa10;intprio;Ready=NULL;Finish=NULL;Run=NULL;if(alg=PR)for(i=l;iName,Na);p-CpuTime=0;p-NeedTime=time;p-State=W;p-Proi=prio;if(Ready!=NULL)Insertl(p);else1p-Next=Ready;Ready=p;)elseReady=NULL;for(i=0;i5;i+)(scanf(,%s,Na);scanf(%d,&time);p=(PCB)malloc(sizeof

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 嵌入式开发

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!