ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:152.16KB ,
资源ID:7924182      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7924182.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验报告.docx

1、操作系统实验报告实验一题目,熟悉Linux系统的基本操作和开发环境目的,熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。要求 熟练掌握Linux基本文件命令 ;掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程 ;认真做好预习,书写预习报告 ;实验完成后要认真总结、完成实验报告。通过实验,掌握Linux的命令及其含义 ;启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)在Linux环境下编制、调试源程序的实际过程(每

2、一步的具体说明 )。1.编码,打开文本编辑器,编辑源代码。2.编译,在终端用CD命令改变工作目录,使用gcc命令编译写好的C语言源代码命令如下:gcc -o test.c test.out3.运行编译好的程序,在终端输入指令运行程序,指令如下:./test.out4.根据运行结果对程序进行调试。实验二题目,模拟进程状态转换及其PCB的变化 目的,自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容 、组织的变化,理解进程与其PCB间的一一对应关系。 要求 ;设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序;独立设计、编写、调试程序

3、;程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB组织的变化。进程的状态模型(三状态、五状态、七状态或其它)可自行选择代码书写要规范,要适当地加入注释;鼓励在实验中加入新的观点或想法,并加以实现;认真进行预习,完成预习报告;实验完成后,要认真总结,完成实验报告。程序流程图;使用的数据结构及其说明;程序源代码、文档注释及文字说明;/ process.cpp : 定义控制台应用程序的入口点。/#include stdafx.hint ReadyQ10;int Rstart = 0;int Rend = 0;int BlockedQ10;int Bstart = 0;int Bend

4、 = 0;int Running = 0;/入ready队列int InRQ(int id) ReadyQRend = id; Rend = (Rend + 1) % 10; return 0;/出ready队列int OutRQ() int i = Rstart; Rstart = (Rstart + 1) % 10; return ReadyQi;/入block队列int InBQ(int id) BlockedQBend = id; Bend = (Bend + 1) % 10; return 0;/出block队列int OutBQ() int i = Bstart; Bstart =

