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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统实践报告.docx

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

2、实的基础。二实验环境1. 硬件环境: CPU: P4 2.4GHz内存: 256M硬盘: 40G (局域网)2软件环境: 操作系统:Windows XP 开发工具:Microsoft Visual C+ 6.0 三. 实验内容3.1实验六1. 内容描述在Windows环境下创建子进程,在父子进程之间实验进程通信。2. 实验过程2.1 实验原理:系统内部进程间通讯和数据交换有多种方式:消息、共享内存、匿名(命名)管道、邮槽、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;其中第一个成员变量是用以标识接收消息的窗口的窗口句柄;第二个参数便是消息标识号,如WM_PAINT;第三个和

4、第四个参数的具体意义同message值有关,均为消息参数。前四个参数是非常重要和经常用到的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐标)。把消息传送到应用程序有两种方法:一种是由系统将消息邮寄(post)到应用程序的消息队列这是进队消息Win32 API有对应的函数PostMessage(),此函数不等待该消息处理完就返回;而另一种则是由系统在直接调用窗口函数时将消息发送(send)给应用程序的窗口函数,属于不进队消息对应的函数是SendMessage()其必须等待该消息处理完后方可返回。2.2 父进程的实现1)新建一工程文件:FatherProcess,选取MFC AppWi

5、zard(exe)。2)第二步选取Single document(单文档)。3)其余几步均为确省值。4) 添加三个菜单“进程通信”,子菜单 “向“子进程”发送命令“和与其对应的函数:/FatherProcessView.cpp文件中,向子进程发送命令void CFatherProcessView:OnMenuCommand1() / TODO: Add your command handler code here CString str = Son(子进程); CWnd *pWnd = CWnd:FindWindow(NULL, str); if(pWnd) pWnd-SendMessage(

6、WM_COMM, 0, 0); 在FatherProcessView.h中 添加自定义消息:#define WM_COMM WM_USER+100。5) 在MainFrame.cpp文件中,添加收到子进程命令的消息函数:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_MESSAGE(WM_MSG_TOFATHER, OnToFatherMsg)END_MESSAGE_MAP()void CMainFrame:OnToFatherMsg(WPARAM wParam, LPARAM lParam) if(wParam=0 & lParam=0) AfxMes

7、sageBox(收到, Son, “命令”); 在MainFrame.h文件中修改如下:a)添加自定义消息:#define WM_MSG_TOFATHER WM_USER+101b)添加头文件定义void OnToFatherMsg(WPARAM wParam, LPARAM lParam)6) 在BOOL CFatherProcessApp:InitInstance()函数末尾添加: m_pMainWnd-SetWindowText(Father(父进程); /非常重要,否则消息将收不到7) 编译调试并运行程序。2.3 子进程的实现1)新建一工程文件:SonProcess,选取MFC App

8、Wizard(exe)。2)第二步选取Single document(单文档)。3)其余几步均为确省值。4) 添加三个菜单“进程通信”,子菜单 “向“父进程”发送命令“和与其对应的函数:/SonProcessView.cpp文件中,/向父进程发送命令void CSonProcessView:OnMenuitemCommand1() CString str = Father(父进程); CWnd *pWnd = CWnd:FindWindow(NULL,str); if(pWnd) pWnd-SendMessage(WM_MSG_TOFATHER, 0, 0); 在SonProcessView.

9、h中 添加自定义消息:#define WM_MSG_TOFATHER WM_USER+1015) 在MainFrame.cpp文件中,添加收到子进程命令的消息函数:BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_MESSAGE(WM_COMM,OnSendMsg)END_MESSAGE_MAP()void CMainFrame:OnSendMsg(WPARAM wParam, LPARAM lParam) if(wParam=0 & lParam=0) AfxMessageBox(收到, Father, “命令”); 在MainFrame.h文件中修改如

10、下:a)添加自定义消息:#define WM_MSG_TOFATHER WM_USER+101b)添加头文件定义void OnSendMsg(WPARAM wParam, LPARAM lParam) ;6) 在BOOL CSonProcessApp:InitInstance()函数末尾添加: m_pMainWnd-SetWindowText(Son(子进程); /非常重要,否则消息将收不到7) 编译调试并运行程序。3. 运行结果父进程向子进程发送消息结果如下图:3.2实验七1. 内容描述 编程模拟磁盘移臂调度算法。2. 实验过程 程序清单:/*实验七:模拟磁盘移臂调度程序*#include

11、stdio.h#include stdlib.hvoid CopyL(int Sour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数void SetDI(int DiscL); /随机生成磁道数 void Print(int Pri,int x); /打印输出数组Privoid DelInq(int Sour,int x,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void FCFS(int Han,int DiscL); /先来先服务算法(FCFS)void SSTF(int Han,int

