《操作系统实验要求.doc》由会员分享,可在线阅读,更多相关《操作系统实验要求.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验一 银行家算法2一、目的和要求2二、实验内容2三、说明2四、实验总结与体会3实验二 进程同步9一、实验内容9二、实验目的9三、实验题目9四、实验报告12实验三 虚拟存储器16一、实验内容16二、实验目的16三、实验题目16四、实验报告22实验四 磁盘驱动调度23一、实验内容23二、实验目的23三、实验题目23四、实验报告25实验一 银行家算法一、目的和要求 银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。二、实验内容 1设计进程对各类资源最大申请表示及初值确定。 2设
2、定系统提供资源初始状况。 3设定每次某个进程对各类资源的申请表示。 4编制程序,依据银行家算法,决定其申请是否得到满足。三、说明算法设计思路:银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系
3、统便处于不安全状态,本次不能分配给他,请进程等待。1数据结构 假设有n个进程m类资源,则有如下数据结构: MAXn*m n个进程对m类资源的最大需求量AVAILABLEm 系统可用资源数 ALLOCATIONn*m n个进程已经得到m类资源的资源量 NEEDn*m n个进程还需要m类资源的资源量2银行家算法 设进程I提出请求Requestm,则银行家算法按如下规则进行判断。 (1)如果Requestm=NEEDI,m,则转(2);否则,出错。(2)如果Requestm=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-
4、REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISHn=FALSE (2)从进程集合中找到一个满足下述条件的进程,FINISHi=FALSE NEED=WORK如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATIONFINISH=TRUE GO TO 2 (4)如所有的进程Finishn
5、=true,则表示安全;否则系统不安全。 四、实验总结与体会源程序示例:#define n 5#define m 3main()/* void input(int *av,int *al,int *need);*/* int read_req(int *request,int *k);*/* int security(int *av,int *al,int *need);*/ int requestm,Availablem,Allocnm,Neednm; int i,j,k,t=0; input(Available,Alloc,Need); while(1) t=0; if(read_req(
6、request,&k) break; for(i=0;im;i+) if(!(requesti=Needk-1i) printf(nillegal!);t=1;break; if(t)continue; for(i=0;im;i+) if(!(requesti=Availablei) printf(nzuce!);t=1;break; if(t)continue; for(i=0;im;i+) Availablei=Availablei-requesti; Allock-1i=Allock-1i+requesti; Needk-1i=Needk-1i-requesti; if(security
7、(Available,Alloc,Need)printf(ncomplete fengpei!); else for(i=0;im;i+) Availablei=Availablei+requesti; Allock-1i=Allock-1i-requesti; Needk-1i=Needk-1i+requesti; printf(n Cannt complete!); input(int *av,int *al,int *ned) int i,j; printf(ninput Available:n); for(i=0;im;i+) scanf(%d,av+i); printf(ninput
8、 Alloc:); for(i=0;in;i+) for(j=0;jm;j+) scanf(%d,al+i*m+j); printf(ninput Need:); for(i=0;in;i+) for(j=0;jm;j+) scanf(%d,ned+i*m+j);int read_req(int *request,int *k) int i,j=0; printf(ninput process and request:); scanf(%d,k); for(i=0;im;i+) scanf(%d,request+i); if(requesti=0)j+; if(j=3)return 1; el
9、se return 0;int security(int *av,int *al,int *need) int i,j,t,r,workm; char Fn; for(i=0;in;i+) Fi=f; for(i=0;im;i+) worki=(*(av+i); for(i=0;in;i+) for(j=0;jn;j+) if(Fj=t)continue; t=0; for(r=0;rm;r+) if(*(need+j*m+r)=workr) t+; if(t=3) for(r=0;rm;r+) workr=workr+(*(al+j*m+r); Fj=t; break; t=1; for(i
10、=0;in;i+) if(Fi=f)t=0;break; if(t)return 1; else return 0; 实验二 进程同步一、实验内容模拟实现用同步机构避免并发进程执行时可能出现的与时间有关的错误。二、实验目的进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。我们把如干个进程都能进行访问和修改地那些变量成为公共变量。由于进程是并发执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后,所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。一般说,同
11、步机构是由若干条原语同步原语所组成。本实验要求学生模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。三、实验题目模拟PV操作同步机构,且用PV操作解决生产者消费者问题。提示:(1) PV操作同步机构,由P操作原语和V操作原语组成,它们的定义如下:P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信号量s的状态。V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。这两条原语是如下的两个过程:procedure p (var s: semaphore);begin s:=s-1;if s0 then W(s)
12、end pprocedure v (var s: semaphore);begin s: =s+1;if sPC结束保护现场,PC=当前进程PCB的断点有就绪进程?否是图4-5处理器调度程序流程P(s)GOTO空操作PutGETproduceconsumeV(s)开始j:=PC按j转向各模拟指令对应的过程现行进程为生产者?否是j:=SAij:=PAiPC:=i+1置现行进程为就绪态返回生产者运行结束?置生产者进程为完成态是否图 4-6 模拟处理器指令执行开始SS+1将调用V(s)过程的进程置为就绪找一个等待s信号量的进程置为就绪态S0返回否是开始SS-1将调用P(s)过程的进程置为就绪将调用P
13、(s)过程的进程置为等待信号量s的状态S1/2开始驱动调度接受请求继续?结束是是否否图31 程序结构假定某个磁盘组共有200个柱面,由外向里顺序编号(0199),每个柱面上有20个磁道,编号为019,每个磁道分成8个物理记录,编号07。进程访问磁盘的物理地址可以用键盘输入的方法模拟得到。图32是“接收请求”进程的模拟算法。在实际的系统中必须把等待访问磁盘的进程排入等待列队,由于本实验模拟驱动调度,为简单起见,在实验中可免去队列管理部分,故设计程序时可不考虑“进程排入等待队列”的工作。(3)“驱动调度”进程的功能是查“请求I/O”表,当有等待访问磁盘的进程时,按电梯调度算法从中选择一个等待访问者
14、,按该进程指定的磁盘物理地址启动磁盘为其服务。对移动臂磁盘来说,驱动调度分移臂调度和旋转调度。电梯调度算法的调度策略是与移动臂的移动方向和移动臂的当前位子有关的,所以每次启动磁盘时都应登记移动臂方向和当前位子。电梯调度算法是一种简单而实用的驱动调度方法,这种调度策略总是优先选择与当前柱面号相同的访问请求,从这些请求中再选择一个能使旋转距离最短的等待访问者。如果没有与当前柱面号相同的访问请求,则根据移臂方向来选择,每次总是沿臂移动方向选择一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。这种调度策略能使移动臂的移动频率极小,从而提高系统效率。用电梯调度算法实现驱动调
15、度的模拟算法如图33。 开始有请求?输入:进程名物理地址进程排入等待队列登记“请求I/O表返回是否 图 32 “接收请求”模拟算法(4)图31中的初始化工作包括,初始化“请求I/O”表,置当前移臂方向为里移;置当前位置为0号柱面,0号物理记录。程序运行前可假定“请求I/O”表中已经有如干个进程等待访问磁盘。在模拟实验中,当选中一个进程可以访问磁盘时,并不实际地启动磁盘,而用显示:“请求I/O”表;当前移臂方向;当前柱面号,物理记录号来代替图33中的“启动磁盘”这项工作。四、实验报告(1)实验题目。(2)程序中使用的数据结构及其说明。(3)打印一份源程序并附上注释。(4)打印驱动调度进程每次选择
16、访问请求前的“请求I/O”表以及每次选中的进程名、访问的柱面号、物理记录号和当前移臂方向(用up代表里移,down代表外移。打印格式为:“请求I/O”表进程名 柱面号 物理记录号 方向开始查”请求I/O表”否是有等待访问者?有与当前柱面号相同的访问者?否是返回选择能使旋转距离最短的访问者当前移臂方向是向里移?否是有比当前柱面号大的访问请求?有比当前柱面号小的访问请求?否是是置当前移臂方向为向里移置当前移臂方向为向外移从大于当前柱面号的访问请求中选择一个最小者从大于当前柱面号的访问请求中选择一个最小者添加当前位置:柱面号;物理记录号启动磁盘,被选中者退出“请求I/O表”图3-3 电梯调度模拟算法返回