5、 (Bstart + 1) % 10; return BlockedQi;/调度发生int Dispatch() InRQ(Running); Running = OutRQ(); return 0;/超时发生int TimeOut() InRQ(Running); Running = OutRQ(); return 0;/等待事件int EventWait() InBQ(Running); Running = OutRQ(); return 0;/发生事件int EventOccurs() InRQ(OutBQ(); return 0;/输出int OutPut() int i = 0; p

6、rintf(Running: %d n, Running); printf(Ready Queue:); for (i = Rstart; i != Rend; i = (i + 1) % 10) printf(%d, ReadyQi); printf(nBlocked Queue:); for (i = Bstart; i != Bend; i = (i + 1) % 10) printf(%d, BlockedQi); printf(n); return 0;int _tmain(int argc, _TCHAR* argv) InRQ(1); InRQ(2); InRQ(3); InRQ

7、(4); while (1) switch (getchar() case d: Dispatch(); break; case t: TimeOut(); break; case w: EventWait(); break; case o: EventOccurs(); break; default:break; OutPut(); return 0;运行结果及其说明;程序使用说明。输入d:调度输入t:超时输入w:等待输入o:发生实验四题目进程的管道通信目的加深对进程概念的理解,明确进程和程序的区别;学习进程创建的过程,进一步认识并发执行的实质;分析进程争用资源的现象,学习解决进程互斥的方法

8、;学习解决进程同步的方法;掌握Linux系统进程间通过管道通信的具体实现方法。要求这是一个设计型实验,要求自行、独立编制程序;两个子进程要并发执行;实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。 使用系统调用lockf(fd1,1,0)实现对管道的加锁操作,用lockf(fd1,0,0)解除对管道的锁定;实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。修改后的程序流程图调试正确的源程序#include #include #include #include #include #incl

9、ude #include #include int main()int fd2;int p1,p2;pipe(fd);while(p1=fork()=-1)printf( p1 fork error);while(p2=fork()=-1)printf( p2 fork error);printf(hello world:%d,%dn,p1,p2);if(p1=0&p2!=0)char s1=s111;lockf(fd1,1,0);write(fd1,s1,10);sleep(3);printf(p1 write:%d,%dn,p1,p2);lockf(fd1,0,0);exit (0);if

10、(p2=0&p1!=0)char s1=s222;lockf(fd1,1,0);write(fd1,s1,10);sleep(3);printf(p2 write:%d,%dn,p1,p2);lockf(fd1,0,0);exit (0);wait(0);if(p1!=0&p2!=0)char s210=;char s310=;lockf(fd0,1,0);if(read(fd0,s2,10)=-1)printf(read error);if(read(fd0,s3,10)=-1)printf(read error);sleep(3);lockf(fd0,0,0);printf(%sn%sn,

11、s2,s3);printf(ppp read:%d,%dn,p1,p2);return 0;运行结果及说明回答问题:进程间的互斥表现在哪里?进程占用公用资源时会产生互斥。进程间的同步表现在哪里?一个进程要等待另一个进程操作结束。你的程序采用什么方法实现上述关系?加锁机制。实验五题目,页面置换算法目的,进一步理解父子进程之间的关系 理解内存页面调度的机理 掌握页面置换算法的实现方法 通过实验比较不同调度算法的优劣 培养综合运用所学知识的能力 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺

12、点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。 内容,要求 这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序 程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series中,作为内存页面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。要求: 每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。设缺页的次数为diseffect。总的

13、页面访问次数为total_instruction。 缺页率 = disaffect/total_instruction 命中率 = 1- disaffect/total_instruction 将为进程分配的内存页面数mframe作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。 程序流程图 程序源代码、文档注释及文字说明 #include #include #include #include #include #include #include #include #define total 18#define frame_num 3struct one_frame i

14、nt page_no; char flag;/T琛闈炵锛孎琛绌?;struct one_frame M_Frameframe_num; int diseffact=0;int InFrame(int n) int i=0; for(i=0;iframe_num;i+) if(M_Framei.page_no=n&M_Framei.flag=T) return 1; / printf(test inframe,n=%d,page_no=%dn,n,M_Framei.page_no); return 0;void ClearFrame() int i=0; for(i=0;iframe_num;i

15、+) M_Framei.flag=F; void PrintFrame() int i=0; printf(frame:); for(i=0;iframe_num;i+) printf(%d,M_Framei.page_no); putchar(n);void FIFO(int n) int i=0; if(InFrame(n)=1) return; else diseffact+; for(i=0;iframe_num;i+) if(M_Framei.flag!=T) M_Framei.flag=T; M_Framei.page_no=n; /printf(test add,n=%d,pag

16、e_no=%dn,n,M_Framei.page_no); return; for(i=1;iframe_num;i+) M_Framei-1.page_no=M_Framei.page_no; M_Framei-1.page_no=n; return; void LRU(int n) int i=0; if(InFrame(n)=1) for(i=0;iframe_num;i+) if(M_Framei.page_no=n) break; /printf(test add,n=%d,page_no=%dn,n,M_Framei.page_no); else for(;iframe_num-1

17、;i+) /printf(test add,n=%d,page_no=%dn,n,M_Framei.page_no); if(M_Framei+1.flag=T) M_Framei.page_no=M_Framei+1.page_no; else break; M_Framei.page_no=n; return; else diseffact+; for(i=0;iframe_num;i+) if(M_Framei.flag!=T) M_Framei.flag=T; M_Framei.page_no=n; /printf(test add,n=%d,page_no=%dn,n,M_Frame

18、i.page_no); return; for(i=1;iframe_num;i+) M_Framei-1.page_no=M_Framei.page_no; M_Framei-1.page_no=n; return; int main() /鍒濆鍖栧唴瀛? int i=0; int Access_Seriestotal; srand(unsigned)time(NULL); for(i=0;itotal;i+) Access_Seriesi=rand()%6+1; int p1=0; while(p1=fork()=-1) printf( p1 fork error); if(p1=0) p

19、rintf(P1 runn); /娓呯缂撳瓨 ClearFrame(); int i=0; for(i=0;itotal;i+) int n=Access_Seriesi; / printf(P1:n%d= %d ,dis=%dn,i,n,diseffact); FIFO(n); PrintFrame(); /printf(P1 over diseffect=%dn,diseffact); else int p2=0; while(p2=fork()=-1) printf( p2 fork error); if(p2=0) printf(P2 runn); /娓呯缂撳瓨 ClearFrame(

20、); int i=0; for(i=0;itotal;i+) int n=Access_Seriesi; printf(P2:n%d= %d ,dis=%dn,i,n,diseffact); LRU(n); PrintFrame(); printf(P2 over diseffect=%dn,diseffact); else wait(0); printf(main overn); 运行结果及其说明 回答以下问题: 父进程空间与子进程间的关系。 父进程创建子进程1,子进程1执行,子进程1执行同时父进程执行并创建子进程2,子进程2执行,、父进程等待子进程,程序结束。通过完成实验,根据你的体会,阐

21、述虚拟存储器的原理。 虚拟存储器可以分为三类:页式、段式和段页式。本实验我们主要学习页式虚拟存储器。 在页式虚拟存储器中通过把主存空间和程序空间都机械等分成固定大小的页(页面大小随机器而定,一般为4kB到4MB),按页顺序编号,用相应的映像表机构来指明该程序的某页是否已经装入主存。若已经装入主存,则应同时指明其在主存中所处的位置;如果未装入主存,则去辅存中调页,并建立起程序空间和实存空间的地址映像关系。这样,程序执行时通过查映像表将程序地址(虚拟地址)变换成实际主存地址(物理地址)再访问主存。 写出FIFO算法中出现Belady现象的内存页面访问序列 假如一个作业的页面走向为4、3、2、1、4

22、、3、5、4、3、2、1、5,当分配给该作业的物理块数M分别为3和4时,试计算在访问过程中所发生的缺页次数和缺页率,并比较所得结果。 3块: 4 4块: 4 4 | 3 4 | 3 4 | 3 | 2 4 | 3 | 2 3 | 2 | 1 4 | 3 | 2 | 1 2 | 1 | 4 3 | 2 | 1 | 4 1 | 4 | 3 2 | 1 | 4 | 3 4 | 3 | 5 1 | 4 | 3 | 5 4 | 3 | 5 1 | 3 | 5 | 4 4 | 3 | 5 1 | 5 | 4 | 3 3 | 5 | 2 5 | 4 | 3 | 2 5 | 2 | 1 4 | 3 | 2 | 1 5 | 2 | 1 3 | 2 | 1 | 5 当 M=3时,采用FIFO页面置换算法的缺页次数为9次,缺页率为75%; 当M=4时,采用FIFO页面置换算法的缺页次数为10次,缺页率为83%。由此可见,增加分配给作业的内存块数,反而增加了缺页次数,提高了缺页率,出现了Belady现象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1