消息的发送与接收模拟实现说明书_第1页
消息的发送与接收模拟实现说明书_第2页
消息的发送与接收模拟实现说明书_第3页
消息的发送与接收模拟实现说明书_第4页
消息的发送与接收模拟实现说明书_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、1*实践教学实践教学* 兰州理工大学兰州理工大学计算机与通信学院2012 年秋季学期操作系统原理操作系统原理课程设计课程设计题 目: 消息的发送与接收模拟实现专业班级: 计算机科学与技术四班 姓 名: 常学斌 学 号: 10240413 指导教师: 王燕 成 绩: 2目目 录录摘摘 要要.3正正 文文.41. 问题描述.42. 设计目的.43. 设计要求.4 4.详细设计 .54.1 界面设计.54.2 算法设计.65.结果分析.7 设计总结设计总结.8参考文献参考文献.9致致 谢谢.103摘摘 要要消息(message)是一个格式化的可变长的信息单元。消息机制允许由一个进程给其它任意的进程发

2、送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。消息使用二种重要的数据结构:一是索引表,一种是实例表.UNIX 中,每一个消息队列都有一个称为关键字(key)的名字,是由用户指定的;消息队列有一消息队列描述符,其作用与用户文件描述符一样,也是为了方便用户和系统对消息队列的访问。 关键词:消息;消息队列;消息队列首部4正正 文文1.1. 问题描述问题描述 该问题主要模拟实现消息的创建、发送和接收。使用系统调用 msgget( ),msgsnd( ),msgrev( ),及 msgctl( )编写一个消息发送和接收的程序。2.2. 设计目的设计目的学生通过该题目的设计过程,可以掌握

3、消息的发送与接收的原理、软件开发方法并提高解决实际问题的能力。3.3. 设计要求设计要求设计一程序完成消息的创建、发送和接收。使用系统调用 msgget( ),msgsnd( ),msgrev( ),及 msgctl( )编制一长度为k 的消息发送和接收的程序。54.4.详细设计详细设计4.14.1 界面设计界面设计输出服务端 PID:printf(SERVER: pid=%dn,pid)输出客户端 PID:printf(CELENT: pid=%dn,pid);输出客户端发送信息状态,客户端 PID 及信息内容:printf(%d (client)sent. Message:%cfrom p

4、id=%dn,11-i,msg.mtext0,pid)输出服务端接收信息状态,服务端 PID 及信息内容:printf(%d (server)received. Message:%c from pid%dn,k,msg.mtext0,pid)64.24.2 算法设计算法设计消息结构类型:struct msgform long mtype; char mtext; /*定义文本类型与长度*/ msg; int msgqid,i;CLIENT 模块:void CLIENT() msgqid=msgget(MSGKEY,0); for() msg.mtype=i; msgsnd(msgqid,&am

5、p;msg,0,0);/*发送消息 msg 入 msgid 消息队列*/ exit(0); SERVER 模块:void SERVER() msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*由关键字获得消息队列*/ do msgrcv(msgqid,&msg,1030,0,0); /*从 msgqid 队列接收消息 msg */ while(msg.mtype!=1); /*释放队列*/ msgctl(msgqid,IPC_RMID,0); exit(O); void main()/主函数 模块: while(i=fork()=-1); if(!i)SER

6、VER(); while(i=fork()=-1); if(!i)CLIENT(); 75.5.结果分析结果分析先由 Clinet 发送了两条消息 ,然后 Server 接收一条消息。此后 C1inet-Server 交替发送和接收消息。最后Server 一次接收两条消息。 Client 和Server 分别发送和接收了 10 条消息 ,与预期设想一致。 message 的传送和控制并不保证完全同步 ,当一个程序不在激活状态的时候,它完全可能继续睡眠 ,造成了上面的现象 ,在多次 send message 后才 receive message。这一点有助于理解消息传送的实现机理。经运行后可得到

7、如下结果:8设计总结设计总结此次操作系统课程设计,清楚了操作系统中消息队列设计的思想.通过这次课程设计我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来。在设计的过程中遇到问题,可以说是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固.因此,在以后的学习当中要多下苦功,加强基础知识的学习。9参考文献参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3. 孙钟秀等. 操作系统教程. 高等教育出版社4. 曾明. Linux 操

8、作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静, 操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社10致致 谢谢首先感谢我的指导老师王燕老师,她在我的设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。在这两周的操作系统课程设计中,对课本中所学的操作系统知识进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。

9、一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。11附录:源程序代码附录:源程序代码 #include #include #include #include #include #define MSGKEY 75 /*定义关键词 MEGKEY*/ #define MAX 1030 struct msgform /*消息结构*/ long mtype; char mtextMAX; /*文本长度

10、*/ msg; /*定义 msg 是前面说明的消息结构类的变量*/ int msgqid,i; void CLIENT() /*定义 CLIENT 函数*/ int i; msgqid=msgget(MSGKEY,0777);/*用系统调用创建一个消息队列*/ int pid;pid=getpid();/*获得当前进程的 PID*/printf(CELENT: pid=%dn,pid);/*输出当前进程的 PID*/ for(i=10;i=1; i-) msg.mtype=i; msg.mtext0=rand()%26+97;/*随机指定消息数组正文*/ printf(%d (client)s

11、ent. Message:%cfrom pid=%dn,11-i,msg.mtext0,pid); sleep(2);msgsnd(msgqid,&msg,1024,0);/*发送消息 msg 入 msgid 消息队列*/ void SERVER() /*定义 server 函数*/ int k=0; msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*由关键字获得消息队列*/ int pid;pid=getpid();printf(SERVER: pid=%dn,pid); do k+; msgrcv(msgqid,&msg,1030,0,0); /*从 msgqid 队列接收消息 msg */ printf(%d (server)received. Message:%c from pid%dn,k,msg.mtext0,pid); sleep(2);12 while(msg.mtype

温馨提示

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

评论

0/150

提交评论