操作系统原理实验报告

上传人:沈*** 文档编号:113214136 上传时间:2022-06-24 格式:DOC 页数:20 大小:478KB
收藏 版权申诉 举报 下载
操作系统原理实验报告_第1页
第1页 / 共20页
操作系统原理实验报告_第2页
第2页 / 共20页
操作系统原理实验报告_第3页
第3页 / 共20页
资源描述:

《操作系统原理实验报告》由会员分享,可在线阅读,更多相关《操作系统原理实验报告(20页珍藏版)》请在装配图网上搜索。

1、操作系统原理实验报告学 院:专 业:班 级:学 号:姓 名:2011-2012学年 第2学期18 / 20目录实验1 进程管理2实验2 进程通信9实验3 存储管理15实验4 文件系统24实验1进程管理一、实验目的1.弄清进程和程序的区别,加深对进程概念的理解.2.了解并发进程的执行过程,进一步认识并发执行的实质.3.掌握解决进程互斥使用资源的方法.二、实验内容1.管道通信使用系统调用pipe建立一个管道,然后使用系统调用fork创建2个子进程p1和p2.这2个子进程分别向管道中写入字符串:Childprocessp1issendingmessage!和Childprocessp2issendi

2、ngmessage!,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上.2.软中断通信使用系统调用fork创建2个子进程p1和p2,在父进程中使用系统调用signal捕捉来自键盘上的软中断信号SIGINT,当捕捉到软中断信号SIGINT后,父进程使用系统调用kill分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息Childprocessp1iskilledbyparent!和Childprocessp2iskilledbyparent!后终止.而父进程等待2个子进程终止后,输出信息Parentprocessiskilled!后终止.三、实验

3、要求1.根据实验内容编写C程序.2.上机调试程序.3.记录并分析程序运行结果.四、程序说明和程序流程图实验1管道通信所涉及的流程图:实验2软中断信号所涉及的流程图:五、程序代码/*expe1_1.c*/#includevoidmaininti,r,p1,p2,fd2;charbuf50,s50;pipe;/*父进程建立管道*/whilep1=fork=-1;/*创建子进程P1,失败时循环*/if/*由子进程P1返回,执行子进程P1*/lockf;/*加锁锁定写入端*/sprintf;printf;write;/*把buf中的50个字符写入管道*/sleep;/*睡眠5秒,让父进程读*/lock

4、f;/*释放管道写入端*/exit;/*关闭P1*/else/*从父进程返回,执行父进程*/whilep2=fork=-1;/*创建子进程P2,失败时循环*/if/*从子进程P2返回,执行子进程P2*/lockf;/*锁定写入端*/sprintf;printf;write;/*把buf中的字符写入管道*/sleep;/*睡眠5秒,让父进程读*/lockf;/*释放管道写入端*/exit;/*关闭P2*/wait;ifr=read=-1printf;elseprintf;wait;ifr=read=-1printf;elseprintf;exit;/*exp1-2.c*/#include#inc

5、lude#includeintp1,p2;voidmainvoidppdo;voidp1do;voidp2do;signal;p1=fork;ifsignal;for;elsep2=fork;ifsignal;for;wait;wait;printf;exit;voidppdokill;kill;voidp1doprintf;exit;voidp2doprintf;exit;六、程序运行结果及分析实验1管道通信运行结果截图实验1管道通信结果分析父进程建立后,创建了子进程P1,P2,然后P1,P2分别向管道中写入字符串Childprocessp1issendingmessage!和Childpr

6、ocessp2issendingmessage!,父进程从管道中读取字符串.实验2软中断通信运行结果截图实验2软中断通信结果分析先预设中断信号SIGINT,再先后创建子进程P1和P2,预设中断信号SIGUSR1,SIGUER2,当我们按下Ctrl+C时,父进程发出中断信号SIGUSR1和SIGUSR2,通知子进程P1和P2,子进程捕捉到信号后分别输出相应的信息后,终止,最后输出Parentprocessiskilled!后终止.实验后思考:通过这次实验,深刻地了解到了管道通信和软中断通信的详细过程,深化了老师课堂上的讲解,对整个过程的把握也更加清晰了.很值得的一次学习经历,做完实验,再画流程图

