
操作系统实验指导书及代码.doc
14页《《操作系统操作系统》》实验指导书实验指导书目目 录录 实验环境..................................................1 实验报告要求..............................................1 实验一 进程控制与处理机调度综合实验......................2 实验二 存储管理与页面置换算法............................7实验环境实验环境本课程实验硬件环境为 PⅢ以上的处理器,带有显示器操作系统使用 windows98 以上操作系统,基本编程环境为 Turbo C实验报告要求实验报告要求实验报告应包含以下内容:(1)实验题目(2)实验目的(3)实验环境(4)算法描述(5)程序源代码(6)出现的问题(7)对问题的解决方案(8)实验结果与结果分析(9)实验思考(学生对本次实验的收获的总结)2实验一实验一 进程控制与处理机调度综合实验进程控制与处理机调度综合实验一、实验目的一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。
二、实验学时二、实验学时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)表示进程控制块可以包含如下信息:进程名、优3先数、到达时间、需要运行时间、已用 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 流程图五、参考程序五、参考程序#include “stdio.h“ #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块 PCB */ char name[10]; char state; 4int super; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ { } void input() /* 建立进程控制块函数*/ { int i,num; printf(“\n 请输入进程数量?“); scanf(“%d“, for(i=0;iname); printf(“\n 输入进程优先数:“); scanf(“%d“, printf(“\n 输入进程运行时间:“); scanf(“%d“, printf(“\n“); p->rtime=0;p->state='w'; p->link=NULL; sort(); /* 调用 sort 函数*/ } } int space() { int l=0; PCB* pr=ready; while(pr!=NULL) { l++; pr=pr->link; } return(l); } void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ 5{ printf(“\n qname \t state \t super \t ndtime \t runtime \n“); printf(“|%s\t“,pr->name); printf(“|%c\t“,pr->state); printf(“|%d\t“,pr->super); printf(“|%d\t“,pr->ntime); printf(“|%d\t“,pr->rtime); printf(“\n“); } void check() /* 建立进程查看函数 */ { PCB* pr; printf(“\n **** 当前正在运行的进程是:%s“,p->name); /*显示当前运行进程*/ disp(p); pr=ready; printf(“\n ****当前就绪队列状态为:\n“); /*显示就绪队列状态*/ while(pr!=NULL) { disp(pr); pr=pr->link; } } void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ { printf(“\n 进程 [%s] 已完成.\n“,p->name); free(p); } void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用 destroy 函数*/ else { (p->super)--; p->state='w'; sort(); /*调用 sort 函数*/ } } void main() /*主函数*/ { int len,h=0; char ch; 6input(); len=space(); while((len!=0) h++; printf(“\n The execute number:%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 算法七、思考题七、思考题编写一个多道程序系统的作业调度模拟程序,可采用任一调度算法对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求7实验二实验二 存储管理与页面置换算法存储管理与页面置换算法一、实验目的一、实验目的通过模拟页式虚拟存储管理中地址转换和页面置换,了解页式虚拟存储管理的思想,掌握页式地址转换过程和缺页中断处理过程二、实验学时二、实验学时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 表示系统分配给进程的块数,即页表中的页数。
8(b)地址转换算法思想首先初始化页表:输入分配的块数(页表的大小),然后输入初始页表中的页号和相对应的块号,初始化完成后程序输出初始化后的页表然后是地址转换:输入 16 进制逻辑地址,程序分离出逻辑地址的页号,然后查找页表,若缺页则提示中断发生,并修改页表,然后输出转换后的地址,输出页表c)执行情况 程序提示“please input size of the page table:” ,要求输入分配的块数 s_PT,即页表的大小然后根据 size_PT,循环输入初始化页表里的页号和对应的块号用 j 来表示下一个将会被置换的页面存放位置,初始指向页表中最后一个页面,按照(j+1)%size_PT 循环然后程序输出页表情况:页号和对应的块号至此初始化完成程序提示“input the adderss wanted to be translated (0 exit):” ,要求输入要转换的逻辑地址。












