操作系统实践报告_第1页
操作系统实践报告_第2页
操作系统实践报告_第3页
操作系统实践报告_第4页
操作系统实践报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、百度文库操作系统实践报告准考证号:考生姓名:一.实验目的操作系统是一门实践性很强的计算机专业课程, 它要求我们掌握操作系统的 工作原理和基本理论知识。它注重方法、技术的实际应用。在上机实践考核中, 为培养考生良好的学习与工作作风。要求考生按一定的规范进行上机前的考核准 备。熟悉软硬件环境。上机调试和正确运行程序,以及提交实践考核报告。上机 实践考核在机器环境上调试、运行程序和产生正确的结果。但准备阶段和整理实 践报告也十分重要,只有做好充分的准备,熟悉机器及环境,尽可能的正确编码, 才能高效率地利用机时。在书写报告时,必须依照规定的格式整理好文档资料, 为考生将来从事于软件 开发和研制工作,打

2、下一个坚实的基础。二.实验环境1 .硬件环境:/CPU P4内存:256M硬盘:40G(局域网)/2 .软件环境: /操作系统:Windows XP百度文库开发工具:Microsoft Visual C+三.实验内容 /实验六1 .内容描述/在Windows环境下创建子进程,在父子进程之间实验进程通信。、2 .实验过程实验原理:系统内部进程间通讯和数据交换有多种方式:消息、共享内存、匿 名(命名)管道、邮槽、Windows套接字等多种技术。其中利用消息机 制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺 点,但由 于其实现方便、应用 灵活而广泛应用于无须大量、频繁数据交 换的内

3、部进程通讯系统之中。Windows是一种面向对象的体系结构,Windows环境和应用程序都 是通过消息来交互的。Windows应用程序开始执行后,Windows为该程 序创建一个“消息队列(message queue)",用以存放邮寄给该程序可能 创建的各种不同窗口的消息。消息队列中消息的结构(MSG)为/typedef struct tagMSGHWND hwnd;UINT message;WPARAM wParam; /LPARAM lParam;DWORD time;POINT pt;百度文库MSG;其中第一个成员变量是用以标识接收消息的窗口的窗口句柄;第二 个参数便是消息标识

4、号,如WM_PAINT第三个和第四个 参数的具体意义 同message值有关,均为 消息参数。前四 个参数是非常重要和经常用到 的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐 标)。把消息传送到应用程序有两种方法:一种是由系统将消息”邮寄 (post)" 铀应用程序的“消息队列"这是"进队消息"Win32 API 有对应的 函数PostMessage(),此函数不等待该消息处理完就返回;而另一种则 是由系统在直接调用窗口函数时将消息”发送(send)”给应用程序的窗 口函数,属于"不进队消息"对应的函数是SendMess

5、age()其必须等待该 消息处理完后方可返回。父进程的实现1)新建一工程文件:FatherProcess ,选取 MFC AppWizard(exe)。2)第二步选取 Single document( 单文档)。3)其余几步均为确省值。4)添加三个菜单“进程通信”,子菜单 ”向“子进程”发送命令”和 与其对应的函数:运行结果父进程向子进程发送消息结果如下图:/百度文库实验七1.内容描述编程模拟磁盘移臂调度算法2.实验过程程序清单:来先服务算法(FCFS)*n");printf(" *2.*n");printf(" *3.*n");printf(

