《操作系统实验题目及实验报告要求.pdf》由会员分享,可在线阅读,更多相关《操作系统实验题目及实验报告要求.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 操作系统实验题目及实验报告要求 Prepared on 21 November 2021 实 验 报 告 实验课程:操作系统实验 学生姓名:王桥 学 号:24 专业班级:计科 123 班 2014 年 6 月 3 日 目 录 一、实验一 1 二、实验二 7 三、实验三 21 四、实验四 28 五、实验五 33 南昌大学实验报告 -(1)操作系统安装及其接口环境 学生姓名:王桥 学 号:24 专业班级:计科123班 实验类型:验证 综合 设计 创新 实验日期:实验成绩:一、实验目的 熟悉 Windows1(执行程序)2模拟 PV 操作同步机构,且用 PV 操作解决生产者消费者问题。模拟 PV
2、操作同步机构,且用 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)end p procedure v(var s:semaphore);begin s:=s+1;if s=0
3、then R(s)end V 其中 W(s)表示将调用过程的进程置为等待信号量s 的状态;R(s)表示释放一个等待信号量 s 的进程。在系统初始化时应把 semaphore 定义为某个类型,为简单起见,在模拟实验中可把上述的 semaphore 直接改成 integer。(2)生产者消费者问题。假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放 10 件产品。那么,用 PV 操作来实现生产者和消费者之间的同步,生产者和消
4、费者两个进程的程序如下:B:array 0.9 of products;s1,s2:semaphore;IN,out;integer;IN:=0;out:=0;cobegin procedure producer;c:products;begin L1:produce(c);p(s1);BIN:=C;IN:=(IN+1)mod 10;v(s2);goto L1 end;procedure consumer;x:products;begin L2:P(s2);x:=Bout;out:=(out+1)mod 10;v(s1);consume(x);goto L2 end;coend 其中的 sem
5、aphore 和 products 是预先定义的两个类型,在模拟实现中semaphore 用integer 或 char 等代替。(3)进程控制块 PCB。为了纪录进程执行时的情况,以及进程让出处理器后的状态,断点等信息,每个进程都有一个进程控制块 PCB。在模拟实验中,假设进程控制块的结构如图4-1。其中进程的状态有:运行态、就绪态、等待态和完成态。当进程处于等待态时,在进程控制块 PCB 中要说明进程等待原因(在模拟实验中进程等待原因为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB 中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行
6、结束。图 4-1 进程控制块结构(4)处理器的模拟。计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。为了模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能。模拟的一组指令见图 4-2,其中每条指令的功能由一个过程来实现。用变量 PC 来模拟“指令计数器”,假设模拟的指令长度为 1,每执行一条模拟指令后,PC 加 1,指出下一条指令地址。使用模拟的指令,可把生产者和消费者进程的程序表示为图 4-3 的形式。定义两个一维数组 PA0.4和 SA0.4,每一个 PAi存放生产者程序中的一条模拟指令执行的入口地址;每个 SAi存放消费者程序中的一条模拟指令执行的入口进
7、程名 状态 等待原因 断点 地址。于是模拟处理器执行一条指令的过程为:取出 PC 之值,按 PAPC 或 SAPC得模拟指令执行的入口地址,将 PC 之值加 1,转向由入口地址确定的相应的过程执行。(5)程序设计 本实验中的程序由三部分组成:初始化程序、处理器调度程序、模拟处理器指令执行程序。各部分程序的功能及相互间的关系由图 4-4 至图 4-7 指出。模拟的指令 功能 P(s)执行 P 操作原语 V(s)执行 v 操作原语 put BIN:=product;IN:=(IN+1)mod 10 GET X:=Bout;out:=(out+1)mod 10 produce 输入一个字符放入 C
8、中 consume 打印或显示 x 中的字符 GOTO L PC:L NOP 空操作 图 4-2 模拟的处理器指令 序号 生产者程序 消费者程序 0 produce P(s2)1 P(s1)GET 2 PUT V(s1)3 V(s2)consume 4 goto 0 goto 0 图 4-3 生产者和消费者程序 初始化程序:模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量 S1、S2 赋初值,对生产者、消费者进程的 PCB 初始化。初始化后转向处理器调度程序,其流程如图 4-4 处理器调度程序:在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条指令后就有可能被打断而让出处理
9、器由其他进程运行。故在模拟系统中也类似处理,每当执行一条模拟的指令后,保护当前进程的现场,让它成为非运行状态,由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。处理器调度程序流程见图 4-5。图 4-4 初始化流程 模拟处理器指令执行程序:按“指令计数器”PC 之值执行指定的质量,且 PC 加 1指向下一条指令。模拟处理器指令执行的程序流程见图 4-6 和 4-7。开始 初始化信号量 S1,S2 S1:=10,S2:=0 生产者和消费者进程的PCB 中状态为就绪,断点为 0 另外,为了使得模拟程序有一个结束条件,在图 4-6 中附加了“生产者运行结束”的条件判断,模拟时可以采取人工选择
10、的方法实现。图 4-7 给出了 P(S)和 V(S)模拟指令执行过程的流程。其他模拟指令的执行过程已在图 4-2 中指出。四、实验报告(1)实验题目。(2)打印源程序并附上注释。(3)从键盘上输入一组字符,由生产者每次读入一个字符供消费者输出。运行模拟程序,打印依次读入的字符和消费者输出的字符。(4)把生产者和消费者进程中的P 操作、V 操作都改成空操作指令,观察在两者不同步的情况下可能出现的与时间有关的错误。打印依次读入的字符和消费者输出的字符。图 4-5 处理器调度程序流程 (1)模拟 P(S)(2)模拟 V(S)图 4-7 模拟 PV 操作的执行 三、实验要求 1、linux 操作系统
11、2、Windows 操作系统 四、主要实验步骤 linux 操作系统下的操作步骤:gedit (编辑程序)gcc o semaphore (编译、链接程序)./semaphore(执行程序)生产者和消费者的代码:#include const unsigned short SIZE_OF_BUFFER=5;.;std:cerr Succeed std:endl;.;g_bufferin=ProductID;in=(in+1)%SIZE_OF_BUFFER;std:cerr Succeed PC 结束 保护现场,PC=当前进程 PCB的断点 有就绪进程 否 是 开始 SS-1 将调用 P(s)过程
12、的进程置为就绪 将调用 P(s)过程的进程置为等待信号量 s的状态 S0 返回 否 是 开始 SS+1 将调用 V(s)过程的进程置为就绪 找一个等待 s 信号量的进程置为就绪态 S0 返回 否 是 P(s)GOTO 空操作 Put GET produce consume V(s)开始 j:=PC 按 j 转向各模拟指令对应的过程 现行进 程为生产者 否 是 j:=SAi j:=PAi PC:=i+1 置现行进程为就绪态 生产者运行结束 置生产者进程为完成态 是 否 图 4-6 模拟处理器指令执行 ConsumeID=g_bufferout;out=(out+1)%SIZE_OF_BUFFER
13、;std:cerr Succeed std:endl;.;std:cerr Succeed std:endl;计算并输出下述各种算法在不同内存容量下的命中率。A.FIFO 先进先出的算法 B.LRU 最近最少使用算法 CLFU 最少访问页面算法 三、实验要求 1、需写出设计说明;2、设计实现代码及说明 3、运行结果;四、主要实验步骤 1、最少使用(LFU)页面置换算法设计说明 该算法主要是将最近时期页面使用最少的页面作为淘汰页。这里通过设立count32这个计数数组记录 32 页的调用次数,通过比较来确定要调出的页面。但如果没产生缺页就只需对所调页数对应的count 值加 1 即可。2、最近最
14、久未使用(LRU)页面置换算法设计说明:这个算法同 FCFS 算法的不同之处在于,每产生一条随机指令,如果和4 个内存块中的某一个页数相同的话,就要对这4 个内存块中的页数重新排序,将每次要置换出去的页数放在 mem_volume3中,这样,在每次产生缺页的时候,都先将所缺页数写入到该内存块,然后再排序,将其放到mem_volume0中去。3、先进先出(FIFO)算法设计说明:按照所要求的产生随机指令序列,存放在 order320这个数组中。通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即mem _volume4中存放的页面相同,如果相同则不做任何操作,如果不相同,则产生缺
15、页,相应的缺页次数加一,按照 fcfs 将最先进入内存的页数淘汰,并将该页写到内存中去。重复上面的操作直到完成这 320 条指令。f%n,add/10,sum/10);printf(*n);return 0;*n);f%n,add/10,sum/10);printf(*n);return 0;f%n,add/10,sum/10);printf(*n);return 0;五、实验数据及处理结果 六、实验体会或对改进实验的建议 这次实验是最后一次实验,代码量比较大,但实现起来都比较容易,因为这三个算法之间总体的思路是不变的,即先判断是否和内存块中的页数相同,如果相同执行相应操作,如果不同,产生缺页,再执行相应操作。但有一个细节问题,要使第一次调入的页数产生缺页,于是将 mem_volume4中的值都初始化为 100(大于 32 即可),这样第一次调入便会产生缺页。这个细节虽然在结果中不能够得到体现,但是我想做不管怎样都应该全面的去考虑问题。总之,这次的操作系统实验使我受益匪浅。