7、,程序运行的细节熟悉于心,了如指掌.七指导教师评议成绩等级实验2进程通信一、实验目的1.了解进程间通信IPC的三种方式:消息队列、共享内存和信号量.2.掌握使用消息队列进行进程间通信的有关系统调用和编程方法.3.掌握使用共享内存进行进程间通信的有关系统调用和编程方法.二、实验内容1.消息队列使用系统调用msgget、msgsnd、msgrcv和msgctl,用消息队列机制实现客户进程和服务器进程间的通信.客户进程首先建立一个描述符为msgqid的消息队列,接着向服务器进程发送一个消息正文为自己的进程标识pid且类型为1的消息,然后接收来自服务器进程的消息,并在屏幕上显示:Clientrecei

8、vesamessagefromxxxx!,其中xxxx为服务器进程的进程标识.服务器进程首先捕捉软中断信号,若捕捉到时则调用函数cleanup删除消息队列,终止服务器进程.否则重复下列操作:接收所有类型为1的消息,并在屏幕上显示:Serverreceivesamessagefromxxxx!,其中xxxx为客户进程的进程标识;然后服务器进程将客户进程的进程标识作为返回消息的类型,而将自己的进程标识作为消息正文发送给客户进程.2.共享内存使用系统调用shmget、shmat和shmctl,用共享内存机制实现进程间的通信.其中一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据并显示在屏幕

9、上.三、实验要求1.根据实验内容编写C程序.2.上机调试程序.3.记录并分析程序运行结果.四、程序说明和程序流程图实验1消息队列流程图五、程序代码实验1消息队列/*msg_client.c*/#include#include#include#defineMSGKEY75structmsgformlongmtype;charmtext256;mainstructmsgformmsg;intmsgqid,pid,*pint;/*文件主同组用户其他用户rwxrwxrwx*/msgqid=msgget;/*rw-rw-rw-*/pid=getpid;pint=msg.mtext;*pint=pid;m

10、sg.mtype=1;msgsndmsgqid,&msg,sizeof,0;msgrcv;printf;/*msg_server.c*/#include#include#include#defineMSGKEY75structmsgformlongmtype;charmtext256;msg;intmsgqid;maininti,pid,*pint;externcleanup;fori=0;isignal;msgqid=msgget;formsgrcv;pint=msg.mtext;pid=*pint;printf;msg.mtype=pid;*pint=getpid;msgsndmsgqid

11、,&msg,sizeof,0;cleanupmsgctl;exit;实验2共享内存#include#include#include#defineSHMKEY75#defineK1024intshmid;maininti,*pint;char*addr;externchar*shmat;shmid=shmget;addr=shmat;pint=addr;whilefori=0;iprintf;#include#include#include#defineSHMKEY75#defineK1024intshmid;maininti,*pint;char*addr;externchar*shmat;e

12、xterncleanup;fori=0;isinal;shmid=shmget;addr=shmat;printf;pint=addr;fori=0;i*pint+=i;pint=addr;*pint=256;pause;cleanupshmctl;exit;六、程序运行结果及分析实验1消息队列运行结果截图客户端:服务器端:实验1消息队列结果分析服务端程序监听软中断,建立消息队列,循环在队列中接收类型为1的消息,每接收一个消息向队列中增加一个类型为客户进程ID的消息.当发生软中断时,删除消息队列.客户端进程创建和服务端相同的消息队列,并向消息队列中发送类型为1的消息,然后接收类型为客户进程ID

13、的消息.实验后思考:对消息队列的运行情况有所了解,但关于内存共享部分尚需仔细研究.七指导教师评议成绩等级实验3存储管理一、实验目的1.了解虚拟存储管理技术的原理与特点.2.掌握请求页式存储管理的页面置换算法.二、实验内容1.通过随机数产生一个指令序列,共320条指令.指令的地址按下述原则生成:50%的指令是顺序执行的;25%的指令均匀分布在前地址部分;25%的指令均匀分布在后地址部分.实现方法:在0,319的指令地址中随机选取一起点s;执行指令s;顺序执行一条指令,即执行地址为s+1的指令;在前地址0,s中随机选取一条地址为m的指令执行;顺序执行一条指令,即执行地址为m+1的指令;在后地址m+

