操作系统实验题目及实验报告要求
王桥计科123班实验报告实验课程: 操作系统实验学生姓名: 学号: 专业班级:
2014年6月3日目录一、实验一
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1二、实验二⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯7三、实验三⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯21四、实验四⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯28五、实验五⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯33
南昌大学实验报告---(1)操作系统安装及其接口环境学生姓名: 王桥学号: 专业班级:
计科123班实验类型:
■验证□综合□设计□创新实验日期: 实验成绩:
一、实验目的熟悉Windows1(执行程序)2.模拟PV操作同步机构,且用PV操
作解决生产者消费者问题。模拟PV操作同步机构,且用PV操作解决生产者消费者问题。[提示]:
(1)PV操作同步机构,由P操作原语和V操作原语组成,它们的定义如下: P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成
等待信号量s的状态。
V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s
的进程。
这两条原语是如下的两个过程:
procedurep(vars:semaphore);begins:=s-1;ifs0thenW(s)end{p}procedurev(v
ars:semaphore);
1
知识影响格局,格局决定命运!
begins:=s+1;ifs=0thenR(s)end{V}其中W(s)表示将调用过程的进程置为等待
信号量s的状态;R(s)表示释放一个等待信号量s的进程。
在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可
把上述的semaphore直接改成integer。 (2))生产者消费者问题。
假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共
享缓冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放10件产品。那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序如下:
B:array[0..9]ofproducts;s1,s2:semaphore;IN,out;integer;IN:=0;out:=0;c
obeginprocedureproducer;c:products;beginL1:
produce(c);p(s1);B[IN]:=C;IN:=(IN+1)mod10;v(s2);gotoL1end;procedureco
nsumer;x:products;beginL2:P(s2);x:=B[out];out:=(out+1)mod10;v(s1);consume(x);gotoL2end;coend其中的semaphore和products是预先定义的两个类型,在模拟实现中semaphore用integer或char等代替。 (3))进程控制块PCB。
为了纪录进程执行时的情况,以及进程让出处理器后的状态,断点等
进程名状态等待原因断点信息,每个进程都有一个进程控制块PCB。在模拟实验
中,假设进程控制块的结构如图4-1。其中进程的状态有:运行态、就绪态、等待态和完成态。当进程处于等待态时,在进程控制块PCB中要说明进程等待原因(在模拟实验中进程等待原因为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行结束。 图4-1进程控制块结构(4))处理器的模拟。
计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。为了
模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能。 模拟的一组指令见图4-2,其中每条指令的功能由一个过程来实现。用变量PC
来模拟指令计数器,假设模拟的指令长度为1,每执行一条模拟指令后,PC
2
知识影响格局,格局决定命运!
加1,指出下一条指令地址。使用模拟的指令,可把生产者和消费者进程的程序表示为图4-3的形式。
定义两个一维数组PA[0..4]和SA[0..4],每一个PA[i]存放生产者程序中的一条
模拟指令执行的入口地址;每个SA[i]存放消费者程序中的一条模拟指令执行的入口地址。于是模拟处理器执行一条指令的过程为:取出PC之值,按PA[PC]或SA[PC]得模拟指令执行的入口地址,将PC之值加1,转向由入口地址确定的相应的过程执行。
(5))程序设计本实验中的程序由三部分组成:初始化程序、处理器调度程序、
模拟处理器指令执行程序。
各部分程序的功能及相互间的关系由图4-4至图4-7 指出。
模拟的指令功能P(s)执行P操作原语V(s)执行v操作原语
putB[IN]:=product;IN:=(IN+1)mod10GETX:=B[out];out:=(out+1)mod10produce输入一个字符放入C中consume打印或显示x中的字符GOTOLPC:LNOP空操作图4-2模拟的处理器指令序号生产者程序消费者程序
0produceP(s2)1P(s1)GET2PUTV(s1)3V(s2)consume4goto0goto0图4-3生产者和消费者程序初始化程序:
模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量S1、S2赋初
值,对生产者、消费者进程的PCB初始化。初始化后转向处理器调度程序,其流程如图4-4处理器调度程序:
在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条指令后就有
可能被打断而让出处理器由其他进程运行。故在模拟系统中也类似处理,每当执行一条模拟的指令后,保护当前进程的现场,让它成为非运行状态,由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。处理器调度程序流程见图4-5。
开始初始化信号量S1,S2S1:=10,S2:=0
图4-4初始化流程模拟处理器指令执行程序:按指令计数器PC之值执行指定的
质量,且PC加1指向下一条指令。模拟处理器指令执行的程序流程见图4-6和4-7。
3
知识影响格局,格局决定命运!
另外,为了使得模拟程序有一个结束条件,在图4-6中附加了生产者运行结束的
条件判断,模拟时可以采取人工选择的方法实现。图4-7给出了P(S)和V(S)模拟指令执行过程的流程。其他模拟指令的执行过程已在图4-2中指出。
四、实验报告(1)实验题目。 (2)打印源程序并附上注释。
(3)从键盘上输入一组字符,由生产者每次读入一个字符供消费者输出。运行
模拟程序,打印依次读入的字符和消费者输出的字符。
(4)把生产者和消费者进程中的P操作、V操作都改成空操作指令,观察在两
者不同步的情况下可能出现的与时间有关的错误。打印依次读入的字符和消费者输出的字符。
开始图4-5处理器调度程序流程开始保护现场,PC=图当前4进-6程的断点模P
拟CB处j:=理PC器指令执行开始是开始现行进否否(1)模拟P(S)(2)模拟V(S)有就绪进程?三、实验要S求S-j:1=PA[i]程为生产者?图4-7模拟PV操作的执行是结束j:=SA[i]SS+1随即选择就绪进否否S0S0将现是行进程状态改PC:=i+1是
1、linux操作系统2、Windows操作系统四、主要实验步骤linux操作系统下的
操作步骤:
gedit(编辑程序)gccosemaphore(编译、链接程序)./semaphore(执行程序)
生产者和消费者的代码:
#includeiostreamconstunsignedshortSIZE_OF_BUFFER=5;.std::cerrSucceeds
td::endl;}.g_buffer[in]=ProductID;in=(in+1)%SIZE_OF_BUFFER;std::cerrSucceedstd::endl;.ConsumeID=g_buffer[out];out=(out+1)%SIZE_OF_BUFFER;std::cerrSucceedstd::endl;.std::cerrSucceedstd::endl;}计算并输出下述各种算法在不同内存容量下的命中率。
A.FIFO先进先出的算法B.LRU最近最少使用算法C.LFU最少访问页面算法三、
实验要求1、需写出设计说明;
2、设计实现代码及说明3、运行结果;四、主要实验步骤1、最少使用(LFU)
页面置换算法设计说明该算法主要是将最近时期页面使用最少的页面作为
4
知识影响格局,格局决定命运!
淘汰页。这里通过设立count[32]这个计数数组记录32页的调用次数,通过比较来确定要调出的页面。
但如果没产生缺页就只需对所调页数对应的count值加1即可。 2、最近最久未使用(LRU)页面置换算法设计说明:
这个算法同FCFS算法的不同之处在于,每产生一条随机指令,如果和4个内存
块中的某一个页数相同的话,就要对这4个内存块中的页数重新排序,将每次要置换出去的页数放在mem_volume[3]中,这样,在每次产生缺页的时候,都先将所缺页数写入到该内存块,然后再排序,将其放到mem_volume[0]中去。
3、先进先出(FIFO)算法设计说明:
按照所要求的产生随机指令序列,存放在order[320]这个数组中。
通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即
mem_volume[4]中存放的页面相同,如果相同则不做任何操作,如果不相同,则产生缺页,相应的缺页次数加一,按照fcfs将最先进入内存的页数淘汰,并将该页写到内存中去。重复上面的操作直到完成这320条指令。 f%%\\n,add/10,sum/10);printf(*****************************************
*********\\nreturn0;}*\\nf%%\\n,add/10,sum/10);printf(**************************************************\\nreturn0;}f%%\\n,add/10,sum/10);printf(**************************************************\\nreturn0;}五、实验数据及处理结果六、实验体会或对改进实验的建议这次实验是最后一次实验,代码量比较大,但实现起来都比较容易,因为这三个算法之间总体的思路是不变的,即先判断是否和内存块中的页数相同,如果相同执行相应操作,如果不同,产生缺页,再执行相应操作。但有一个细节问题,要使第一次调入的页数产生缺页,于是将mem_volume[4]中的值都初始化为100(大于32即可),这样第一次调入便会产生缺页。
这个细节虽然在结果中不能够得到体现,但是我想做不管怎样都应该全面的去考
虑问题。总之,这次的操作系统实验使我受益匪浅。
5
因篇幅问题不能全部显示,请点此查看更多更全内容