- 1
- 0
- 约8.98千字
- 约 16页
- 2019-12-23 发布于湖北
- 举报
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2007年秋季学期
操作系统原理课程设计
题 目: 消息的发送与接收模拟实现
专业班级: 计算机科学与技术3班
姓 名: 柴 小 辉
学 号:
指导教师: 周 小 健
成 绩: _______________
目录
TOC \o 1-3 \h \z \u 摘要 3
关键词 3
序言 4
设计思想 5
算法分析 6
函数调用关系图 11
测试结果 12
源程序(带注释) 13
设计总结 15
参考文献 16
致 谢 17
摘要
消息(message)是一个格式化的可变长的信息单元。消息机制允许由一个进程给其它任意的进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据, 它是采用消息队列的方式来实现消息传递的。
关键词:消息 发送 接收
序言
《操作系统》是计算机类各专业的核心课程,也是其他诸多类专业的重要选修课,开设这门课可以为理解、应用和开发程序提供技术和方法支持,为后续课程的学习提供重要思想和方法基础,同时对于自己逻辑思维培养和程序设计思想体系的建立有着重要的影响。学好《操作系统》仅仅通过课堂教学或自学获取理论知识是远远不够的,还必须加强实践,亲自上机输入、编辑、检查、修改、调试和运行各种典型算法。在大学学习时,知识是通过一门门独立的课程传授的,而实际问题之能够顺利地得到解决,不但需要多方面的知识,而且还需要善于对这些知识综合地加以运用。这次课设正是给我们了一次自己动脑动手的机会。
消息(message)是一个格式化的可变长的信息单元。消息机制允许由一个进程给其它任意的进程发送一个消息。当一个进程收到多个消息时,可将它们排成一个消息队列。消息使用二种重要的数据结构:一是消息首部,其中记录了一些与消息有关的信息,如消息数据的字节数;二是消息队列头表,其每一表项是作为一个消息队列的消息头,记录了消息队列的有关信息。
设计思想
1、消息机制的数据结构
(1)消息首部
记录一些与消息有关的信息,如消息的类型、大小、指向消息数据区的指针、消息队列的链接指针等。
(2)消息队列头表
其每一项作为一个消息队列的消息头,记录了消息队列的有关信息如指向消息队列中第一个消息和指向最后一个消息的指针、队列中消息的数目、队列中消息数据的总字节数、队列所允许消息数据的最大字节总数,还有最近一次执行发送操作的进程标识符和时间、最近一次执行接收操作的进程标识符和时间等。
2、消息队列的描述符
UNIX中,每一个消息队列都有一个称为关键字(key)的名字,是由用户指定的;消息队列有一消息队列描述符,其作用与用户文件描述符一样,也是为了方便用户和系统对消息队列的访问。
3、程序设计
(1)为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程, SERVER和CLIENT,进行通信。
(2)SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER。SERVER每接收到一个消息后显示一句“(server)received。
(3)CLIENT端使用key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,即是SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。
(4)父进程在SERVER和CLIENT均退出后结束。
算法分析
1 Msgget
功能:创建一个消息,获得一个消息的描述符。核心将搜索消息队列头表,确定是否有指定名字的消息队列。若无,核心将分配一新的消息队列头,并对它进行初始化,然后给用户返回一个消息队列描述符,否则它只是检查消息队列的许可权便返回。主要由sys_msgget执行。
说明: 系统调用格式:
msgqid=msgget(key,flag)
该函数使用头文件如下:
#includesys/types.h
#includesys/ipc.h
#includesys/msg.h
参数定义
int msgget(key,flag)
key_t key;
int flag;
其中:
key是用户指定的消息队列的名字;flag是用户设置的标志和访问方式。如 IPC_CREAT |0400 是否该队列已被创建。无则创建,是则打开;
IPC_E
原创力文档

文档评论(0)