14、2,319中随机选取一条指令s;重复,直到执行320次指令.2.将指令序列变换为页地址流,设:页面大小为1K;用户内存容量为432页面;用户虚存容量为32K.若10条指令为1页,则320条指令在虚存中的存放方式为:第0页第0条第9条指令;第1页第10条第19条指令; 第31页第310条第319条指令.3.计算并输出下列算法在不同内存容量下的命中率.FIFOFirstInFirstOutPageReplacementAlgorithmLRULeastRecentlyUsedPageReplacementAlgorithm三、实验要求1.根据实验内容编写C程序.2.上机调试程序.3.记录并分析程序

15、运行结果.四、程序说明和程序流程图程序说明为:1.通过随机数产生一个指令序列,共320条指令.指令的地址按下述原则生成:50%的指令是顺序执行的;25%的指令均匀分布在前地址部分;25%的指令均匀分布在后地址部分.实现方法:在0,319的指令地址中随机选取一起点s;执行指令s;顺序执行一条指令,即执行地址为s+1的指令;在前地址0,s中随机选取一条地址为m的指令执行;顺序执行一条指令,即执行地址为m+1的指令;在后地址m+2,319中随机选取一条指令s;重复,直到执行320次指令.2.将指令序列变换为页地址流,设:页面大小为1K;用户内存容量为432页面;用户虚存容量为32K.若10条指令为1

16、页,则320条指令在虚存中的存放方式为:第0页第0条第9条指令;第1页第10条第19条指令; 第31页第310条第319条指令.3.计算并输出下列算法在不同内存容量下的命中率.FIFOFirstInFirstOutPageReplacementAlgorithmLRULeastRecentlyUsedPageReplacementAlgorithm流程图:五、程序代码#include#include/#include/*Windows环境,getpid原型在process.h中*/#defineTRUE1#defineFALSE0#defineINVALID-1#defineNULL0#def

17、inetotal_instruction320/*指令条数*/#definetotal_vp32/*虚页数*/#defineclear_period50/*NRU清0周期*/typedefstruct/*页表结构*/intpn,pfn,counter,time;/*counter,time*/pl_type;pl_typepltotal_vp;/*页表*/structpfc_struct/*存储页面表*/intpn,pfn;structpfc_struct*next;typedefstructpfc_structpfc_type;pfc_typepfctotal_vp,*freepf_head

18、,*busypf_head,*busypf_tail;intdiseffect,atotal_instruction;/*缺页次数,指令流*/intpagetotal_instruction,offsettotal_instruction;voidinitialize;voidfifo;voidlru;voidopt;voidlfu;voidnur;voidmainints,i,j;srandgetpid*10;/*进程标识作为随机数种子*/s=319*rand/2147483647;/*0319*/s=319*rand/32767;/*0319*/fori=0;iai=s;/*s=0319*

19、/ai+1=ai+1;/*s+1*/ai+2=ai*rand/2147483647;/*m=0s*/ai+2=ai*rand/32767;/*m=0s*/ai+3=ai+2+1;/*m+1*/s=rand*/2147483147+ai+2+2;/*m+2319*/s=rand*/32767+ai+2+2;/*m+2319*/fori=0;ipagei=ai/10;offseti=ai%10;fori=4;i/*用户内存工作区4-32个页面*/printf;fifo;lru;opt;lfu;nur;printf;voidinitializeinti;diseffect=0;fori=0;ipli

20、.pn=i;pli.pfn=INVALID;pli.counter=0;pli.time=-1;fori=1;ipfci-1.next=&pfci;pfci-1.pfn=i-1;pfctotal_pf-1.next=NULL;pfctotal_pf-1.pfn=total_pf-1;freepf_head=&pfc0;voidfifointi,j;pfc_type*p;initialize;busypf_head=busypf_tail=NULL;/*置忙页面队列为空*/fori=0;iif/*页失效*/diseffect+;/*失效次数加1*/if/*无空闲页面*/p=busypf_head

21、-next;plbusypf_head-pn.pfn=INVALID;freepf_head=busypf_head;/*释放忙队列中的第1个页面,即出队*/freepf_head-next=NULL;busypf_head=p;/*插入到空闲页面链表*/p=freepf_head-next;freepf_head-next=NULL;freepf_head-pn=pagei;plpagei.pfn=freepf_head-pfn;if/*忙队列为空时,入队*/busypf_head=busypf_tail=freepf_head;else/*忙队列为非空时,入队*/busypf_tail-n