6、" *4.*n");printf("*5);最短寻道时间优先算法(SSTF)单向扫描算法(CSCAN)电梯调度算法(SCAN)scanf("%d", &n);百度文库if(n=0)exit(0); 八 printf("n"); /switch(n) case 1:SetDI(DiscLine);FCFS(Hand,DiscLine); /先来先服务算法(FCFS)break; case 2:SetDI(DiscLine);SSTF(Hand,DiscLine); /最短寻道时间优先算法.(SSTF) break; c

7、ase 3:SetDI(DiscLine);CSCAN(Hand,DiscLine); /单向扫描算法(CSCAN)break;case 4:SetDI(DiscLine);SCAN(Hand,DiscLine,0,9); 电梯调度算法(SCAN)break;case 5:break; printf("nn+是否继续(按0结束,按1继续)?");scanf("%5d",&Con);百度文库/数组Sour复制到数组Dist ,复制到x个数 void CopyL(int Sour口,int Dist口,int x)int i;for(i=0;i<

8、;=x;i+)Disti=Souri;/打印输出数组Privoid Print(int Pri口,int x)int i;for(i=0;i<=x;i+)printf("%5d",Prii);/随机生成磁道数void SetDI(int DiscL口)int i;、'、/int nQueueQUEUELEN = 143, 86, 145, 93, 179, 95, 150, 103, 176, 132;百度文库for(i=0; i< QUEUELEN; i+)DiscLi=nQueuei;随机生成10个磁道号 printf("+ /'需

9、要寻找的磁道号:");Print(DiscL,9); /输出随机生成的磁道号printf("n");/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)void DelInq(int Sour口,int x,int y)int i;for(i=x;i<y;i+)Souri=Souri+1;x+;/先来先服务算法(FCFS) void FCFS(int Han,int DiscL口) int RLine10; /将随机生成的磁道数数组Discl口复制给数组RLine口int i,k,All,Temp; /Temp是计算移动

10、的磁道距离的临时变量All=0; 统计全部的磁道数变量/k=9; /限定10个的磁道数CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine百度文库printf("n+ 按照FCF就法磁道的访问顺序为:");All=Han-RLine0;for(i=0;i<=9;i+)/Temp=RLine0-RLine1;/ 求出移动磁道数,前一个磁道数减 去后一个磁道数得出临时的移动距离 if(Temp<0)Temp=(-Temp);/移动磁道数为负数时,算出相反数作为移 动磁道数printf("%5d",RLine0);All=T

11、emp+All;/求全部磁道数的总和'、DelInq(RLine,0,k);/每个磁道数向前移动一位k-; BestJage1=All;Best1存放移动磁道数BestJage0=1; Best0存放算法的序号为:1Jage+;/排序的序号加1 Aver=(float) All)/10;/求平均寻道次数printf("n+臂移动总量:<%5d> ",All); /最短寻道时间优先算法(SSTF) void SSTF(int Han,int DiscL口) int i,j,k,h,All; int Temp; /Temp是计算移动的磁道距离的临时变量int

12、 RLine10; / 将随机生成的磁道数数组 Discl口复制给数组 RLine口百度文库int Min;All=0; 统计全部的磁道数变量 k=9; /限定10个的磁道数 CopyL(DiscL,RLine,9); 复制磁道号到临时数组RLineprintf("n+ 按照SSTF算法磁道的访问顺序为':"); for(i=0;i<=9;i+) Min=64000;/for(j=0;j<=k;j+) 内循环寻找与当前磁道号最短寻道的时间的磁道号if(RLinej>Han) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句Temp=RLin

13、ej-Han; /求出临时的移动距离elseTemp=Han-RLinej; /求出临时的移动距离if(Temp<Min) /如果每求出一次的移动距离小于Min,执行下一句Min=Temp; /Temp 临时值赋予 Min'h寸把最近当前磁道号的数组下标赋予 hAll=All+Min; /统计一共移动的距离printf("%5d",RLineh);Han=RLineh;DelInq(RLine,h,k); /每个磁道数向前移动一位k-; '、/百度文库BestJage1=All;Best1存放移动磁道数BestJage0=2;/Best0存放算法的序号

14、为:2Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf("n+/ 臂移动总量:<%5d> ",All); /扫描算法(SCAN) int SCAN(int Han,int DiscL口,int x,int y) int j,n,k,h,m,All;int t=0;int Temp;int Min;int RLine10; /将随机生成的磁道数数组 Discl口复制给数组RLine口int Order;Order=1; k=y;m=2; /控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到All=0; /

15、统计全部的磁道数变量/CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine /printf("n+按照电梯调度算法磁道的访问顺序为:");/Min=64000;for(j=x;j<=y;j+) /寻找与当前磁道号最短寻道的时间的磁道号 if(RLinej>Han) /如果第一个随机生成的磁道号大于当前10百度文库的磁道号,执行下一句Temp=RLinej-Han; /求出临时的移动距离else/Temp=Han-RLinej; /求出临时的移动距离if(Temp<Min) Min=Temp; /Temp 临时值赋予 Min h=j;

16、 /把最近当前磁道号的数组下标赋予hAll=All+Min; printf("%5d",RLineh);if(RLineh>=Han) /由外向里Order=0;t=1;Han=RLineh;DelInq(RLine,h,k); /k-;while(m>0)if(Order=1) /order1的话,磁道向内移动 for(j=x;j<=y;j+) h=-1;Min=64000;判断磁道的移动方向,即是由里向外还是每个磁道数向前移动一位是判断磁盘扫描的方向标签,order是11百度文库for(n=x;n<=k;n+) /判断离当前磁道最近的磁道号if(

17、RLinen<=Han) Temp=Han-RLinen; if(Temp<Min) Min=Temp; /Temp 临时值赋予 Min /h=n; /把最近当前磁道号的数组下标赋予h if(h!=-1) All=All+Min; /叠加移动距离printf("%5d",RLineh); Han=RLineh; / 最近的磁道号作为当前磁道 DelInq(RLine,h,k); k-; Order=0; / 当完成向内的移动,order赋予0,执行else 语句,使磁道向外移动 m-; 向内完成一次,m减一次,保证while循环执行两 次 else /order

18、 是0的话,磁道向外移动 12百度文库for(j=x;j<=y;j+) h=-1; /Min=64000;,for(n=x;n<=k;n+) /判断离当前磁道最近的磁道号if(RLinen>=Han) Temp=RLinen-Han; if(Temp<Min) Min=Temp; /Temp 临时值赋予 Minh=n; /把最近当前磁道号的数组下标赋 予h if(h!=-1)All=All+Min; /叠加移动距离printf("%5d",RLineh);Han=RLineh; /最近的磁道号作为当前磁道/DelInq(RLine,h,k);k-;

19、/Order=1; / 当完成向内的移动,order赋予0,执行else 语句,使磁道向外移动m-;向内完成一次,m减一次,保证while循环执行两13百度文库次NAll=NAll+All; /if(y-x)>5) / BestJage1=All;Best1存放移动磁道数/ BestJage0=3;/Best口0存放算法的序号为:3/Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf("n+臂移动总量:<%5d> ",All);return(Han);/单向扫描算法(CSCAN)void CSCAN(int Ha

20、n,int DiscL口)int j,h,n,Temp,m,k,All,Last,i;int RLine10; /将随机生成的磁道数数组Discl口复制给数组RLine口int Min; /int tmp=0;m=2;/k=9;All=0; /统计全部的磁道数变量14百度文库Last=Han;CopyL(DiscL,RLine,9); /八复制磁道号到临时数组RLineprintf("n+按照单向扫描算法磁道的访问顺序为:");while(k>=0)for(j=0;j<=9;j+) /从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号h=-1;Min=6400

