实验报告课程名称操作系统实验学生学院计算机学院专业班级计算机科学与技术学号学生姓名指导教师孙为军2015年12月30日实验一进程调度一、实验目的编写并调试一个模拟的进程调度程序,以加深对进程的概念及进程调度算法的理解.二、实验内容1.采用“短进程优先”调度算法对五个进程进行调度。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已用CPU时间、进程状态等等。2.每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。三、实现思路先考虑实现进程调度所需要的数据结构,然后根据所需要的算法进行设计。四、主要的数据结构进程控制块PCB:structpcb{charname[10];charstate;intntime;intrtime;structpcb*link;}*ready=NULL,*p;五、算法流程图进程完成,撤消该进程就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间已达到所需的运行时间把运行进程插入到下一个队列的队尾插入新的进程开始初始化PCB,输入进程信息所有队列都为空各进程按FCFS原则排队等待调度六、运行与测试输入进程信息:输入完毕,显示当前运行以及就绪的进程:优先运行短进程七、改进的方向界面比较难看,可以中文化信息。实验二作业调度一、实验目的用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。二、实验内容1.写并调试一个单道处理系统的作业等待模拟程序。2.作业等待算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。3.由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。4.每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。5.对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。三、实现思路首先根据题目的要求,先设想出作业调度所需的数据结构,包括题目中的作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针以及在作业运行完成后需要现实的信息包括开始运行时刻、完成时刻、周转时间、带权周转时间。在完成数据结构的构造后,在对每一个模块进行编写。在作业调度中,与实验一的进程调度有所不同的是需要增加一个总体的变量,运行的时间。在本实验中需要实现两种不同的算法,所以这也需要特别去考虑。四、主要的数据结构作业控制块jcbstructjcb{charname[10];inttjtime;intkstime;intntime;intnresource;floatsuper;intftime;floatzztime;floatdqtime;charstate;structjcb*link;}*ready=NULL,*p,*q;五、算法流程图六、运行与测试运行程序后首先选择一个算法:首先先选择先来先服务算法,输入作业数据后,显示各个作业,并显示开始运行时刻、完成时刻、周转时间、带权周转时间:运行了三次后,可以看出目前的算法是先来先服务算法:所有作业运行结束后,显示平均周转时间以及平均带权周转时间:现在选择响应比高者优先算法,并输入一组新数据后显示:运行一次后,由于C的相应比高于B,所以先运行:完成运行后显示相应的数据:七、改进的方向界面可以改进成图形界面,可以实现将运行完的作业保留下来并且在其运行状态改为F的功能,还可以实现在所有作业运行完毕后将所有作业的相关数据集合成一张简单的表的功能。实验三动态分区分配方式的模拟1、实验目的了解动态分区分配方式中的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解2、实验内容1.用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其中,空闲分区通过空闲分区链(表)来管理;在进行内存分配时,系统优先使用空闲区低端的空间。2.假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:•作业1申请130KB•作业2申请60KB•作业3申请100KB•作业2释放60KB•作业4申请200KB•作业3释放100KB•作业1释放130KB•作业5申请140KB•作业6申请60KB•作业7申请50KB•作业8申请60KB请分别采用首次适应算法和最佳适应算法进行内存的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。三、实现思路使用双向链表来表示存储空间,整题的总体思路在于操作该链表,只是在分配空间需要考虑不同的算法实现。四、主要的数据结构空闲区说明表结构typedefstructFreeA{intNUM;longsize;longaddress;intstate;}ElemType;双向链表存储结构typedefstructNLNode{ElemTypedata;structNLNode*prior;structNLNode*next;}NLNode,*NLinkList;五、算法流程图六、运行与测试运行程序,显示选择两种不同算法的界面:选择首次适应算法,直接显示当前的分配情况以及有两个分配回收内存的功能:根据题目要求输入相应的请求序列:选择最佳适应算法,再次输入题目要求的作业请求序列:七、改进的方向界面可以改进成图形界面,增加对主存剩余地址的输出,增加更多种的内存动态分配的算法以及对内存操作的功能。实验四多级反馈调度队列调度算法一、实验内容用高级语言实现多级调度,调度算法自由选择。本实验选择两道处理系统,相对应的算法包括:作业调度使用先来先服务算法,进程调度使用短进程优先算法。二、实现思路根据前面的实验一以及实验二,结合经验设计。三、主要的数据结构进程控制块pcbstructpcb{charstate;};作业控制块jcbstructjcb{charname[10];inttjtime;intntime;charstate;structpcb*l;structjcb*link;}*ready=NULL,*p,*q;四、运行与测试输入5个请求序列,结果如图:A运行完后,无作业提交,故等待:两份作业同时被调度,此时根据短进程优先原则,B进入就绪状态,D继续运行:继续运行:最后只剩下作业B还在运行运行完毕:五、改进的方向界面可以改进成图形界面,可以显示更多的信息,可以选择使用多种不同的算法。