22、ext=freepf_head;busypf_tail=freepf_head;freepf_head=p;printfFIFO:%6.4f,1-diseffect/320;voidlruintmin,minj,i,j,present_time;initialize;present_time=0;fori=0;iifdiseffect+;ifmin=32767;forj=0;j/*查找内存中time最小的页面*/ifplj.time&plj.pfn!=INVALIDmin=plj.time;minj=j;freepf_head=&pfcplminj.pfn;/*插入空闲链表*/plminj.p

23、fn=INVALID;plminj.time=-1;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn;plpagei.time=present_time;freepf_head=freepf_head-next;elseplpagei.time=present_time;present_time+;printfLRU:%6.4f,1-diseffect/320;voidoptinti,j,max,maxpage,d,disttotal_vp;initialize;fori=0;iifdiseffect+;ifforj=0;jifdistj=32

24、767;elsedistj=0;/*页在内存中距离非0,不在内存距离为0*/d=1;/*计算内存中页面与当前访问页面的距离*/forj=i+1;jifdistpagej=d;d+;max=-1;/*淘汰距离最远的页*/forj=0;jifmaxmax=distj;maxpage=j;freepf_head=&pfcplmaxpage.pfn;freepf_head-next=NULL;plmaxpage.pfn=INVALID;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;printfOPT:%6.4f,1-diseffect

25、/320;voidlfuinti,j,min,minpage;initialize;fori=0;iifdiseffect+;ifmin=32767;forj=0;jifplj.counter&plj.pfn!=INVALIDmin=plj.counter;minpage=j;plj.counter=0;freepf_head=&pfcplminpage.pfn;plminpage.pfn=INVALID;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;elseplpagei.coun

26、ter+;printfLFU:%6.4f,1-diseffect/320;voidnurinti,j,dp,cont_flag,old_dp;initialize;dp=0;fori=0;iifdiseffect+;ifcont_flag=TRUE;old_dp=dp;whileifcont_flag=FALSE;elsedp+;ifdp=0;ifforj=0;jplj.counter=0;freepf_head=&pfcpldp.pfn;pldp.pfn=INVALID;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn;freepf_head

27、=freepf_head-next;elseplpagei.counter=1;ifforj=0;jplj.counter=0;printfNUR:%6.4f,1-diseffect/320;六、程序运行结果及分析实验运行结果截图:9实验结果分析:先随机产生320条指令,然后转化为页地址流,分别执行FIFO,LRU,OPT,LFU,NUR算法,计算出不同算法的命中率,结果显示如上图.实验后思考:把单单从课堂上学到的知识,更加熟练的应用出来,体会到了计算机学科操作系统与计算机组成之间的互相联系.七指导教师评议成绩等级实验4文件系统一、实验目的1.了解文件系统的功能和内部实现.2.熟悉有关文件系统

28、的系统调用.3.掌握简单文件系统的设计方法.二、实验内容1.使用有关文件系统的系统调用creat、open、close、read和write将文件file1.c和file2.c合并为file3.c.2.为Linux系统设计一个二级目录结构的文件系统,要求具有下列功能:向用户提供以下命令:login用户登录dir列文件目录create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件文件可进行读写保护.列文件目录时须列出文件名、文件属性、文件长度和物理地址.三、实验要求1.根据实验内容编写C程序.2.上机调试程序.3.记录并分析程序运行结果.四、程序说明

29、和程序流程图程序说明:首先先打开文件file1.c,file2.c,再创建文件file3.c,从前面的两个文件中读出相应的内容,写如第三个文件中,之后再关闭三个文件.流程图:五、程序代码#includevoidmainintargc;char*argv;intfd1,fd2,fd3,n;charbuf512,ch=n;fd1=open;/*打开argv1对应的文件,返回标识符fd1*/fd2=open;/*打开argv2对应的文件,返回标识符fd2*/fd3=creat;/*创建argv3对应的文件,返回标识符fd3*/whilen=read0write;write;whilen=read0write;close;close;close;六、程序运行结果及分析运行结果截图:图4-1file1.c文件中的内容图4-2file2.c文件中的内容图4-3运行后file3.c文件中的内容实验结果分析:首先先打开文件file1.c,file2.c,再创建文件file3.c,从前面的两个文件中读出相应的内容,写如第三个文件中,之后再关闭三个文件,最终file3.c文件中出现图4-3内容.实验后思考:通过本次实验,清楚地了解了Linu文件系统的部分指令.七指导教师评议成绩等级

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!