操作系统实践报告Word格式.docx

上传人:b****2 文档编号:13721636 上传时间:2022-10-13 格式:DOCX 页数:20 大小:97.50KB
下载 相关 举报
操作系统实践报告Word格式.docx_第1页
第1页 / 共20页
操作系统实践报告Word格式.docx_第2页
第2页 / 共20页
操作系统实践报告Word格式.docx_第3页
第3页 / 共20页
操作系统实践报告Word格式.docx_第4页
第4页 / 共20页
操作系统实践报告Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统实践报告Word格式.docx

《操作系统实践报告Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统实践报告Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

操作系统实践报告Word格式.docx

256M

硬盘:

40G(局域网)

2.软件环境:

操作系统:

WindowsXP

开发工具:

MicrosoftVisualC++6.0

三.实验内容

3.1实验六

1.内容描述

在Windows环境下创建子进程,在父子进程之间实验进程通信。

2.实验过程

2.1实验原理:

系统内部进程间通讯和数据交换有多种方式:

消息、共享内存、匿名(命名)管道、邮槽、Windows套接字等多种技术。

其中利用消息机制实现IPC虽然同其他方法相比有交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应用于无须大量、频繁数据交换的内部进程通讯系统之中。

Windows是一种面向对象的体系结构,Windows环境和应用程序都是通过消息来交互的。

Windows应用程序开始执行后,Windows为该程序创建一个"

消息队列(messagequeue)"

,用以存放邮寄给该程序可能创建的各种不同窗口的消息。

消息队列中消息的结构(MSG)为

typedefstructtagMSG{

HWNDhwnd;

UINTmessage;

WPARAMwParam;

LPARAMlParam;

DWORDtime;

POINTpt;

}MSG;

其中第一个成员变量是用以标识接收消息的窗口的窗口句柄;

第二个参数便是消息标识号,如WM_PAINT;

第三个和第四个参数的具体意义同message值有关,均为消息参数。

前四个参数是非常重要和经常用到的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐标)。

把消息传送到应用程序有两种方法:

一种是由系统将消息"

邮寄(post)"

到应用程序的"

消息队列"

这是"

进队消息"

Win32API有对应的函数PostMessage(),此函数不等待该消息处理完就返回;

而另一种则是由系统在直接调用窗口函数时将消息"

发送(send)"

给应用程序的窗口函数,属于"

不进队消息"

对应的函数是SendMessage()其必须等待该消息处理完后方可返回。

2.2父进程的实现

1)新建一工程文件:

FatherProcess,选取MFCAppWizard(exe)。

2)第二步选取Singledocument(单文档)。

3)其余几步均为确省值。

4)添加三个菜单“进程通信”,子菜单“向“子进程”发送命令“和与其对应的函数:

//FatherProcessView.cpp文件中,向子进程发送命令

voidCFatherProcessView:

:

OnMenuCommand1()

{

//TODO:

Addyourcommandhandlercodehere

CStringstr="

Son(子进程)"

;

CWnd*pWnd=CWnd:

FindWindow(NULL,str);

if(pWnd)

pWnd->

SendMessage(WM_COMM,0,0);

}

在FatherProcessView.h中

添加自定义消息:

#defineWM_COMMWM_USER+100。

5)在MainFrame.cpp文件中,添加收到子进程命令的消息函数:

BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)

……

ON_MESSAGE(WM_MSG_TOFATHER,OnToFatherMsg)

END_MESSAGE_MAP()

voidCMainFrame:

OnToFatherMsg(WPARAMwParam,LPARAMlParam)

{

if(wParam==0&

&

lParam==0)

{

AfxMessageBox("

收到,Son,“命令”"

);

}

在MainFrame.h文件中修改如下:

a)添加自定义消息:

#defineWM_MSG_TOFATHERWM_USER+101

b)添加头文件定义

voidOnToFatherMsg(WPARAMwParam,LPARAMlParam)

6)在BOOLCFatherProcessApp:

InitInstance()函数末尾添加:

m_pMainWnd->

SetWindowText("

Father(父进程)"

//非常重要,否则消息将收不到

7)编译调试并运行程序。

2.3子进程的实现

SonProcess,选取MFCAppWizard(exe)。

4)添加三个菜单“进程通信”,子菜单“向“父进程”发送命令“和与其对应的函数:

//SonProcessView.cpp文件中,//向父进程发送命令

voidCSonProcessView:

OnMenuitemCommand1()

FindWindow(NULL,str);

SendMessage(WM_MSG_TOFATHER,0,0);

在SonProcessView.h中

ON_MESSAGE(WM_COMM,OnSendMsg)

OnSendMsg(WPARAMwParam,LPARAMlParam)

收到,Father,“命令”"

}

voidOnSendMsg(WPARAMwParam,LPARAMlParam);

6)在BOOLCSonProcessApp:

3.运行结果

父进程向子进程发送消息结果如下图:

3.2实验七

编程模拟磁盘移臂调度算法。

程序清单:

//*****************实验七:

模拟磁盘移臂调度程序*******************

#include"

stdio.h"

stdlib.h"

voidCopyL(intSour[],intDist[],intx);

//数组Sour复制到数组Dist,复制到x个数

voidSetDI(intDiscL[]);

//随机生成磁道数

voidPrint(intPri[],intx);

//打印输出数组Pri

voidDelInq(intSour[],intx,inty);

//数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)

voidFCFS(intHan,intDiscL[]);

//先来先服务算法(FCFS)

voidSSTF(intHan,intDiscL[]);

//最短寻道时间优先算法(SSTF)

intSCAN(intHan,intDiscL[],intx,inty);

//单向扫描算法(SCAN)

voidCSCAN(intHan,intDiscL[]);

//电梯调度扫描算法(CSCAN)

voidPaiXu();

//寻道长度由低到高排序

intNAll=0;

intBest[5][2];

//用作寻道长度由低到高排序时存放的数组

intLimit=0;

//输入寻找的范围磁道数i

intJage;

floatAver=0;

intmain()

inti;

intDiscLine[10];

//声明准备要生成的随机磁道号的数组

intHand;

//磁道数

intCon=1;

intn;

while(Con==1)

Jage=0;

Hand=143;

//初始的磁道数

Limit=300;

//输入寻找的范围

if(Limit>

65536)

{

printf("

超出范围!

"

}

else

*********************************************\n"

****************磁盘调度算法******************\n"

 *1.先来先服务算法(FCFS)*\n"

*2.最短寻道时间优先算法(SSTF)*\n"

*3.单向扫描算法(CSCAN)*\n"

*4.电梯调度算法(SCAN)*\n"

scanf("

%d"

&

n);

if(n==0)

exit(0);

\n"

switch(n)

{

case1:

SetDI(DiscLine);

FCFS(Hand,DiscLine);

break;

case2:

SSTF(Hand,DiscLine);

case3:

CSCAN(Hand,DiscLine);

//单向扫描算法(CSCAN)

case4:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

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

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