12、 DiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,int DiscL,int x,int y); /单向扫描算法(SCAN)void CSCAN(int Han,int DiscL); /电梯调度扫描算法(CSCAN)void PaiXu(); /寻道长度由低到高排序int NAll=0;int Best52; /用作寻道长度由低到高排序时存放的数组 int Limit=0; /输入寻找的范围磁道数iint Jage;float Aver=0;int main() int i; int DiscLine10; /声明准备要生成的随机磁道号的数组 int Ha

13、nd; /磁道数 int Con=1; int n; while(Con=1) Jage=0; Hand = 143; /初始的磁道数 Limit = 300; /输入寻找的范围 if(Limit65536) printf(超出范围!); else printf( *n); printf( * 磁盘调度算法 *n); printf( *n); printf(* 1.先来先服务算法(FCFS) *n); printf( * 2.最短寻道时间优先算法(SSTF) *n); printf( * 3.单向扫描算法(CSCAN) *n); printf( * 4.电梯调度算法(SCAN) *n); pr

14、intf( *n); 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; case 3: SetDI(DiscLine); CSCAN(Hand,DiscLine); /单向扫描算法(CSCAN) break; case 4: SetDI(DiscLine); SCA

15、N(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=x;i+) Disti=Souri; /打印输出数组Privoid Print(int Pri,int x) int i; for(i=0;i=x;i+) printf(%5d,Prii); /随机生成磁道数void SetDI(int

16、 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(+ 需要寻找的磁道号:); Print(DiscL,9); /输出随机生成的磁道号 printf(n);/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void DelInq(int Sour,int x,int y) int i; for(i=x;iy;i+) Sour

17、i=Souri+1; x+; /先来先服务算法(FCFS)void FCFS(int Han,int DiscL) int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int i,k,All,Temp; /Temp是计算移动的磁道距离的临时变量 All=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数 CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照FCFS算法磁道的访问顺序为:); All=Han-RLine0; for(i=0;i=9;i+) Temp=RLine0-RLine1;/求出移动磁道

18、数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp0) Temp=(-Temp);/移动磁道数为负数时,算出相反数作为移动磁道数 printf(%5d,RLine0); All=Temp+All;/求全部磁道数的总和 DelInq(RLine,0,k);/每个磁道数向前移动一位 k-; BestJage1=All;/Best1存放移动磁道数 BestJage0=1; /Best0存放算法的序号为:1 Jage+;/排序的序号加1 Aver=(float) All)/10;/求平均寻道次数 printf(n+ 臂移动总量: ,All);/最短寻道时间优先算法(SSTF)void

19、SSTF(int Han,int DiscL) int i,j,k,h,All; int Temp; /Temp是计算移动的磁道距离的临时变量 int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Min; All=0; /统计全部的磁道数变量 k=9; /限定10个的磁道数 CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照SSTF算法磁道的访问顺序为:); for(i=0;i=9;i+) Min=64000; for(j=0;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp

20、=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(TempMin) /如果每求出一次的移动距离小于Min,执行下一句 Min=Temp; /Temp临时值赋予Min h=j; /把最近当前磁道号的数组下标赋予h All=All+Min; /统计一共移动的距离 printf(%5d,RLineh); Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-; BestJage1=All;/Best1存放移动磁道数 BestJage0=2;/Best0存放算法的序号为:2 Jage+;/排序序

21、号加1 Aver=(float)All)/10;/求平均寻道次数 printf(n+ 臂移动总量: ,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; /统计全部的磁道数变量 CopyL(DiscL,RLine,9);

22、/复制磁道号到临时数组RLine printf(n+ 按照电梯调度算法磁道的访问顺序为:); Min=64000; for(j=x;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(Temp=Han) /判断磁道的移动方向,即是由里向外还是由外向里 Order=0; t=1; Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-; while(m0) if(Order=1) /order是判断磁盘扫描的方向标

23、签,order是1的话,磁道向内移动 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=k;n+) /判断离当前磁道最近的磁道号 if(RLinen=Han) Temp=Han-RLinen; if(TempMin) 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赋予

24、0,执行else语句,使磁道向外移动 m-; /向内完成一次,m减一次,保证while循环执行两次 else /order是0的话,磁道向外移动 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=Han) Temp=RLinen-Han; if(Temp5) BestJage1=All;/Best1存放移动磁道数 BestJage0=3;/Best0存放算法的序号为:3 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数 printf(n+ 臂移动总量: ,All); return(Han);/单向扫描算法(CSCAN)void CSCAN(int Han,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; /统计全部的磁道数变量 Last=Han; CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照单向扫描算法磁道的访问顺序为:); while(k=0) for(j=0;j=9;j+) /从当前磁道号开始,由内向外搜索离当前磁道最

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

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