您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统实验指导书11
《操作系统》实验指导书河南科技大学电子信息工程学院计算机系2011.30目录实验环境.................................................0实验报告要求.............................................0实验一进程控制与处理机调度综合实验.....................1实验二存储管理与页面置换算法...........................60实验环境本课程实验硬件环境为PⅢ以上的处理器,带有显示器。操作系统使用windows98以上操作系统,基本编程语言为C语言。实验报告要求实验报告应包含以下内容:(1)实验题目(2)实验目的(3)实验环境(4)算法描述(5)程序源代码(6)出现的问题(7)对问题的解决方案(8)实验结果与结果分析(9)实验思考(学生对本次实验的收获的总结)1实验一进程控制与处理机调度综合实验一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。二、实验学时4学时三、实验内容本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。实验模拟创建若干进程(人为输入或随机数产生),选择一种或几种单处理机的进程调度算法,如FCFS(先来先服务),SPF(短进程优先),RR(时间片轮转法),优先级算法等,模拟进行进程调度。每进行一次调度,都打印一次运行进程、就绪队列、以及各个进程的PCB,并能在进程完成后及时撤消该进程。四、算法描述1进程及进程的运行状态进程是现代计算机中的基本要素,是系统分配资源和调度的基本单位。进程与程序不同,进程是系统中动态的实体,有它的创建、运行和撤销的过程。PCB块是系统感知进程存在的唯一实体。进程的创建必须首先创建进程的PCB块,而进程的运行也伴随着PCB块的变化,进城撤销也要同时撤销它的PCB块。所以本实验的任务就是通过模拟调度进程的PCB块来调度进程。进程的PCB块包含以下四方面的内容:a)进程标示符b)处理及状态信息c)进程调度信息d)进程控制信息进程在运行中存在三种基本状态,分别是运行状态、就绪状态和阻塞状态。2进程调度一个运行进程的时间片用完或发生阻塞时,系统就会选择一个就绪进程调度执行。进程的调度算法有很多,如FCFS、SPF、优先级调度和时间片轮转方法。进程调度算法模拟实验就是通过调度进程的PCB块来模拟调度进程。在系统中PCB块就表现为一个结构体,PCB块之间的连接方式存在两种,一种是链接方式,一种是索引方式。本实验中可选择任意一种连接方式。3例程设计一个有N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优2先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的流程图如下:开始初始化进程PCB,输入进程信息各进程按优先数从高到低排列就绪队列空?y结束就绪队列首进程投入运行时间片到CPU占用时间+1运行已占用CPU时间已达到所需CPU时间进程完成撤销该进程y是运行进程的优先数减1把运行进程插入就绪队列图1-1流程图五、参考程序#includestdio.h#includestdlib.h#includeconio.h#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb{/*定义进程控制块PCB*/charname[10];charstate;intsuper;intntime;intrtime;3structpcb*link;}*ready=NULL,*p;typedefstructpcbPCB;voidsort()/*建立对进程进行优先级排列函数*/{}voidinput()/*建立进程控制块函数*/{inti,num;printf(\n请输入进程数量?);scanf(%d,&num);for(i=0;inum;i++){printf(\n进程号No.%d:\n,i);p=getpch(PCB);printf(\n输入进程名:);scanf(%s,p-name);printf(\n输入进程优先数:);scanf(%d,&p-super);printf(\n输入进程运行时间:);scanf(%d,&p-ntime);printf(\n);p-rtime=0;p-state='w';p-link=NULL;sort();/*调用sort函数*/}}intspace(){intl=0;PCB*pr=ready;while(pr!=NULL){l++;pr=pr-link;}return(l);}voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/{printf(\nqname\tstate\tsuper\tndtime\truntime\n);printf(|%s\t,pr-name);4printf(|%c\t,pr-state);printf(|%d\t,pr-super);printf(|%d\t,pr-ntime);printf(|%d\t,pr-rtime);printf(\n);}voidcheck()/*建立进程查看函数*/{PCB*pr;printf(\n****当前正在运行的进程是:%s,p-name);/*显示当前运行进程*/disp(p);pr=ready;printf(\n****当前就绪队列状态为:\n);/*显示就绪队列状态*/while(pr!=NULL){disp(pr);pr=pr-link;}}voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/{printf(\n进程[%s]已完成.\n,p-name);free(p);}voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/{(p-rtime)++;if(p-rtime==p-ntime)destroy();/*调用destroy函数*/else{(p-super)--;p-state='w';sort();/*调用sort函数*/}}voidmain()/*主函数*/{intlen,h=0;charch;input();len=space();while((len!=0)&&(ready!=NULL))5{ch=getchar();h++;printf(\nTheexecutenumber:%d\n,h);p=ready;ready=p-link;p-link=NULL;p-state='R';check();running();printf(\n按任一键继续......);ch=getchar();}printf(\n\n进程已经完成.\n);ch=getchar();}完成上述实验示例程序,按照优先级算法补充出sort()子程序的内容。若修改优先数时增加下列原则:进程等待的时间超过某一时限时增加其优先数,参考上述例程,写出程序。六、选做题完成FCFS或SPF算法。七、思考题编写一个多道程序系统的作业调度模拟程序,可采用任一调度算法。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。6实验二存储管理与页面置换算法一、实验目的通过模拟页式虚拟存储管理中地址转换和页面置换,了解页式虚拟存储管理的思想,掌握页式地址转换过程和缺页中断处理过程。二、实验学时4学时三、实验内容单机模拟页式虚拟存储管理中地址转换和页面置换过程。首先对页表进行初始化;输入要访问的逻辑地址(可为16进制或10进制),程序分离出逻辑地址的页号,查找页表,根据页表完成地址转换,输出转换后的地址;若缺页则提示中断发生,按某种页面置换算法(FIFO,LRU)进行页面置换,并修改和输出页表,输出绝对地址。最后输出置换情况和缺页次数。四、算法描述1内存的分配和管理方案在进程创建时必须为它分配一定的内存资源,内存资源的分配与管理有很多方法,从动态性分有静态的和动态的分配方法,从连续性上分有连续的和不连续的分配方案。连续的分配方案是程序的执行速度加快但会使内存出现碎片而不能得到应用,而不连续的分配方案可以使内存碎片得到充分的应用,但由于访问内存次数的增多使程序执行的速度下降。2内存的分配的过程在作业执行前,向系统提供内存的请求表,在系统为作业创建进程时,要为进程分配内存资源。以分页系统为例,系统首先确定进程需要的页面数量,然后顺序查找位图(系统为每一个页面分配一位内存中的各个页面组成一个数组,如果该位为1说明该位所指示的页正在被使用,如果该位为0说明该位指示的页面空闲)若存在所需要的空闲页面则此次分配成功,否则分配失败,若分配成功系统首先把分配出去的页面所属的位置为1,然后形成进程所需的页表。3算法思想本程序有两个功能:一是地址转换;二是模拟页面置换情况。(1)地址转换:add_tran将逻辑地址中的页号分离出来,查找页表,将查找到的块号与逻辑地址中的页内偏移量合成实际地址,若查找不到则产生缺页中断,按FIFO的方法置换页面。(a)数据结构:array[max][2]为页表,其中array[n][0]为页号,array[n][1]为块号,size_PT表示系统分配给进程的块数,即页表中的页数。7(b)地址转换算法思想首先初始化页表:输入分配的块数(页表的大小),然后输入初始页表中的页号和相对应的块号,初始化完成后程序输出初始化后的页表。然后是地址转换:输入16进制逻辑地址,程序分离出逻辑地址的页号,然后查找页表,若缺页则提示中断发生,并修改页表,然后输出转换后的地址,输出页表。(c)执行情况程序提示“pleaseinputsizeofthepagetable:”,要求输入分配的块数s_PT,即页表的大小。然后根据size_PT,循环输入初始化页表里的页号和对应的块号。用j来表示下一个将会被置换的页面存放位置,初始指向页表中最后一个页面,按照(j+1)%size_PT循环。然后程序输出页表情况:页号和对应的块号。至此初始化完成。程序提示“inputtheaddersswantedtobetranslated(0exit):”,要求输入要转换的逻辑地址。程序分离出页号后查找页表,查找到则直接输出转换后的地址。否则提示“intermittenceoccurred,pageAhasbeenreplacedwithpageB”。(A代表被置换的页号,B代表置换后的页号。)然后再输出转换后的地址(16进制)。输出转换后的地址后,程序还把转换后的页表显示出来,可以清楚地了解页表是否被置换和置换情况。(d)结果举例设size_PT为3,初始化页表为Page:1block:2,page:3block:5,page:6block:3。输入逻辑地址4ff(程序假设页面大小为1k即1024)。则其页号为1,查找页表,不产生缺页中断,块号为2,则输出转换后的地址为8FF,页表不变。输入
本文标题:操作系统实验指导书11
链接地址:https://www.777doc.com/doc-2454501 .html