欢迎来到天天文库
浏览记录
ID:38628544
大小:785.50 KB
页数:15页
时间:2019-06-16
《操作系统 实验一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、姓名学号实验成绩华中师范大学计算机科学系实验报告书实验题目:进程调度算法课程名称:操作系统主讲教师:实验时间:2015年12月一、实验目的:1、掌握作业调度的基本思想2、熟练使用各种作业调度算法描述的过程3、掌握各种算法的优缺点二、实验内容:进程调度是处理机管理的核心内容。本实验要求用高级程序语言编写和调试一简单的进程调用程序,模拟完成进程控制及进程调度算法。进程控制包括进程的创建、阻塞、唤醒和撤销,进程调度算法包括优先级和轮转法。通过本实验可加深学生对进程控制块和进程队列的概念的理解,并了解循环轮转调度
2、和优先级调度的实现方法。三、实验环境:实践平台:Windows编写环境:VC++6.0四、实验设计原理1.设计进程控制块PCB结构,PCB结构包括以下信息:进程ID,用户ID,进程状态,进程优先数(或轮转时间片),进程创建时间,进程开始执行时间,进程执行完的时间,进程所占用的CPU时间,进程预计执行时间,进程剩余的执行时间等。2.模拟实现进程调度算法,包括:RoundRobin(轮转法)、PRI(优先级算法)RoundRobin调度算法:其基本思想是让每个进程在就绪队列中的等待时间与享受服务的时间成一定的
3、比例关系。系统给每一个进程分一段CPU时间,这段时间称为进程时间片。运行进程时间片用完后,系统将发生中断,强制该进程退出CPU,并释放相关资源,此进程进入就绪队列尾部等待CPU再次调度。PRI调度算法:其基本思想是每个进程都有一个优先权,在进程调度时,系统选取优先级最高的进程占有CPU。在dynamicPRI调度算法中,随着运行进程的执行,系统将不断地重新评估其优先级。而在StaticPRI调度算法中,进程优先级初始化后直到进程执行完毕不再发生改变。PRI算法的核心是,一旦就绪进程中有更高优先级的进程时,
4、立即发生高优先级中断。运行进程按优先级序列插入就绪队列等待,高优先级的进程被调度,占有CPU。五、实验详细实现过程与算法流程(1)进程控制块:系统中PCB块同操作系统中的PCB并不完全相同,考虑到调度算法的可行性问题,将PCB中的部分信息忽略,以简化算法;主要提取了进程描述和控制信息.ClassPCB//ProcessControlBlock{intID;//进程IDintuserID;//用户IDintstatus;//进程状态intpriority;//进程优先级intsubmitTime;//进程创
5、建时间intstartTime;//进程开始执行时间intfinishTime;//进程执行完的时间inttotalCpuTime;//进程预计执行时间intleftCpuTime;//进程剩余的执行时间intoneCpuTime;//进程时间片}(2)进程控制预处理信息保存类:保存进程控制的基本信息,主要是进程ID和发生时间。进程控制包括进程阻塞、唤醒和撤销。ClassBarrageWake{intid;//进程IDinttime;//时间}(3)进程队列控制类:最核心的数据类型,是进程调度算法的实现类
6、。其功能有,初始化用户输入数据,创建预处理信息,管理各进程队列,实现进程调度算法。ClassPCBQueue{public:intinitialize();//读取输入文件信息,并进程预处理intretractProcess(int);//撤销进程intwakeProcess(int);//唤醒进程intbarrageProcess(int);//阻塞进程voidsubmitProcess();//创建进程voidinspector();//CPU控制函数,检测进程控制信息voidFCFS();//先来先
7、服务(firstcomefirstserive)voidroundRobin();//轮转法(roundrobin)voidstaticPRI();//静态优先级(staticPRI)voiddynamicPRI();//动态优先(dynamicPRI)private:intCPU_TIME;intcurrentTime;//当前时间inttimeSlice;//时间片PCB*running;//运行进程PCB*submissionHead,*submissionTail;//预处理信息记录PCB*rea
8、dyHead,*readyTail;//就绪队列头(尾)指针PCB*waitHead,*waitTail;//等待队列头(尾)指针PCB*finishHead,*finishTail;//完成队列头(尾)指针BarrageWake*barrageHead,*barrageTail;//预阻塞进程BarrageWake*awakenHead,*awakenTail;//预唤醒进程BarrageWake*retractHead,*
此文档下载收益归作者所有