




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东大学大二下学期操作系统实验报告操作系统实验报告计算机科学与技术学院计算机科学与技术专业2021级X班目录一、进程控制实验31.1实验目的31.2示例实验31.2.1实验内容31.3独立实验41.3.1实验内容41.3.2实验步骤41.3.3实验演示结果71.3.4实验代码7二、进程调度算法实验92.1实验目的92.2示例实验102.2.1实验内容102.2.2实验演示结果102.3独立实验112.3.1实验内容112.3.2实验步骤122.3.3实验演示结果142.3.4实验代码14二、进程同步实验163.1实验目的163.2示例实验163.2.1实验内容163.2.2实验演示结果173.3独立实验173.3.1实验内容173.3.2实验步骤183.3.3实验演示结果213.3.4实验代码21三、内存页面置换算法实验314.1实验目的314.2示例实验314.2.1实验内容314.2.2实验演示结果324.3独立实验324.3.1实验内容324.3.2实验步骤334.3.3实验演示结果354.3.4实验代码37四、磁盘移臂调度算法实验485.1实验目的485.2示例实验495.2.1实验内容495.2.2实验演示结果505.3独立实验505.3.1实验内容505.3.2实验步骤515.3.3实验演示结果545.3.4实验代码54一、进程控制实验1.1实验目的加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。
1.2示例实验1.2.1实验内容以下实验示例程序应实现一个类似shell子命令的功能,它可以从执行程序中启动另一个新的子进程并执行一个新的命令和其并发执行。1.2.2实验演示结果1.3独立实验1.3.1实验内容参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表。
1.3.2实验步骤
1.3.2.1算法设计通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前目录文件列表功能,执行execve方法后死亡。While
在死循环里无限进行当前操作。即达到父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表的要求。
1.3.2.2开发调试过程打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为pctrl.c的C语言程序;
再建立以下名为pctrl.h的C语言头文件;
建立项目管理文件Makefile;
输入make命令编译连接生成可执行的pctl程序;
执行pctl程序;
再次执行带有子进程指定执行命令的pctl程序。
1.3.2.3思考与分析1.反映的进程的特征和功能,在真实的操作系统中是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。对于进程概念和并发概念有哪些新的理解和认识?子进程是如何创建和执行新程序的?答:进程是一个可并发执行的程序在某数据集上的一次运行,是程序的一次运行过程。而程序只是进程的一个组成部分,进程是程序的执行过程。程序是静态的指令集合,而进程是动态的过程实体,是动态的产生、发展和消失。
此外所谓的进程并发执行是在宏观上并发,而在微观上交替执行。每个进程都用一个唯一的整数形式的进程标识符来标识,通过fork系统调用,可创建新进程。新进程通过复制原来进程的地址空间而成。这种机制允许父子进程方便的进行通信。
系统调用fork,得到的子进程实际上是父进程的克隆体,要执行不同的新程序要使用系统调用exec,以用新程序来取代进程的内存空间。其功能是根据参数指定的文件名找到程序文件,把它装入内存,覆盖原来进程的映像,形成一个不同于父进程的子进程。除了进程映像被更换之外,新进程的PID及其他PCB属性均保持不变,实际上是一个新进程“借壳”原来子进程开始运行。父进程可通过系统调用waitpid来把自己移出就绪队列来等待子进程的终止。
2.信号的机理是什么?怎样利用信号实现进程控制?每个信号对应一个正整数常量,代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知某进程发生了某异常事件。每个进程运行时,要通过信号机制来检查是否有信号到达。若有,中断正在执行的程序,转向该信号相对应的处理程序,已完成对事件的处理;
处理结束后再返回到原来的断点继续执行。
1.3.3实验演示结果1.3.4实验代码pctl.c文件:
includesys/types.hincludeunistd.hincludestdio.hincludestdio.hincludesignal.hdefineSIGINT2includestdio.hincludesys/types.hincludesys/shm.hincludesys/msg.hinclude“ipc.h“intget_ipc_id{FILE*pf;inti,j;charline,colum;if)==NULL){perror;exit;}fgets;while){i=j=0;fgets;whilei++;whilecolum=line;colum='\0';if。=key)continue;j=0;whilei++;whilecolum=line;colum='\0';i=atoi;fclose;returni;}fclose;return-1;}intdown{structsembufbuf;buf.sem_op=-1;buf.sem_num=0;buf.sem_flg=SEM_UNDO;if)0){perror;exit;}returnEXIT_SUCCESS;}intup{structsembufbuf;buf.sem_op=1;buf.sem_num=0;buf.sem_flg=SEM_UNDO;if)0){perror;exit;}returnEXIT_SUCCESS;}intset_sem{intsem_id;Sem_unssem_arg;//测试由sem_key标识的信号灯数组是否已经建立if)0){//semget新建一个信号灯,其标号返回到sem_idif)0){perror;exit;}//设置信号灯的初值sem_arg.val=sem_val;if0){perror;exit;}}returnsem_id;}char*set_shm{inti,shm_id;char*shm_buf;//测试由shm_key标识的共享内存区是否已经建立if)0){//shmget新建一个长度为shm_num字节的共享内存,其标号返回到shm_idif)0){perror;exit;}//shmat将由shm_id标识的共享内存附加给指针shm_bufifshmat)0){perror;exit;}forshm_buf=0;//初始为0}//shm_key标识的共享内存区已经建立,将由shm_id标识的共享内存附加给指针shm_bufifshmat)0){perror;exit;}returnshm_buf;}intset_msq{intmsq_id;//测试由msq_key标识的消息队列是否已经建立if)0){//msgget新建一个消息队列,其标号返回到msq_idif)0){perror;exit;}}returnmsq_id;}producer.c文件:
include“ipc.h“intmain{intrate;//可在在命令行第一参数指定一个进程睡眠秒数,以调解进程执行速度ifrate=atoi;elserate=3;//不指定为3秒//共享内存使用的变量buff_key=101;//缓冲区任给的键值buff_num=3;//缓冲区任给的长度cget_key=103;//消费者取产品指针的键值cget_num=1;//指针数shm_flg=IPC_CREAT
0644;//共享内存读写权限//获取缓冲区使用的共享内存,buff_ptr指向缓冲区首地址buff_ptr=set_shm;//获取消费者取产品指针,cget_ptr指向索引地址cget_ptr=set_shm;//信号量使用的变量prod_key=201;//生产者同步信号灯键值cmtx_key=203;//生产者互斥信号灯键值c_PG_key=301;//消费者同步信号灯键值c_TP_key=302;//消费者互斥信号灯键值c_TG_key=303;//消费者互斥信号灯键值sem_flg=IPC_CREAT
0644;//信号灯操作权限//生产者同步信号灯初值设为缓冲区最大可用量sem_val=1;//获取生产者同步信号灯,引用标识存prod_semprod_sem=set_sem;//消费者初始无产品可取,同步信号灯初值设为0sem_val=0;//获取消费者同步信号灯,引用标识存cons_semc_PG_sem=set_sem;c_TP_sem=set_sem;c_TG_sem=set_sem;//消费者互斥信号灯初值为1sem_val=1;//获取消费者互斥信号灯,引用标识存pmtx_semcmtx_sem=set_sem;intpid1,pid2;pid1=fork;if{//循环执行模拟消费者不断取产品while{//如果无产品消费者阻塞down;//如果另一消费者正在取产品,本消费者阻塞down;//用读一字符的形式模拟消费者取产品,报告本进程号和获取的字符及读取的位置sleep;printf,buff_ptr,buff_ptr);//唤醒阻塞的消费者up;//唤醒阻塞的生产者up;}}else{pid2=fork;if{//循环执行模拟消费者不断取产品while{//如果无产品消费者阻塞down;//如果另一消费者正在取产品,本消费者阻塞down;//用读一字符的形式模拟消费者取产品,报告本进程号和获取的字符及读取的位置sleep;printf,buff_ptr,buff_ptr);//唤醒阻塞的消费者up;//唤醒阻塞的生产者up;}}else{//循环执行模拟消费者不断取产品while{//如果无产品消费者阻塞down;//如果另一消费者正在取产品,本消费者阻塞down;//用读一字符的形式模拟消费者取产品,报告本进程号和获取的字符及读取的位置sleep;printf,buff_ptr,buff_ptr);//唤醒阻塞的消费者up;//唤醒阻塞的生产者up;}}}returnEXIT_SUCCESS;}三、内存页面置换算法实验4.1实验目的加深对于存储管理的了解,掌握虚拟存储器的实现原理;
观察和了解重要的页面置换算法和置换过程。练习模拟算法的编程技巧,锻炼分析试验数据的能力。
4.2示例实验4.2.1实验内容1.示例实验程序中模拟两种置换算法:LRU算法和FIFO算法2.能对两种算法给定任意序列不同的页面引用串和任意帧实内存块数的组合测试,显示页置换的过程。
3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数和缺页率。比较两种置换算法在给定条件下的优劣。
4.为了能方便的扩充页面置换算法,更好的描述置换过程,示例实验程采用了C++语言用Replace类描述了置换算法及其属性。
4.2.2实验演示结果4.3独立实验4.3.1实验内容请在以上示例实验程序中补充“增强二次机会”等置换算法的模拟程序。输入不同的内存页面引用串和实存帧数,观察并分析其页面置换效果和性能,并将其与LRU和FIFO算法进行比较。改进以上示例实验程序,使之能够随机的产生内存页面引用串,以便能动态的观测各种置换算法的性能。
4.3.2实验步骤4.3.2.1算法设计Clock算法:
FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:检查最老页面的R位,如果R位为0,那么这个页面既老又没有被使用过,可以立刻被置换掉,如果R位为1,就将R位清0,并将这个页面重新插入链表尾端,然后继续搜索。第二次机会算法是寻找一个最近时间间隔内未被访问过的页面,如果所有的页面都被访问过了,这个算法就是纯粹的FIFO算法。
EClock算法:
需将内存中的页面按访问位A和修改位M分为4类:第一类未被访问,又未被修改,是最佳替换页第二类未被访问,但被修改过,次佳替换页第三类被访问过,但未被修改,可能再被访问第四类以访问且被修改,可能再被访问程序首先查找第一类页面,如果有则替换,如果没有则查找第二类页面;
置页面的访问位为0,如果有则替换,如果没有则返回重新查找第一类页面;
如果有则替换,如果没有则查找第二类页面,则一定存在。该算法适用于某些页面经常被修改的场合。
LFU算法:
即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。
MFU算法:
与LFU算法相反,为最经常使用页置换算法。认为引用次数最小的页以后可能会经常使用。
4.3.2.2开发调试过程建立vmrp.cc程序,将代码写到程序中;
再建立名为vmrp.h的C语言头文件;
建立以下项目管理文件Makefile;
输入make命令编译连接生成可执行的vmrp程序;
执行程序。
4.3.2.3思考与分析4.3.3实验演示结果4.3.4实验代码vmrp.cc文件:
includeiostreamincludeiostreamincludemalloc.hclassReplace{public:Replace;~Replace;voidInitSpace;//初始化页号记录voidReport;//报告算法执行情况voidFifo;//先进先出算法voidLru;//最近最旧未用算法voidClock;//时钟置换算法voidEclock;//增强二次机会置换算法voidLfu;//最不经常使用置换算法voidMfu;//最经常使用置换算法private:int*ReferencePage;//存放要访问到的页号int*EliminatePage;//存放淘汰页号int*PageFrames;//存放当前正在实存中的页号intPageNumber;//访问页数intFrameNumber;//实存帧数intFaultNumber;//失败页数};四、磁盘移臂调度算法实验5.1实验目的加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性;
掌握几种重要的磁盘移臂调度算法,练习模拟算法的编程技巧,锻炼研究分析试验数据的能力。
5.2示例实验5.2.1实验内容1.示例实验程序中模拟两种磁盘移臂调度算法:SSTF算法和SCAN算法。
2.能对两种算法给定任意序列不同的磁盘请求序列,显示响应磁盘请求的过程。
3.能统计和报告不同算法情况下响应请求的顺序、移臂的总量。比较两种算法在给定条件下的优劣。
4.为了能方便的扩充磁盘移臂调度算法,更好的描述磁盘移臂调度过程,示例实验程序采用了C++语言用DiskArm类描述了磁盘移臂调度算法及其属性。
5.2.2实验演示结果5.3独立实验5.3.1实验内容请在以上示例实验程序中补充SCAN,C-SCAN,LOOK磁盘移臂调度算法的模拟程序。输入不同的磁盘柱面请求序列,观察和分析其调度效果和性能,并将其与FCFS和SSTF算法进行比较。改进以上示例实验程序,使之能够随机的产生磁盘柱面请求序列,以便能动态的观测各种调度算法的性能。
5.3.2实验步骤5.3.2.1算法设计扫描算法:
磁臂从磁盘的一端向另一端移动,同时当磁头移过每个柱面时,处理位于该柱面上的服务请求。当到达另一端时,磁头改变方向,处理继续。磁头在磁盘上来回扫描。有时被称为电梯算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。
如在本例中,开始时,在53号柱面执行操作的读写磁头的移动臂方向是由里向外,趋向37号柱面的位置,因此,当访问53号柱面的操作结束后,沿臂移动方向最近的柱面是37号柱面。所以应先为37号柱面的访问者服务,然后是为14号柱面访问者服务。在柱面0时,磁头会调转方向,朝磁盘的另一端移动,并处理柱面65、67、98、122、124、183.循环扫描算法:
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
由于本例中已假定读写的当前位置在53号柱面,从53号柱面继续向外扫描,依次为37、14、0各柱面的访问者服务,此时移动臂已经是最外的柱面,于是立即返回到199号柱面,重新扫描,依次为183、124、122、98、67、65号柱面的访问者服务。
LOOK算法:
LOOK算法是SCAN算法的一种改进。对LOOK算法而言磁头同样在最内圈和最外圈磁道之间往返移动。但LOOK算法发现所移动的方向不再有请求时立即改变移动方向而SCAN算法则需移动到最外圈或最内圈时才改变移
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川鑫耀产城融合产业投资发展集团有限公司2024年12月对外公开招聘管理人员及专业工作人员笔试参考题库附带答案详解
- 供应链物流配送优化指南
- 采购供应商管理与成本分析表
- 浙江国企招聘2024湖州长兴交投集团及下属子公司招聘3人笔试参考题库附带答案详解
- 苏州江苏苏州大学科研助理岗位招聘9人笔试历年参考题库附带答案详解
- 2022年11月监理工程师考试《建设工程合同管理》真题及答案
- 厄贝沙坦氢氯噻嗪联合美托洛尔治疗对老年高血压患者血压变异性及心肾功能的影响
- 肝癌晚期患者的疼痛控制与临终关怀护理体会
- 旅游学概论双语
- 果茶小摊创业计划书
- 劳务派遣劳务外包项目方案投标文件(技术方案)
- 值班值宿巡查、检查记录;学校安全检查记录
- 云南省教育科学规划课题开题报告 - 云南省教育科学研究院
- 专题 勾股定理与特殊角
- 汽车坡道脚手架方案
- 03J111-1轻钢龙骨内隔墙
- 法语冠词总结
- 堆垛机速度计算表
- 煤矿用80开关(QBZ80、120、200)
- 《并购专题》PPT课件.ppt
- 大一高数试题及答案(共16页)
评论
0/150
提交评论