21、0;for(n=0;n<=k;n+)if(RLinen>=Han)Temp=RLinen-Han;if(Temp<Min)Min=Temp;h=n;Han=RLineh;Last=RLineh;if(h!=-1)All=All+Min; 统计一共移动的距离printf("%5d",RLineh);DelInq(RLine,h,k);15百度文库k-;if(k>=0)/ tmp=RLine0;for(i=0;i<k;i+)/算出剩下磁道号的最小值if(tmp>RLinei) tmp=RLinei;Han=tmp;/把最小的磁道号赋给 Han

22、Temp=Last-tmp;/求出最大磁道号和最小磁道号的距离差All=All+Temp;BestJage1=All;Best1 存放移动磁道数BestJage0=4;/Best0存放算法的序号为:4Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf("n+臂移动总量:<%5d> ",All);void PaiXu()int i,j,Temp;for(i=0;i<5;i+)for(j=0;j<4;j+)16百度文库if(Best皿1>Bestj+11) /如果前一个算法的移动磁道距离大于后一个移动磁道

23、数,执行下面语句Temp=Bestj+11; / 从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序Bestj+11=Best皿1;Best皿1=Temp;/Temp=Bestj+10; / 将每个算法的序号用冒泡法排序Bestj+10=Bestj0;Best皿0=Temp;3.运行结果:1 .先来先服算法运行结果:17百度文库2 .最短查找时间算法运行结果:* MMMNMMMMMMKMMMM 通盘调 度算,去*»«*»*»*«*1MMMMMMMMMMMKMMM MMMMMMMMM MMWMMMHMMMMMM MM MM KMMM* L先来先JJ瞬尉去(FCFD* 2.最威寻道

温馨提示

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

评论

0/150

提交评论