1、 课 程 设 计 报 告 课程名称课程名称 操作系统操作系统 课题名称课题名称 LINUX 的的消息函数的分析消息函数的分析 2008 年年 7 月月 1 日日 课 程 设 计 任 务 书 课程名称 操作系统 课 题 LINUX 的消息函数的分析 专业班级 通信 0502 学生姓名 学 号 指导老师 审 批 任务书下达日期 2008 年 7 月 1 日 任务完成日期 2008 年 7 月 4 日 2 任任 务务 书书 一 、 设 计 内容与设计要 求一 、 设 计 内容与设计要 求 1设计内容 以学号除以 4 求余数,余数相同的同学为一组选择相应的课题完成 课程设计。掌握操作系统的工作原理,培
2、养小组合作能力,培养阅读大 型程序代码的能力。 本小组的设计课题为: 设计设计三三 LINUXLINUX 的的消息函数的消息函数的分析分析 要求是: 根据设计书所提供的基础知识,分析相关代码,得到相关的框图, 写出设计报告。 代码的位置: icp/msg.c 2设计要求 认真阅读代码,与同组同学合作,通过充分的讨论得到相关的 结论 二、二、进 度 安 排进 度 安 排 第 18 周 星期二 14:30-18:30 星期三 12:30-14:30 星期四 12:30-14: 30 3 目目 录录 一、课程设计一、课程设计任务书任务书 . . 1 1 二、目二、目 录录 3 3 三三、课题课题的主
3、要功能的主要功能 . . 4 4 四、四、课题课题的功能模块的划分的功能模块的划分 5 5 五、五、主要功能的实现主要功能的实现 . . 7 7 六、调试分析六、调试分析 9 9 七、总结七、总结 1 14 4 八八、附件:、附件: 1515 课程设计评分表课程设计评分表 2 21 1 4 一、课题主要功能一、课题主要功能: Linux 采用消息队列的方式来实现消息传递。 System V 的消息队列 (message queues)是进程之间互相发送消息的一种异步(asynchronously)方式,在这种 情形之下,发送方不必等待接收方检查它的消息即在发送完消息后,发送方 就可以从事其它工
4、作了而接收方也不必一直等待消息。 新的消息总是放在队列的末尾,接收的时候并不总是从头来接收,可以从中 间来接收。消息队列允许一个或多个进程写消息,一个或多个进程读取消息。 Linux 维护了一系列消息队列的 msgque 向量表。其中的每一个单元都指向一个 msqid_ds 的数据结构,完整描述这个消息队列。当创建消息队列的时候,从系 统内存中分配一个新的 msqid_ds 的数据结构并插入到向量表中。 每一个msqid_ds数据结构都包括一个ipc_perm的数据结构和进入这个队列 的消息的指针。另外,Linux 保留队列的改动时间,例如上次队列写的时间等。 Msqid_ds 队列也包括两个
5、等待队列:一个用于向消息队列写,另一个用于读。 每一次一个进程试图向写队列写消息, 它的有效用户和组的标识符就要和队 列的 ipc_perm 数据结构的模式比较。如果进程可以向这个队列写,则消息会从 进程的地址空间写到 msg 数据结构,放到消息队列的最后。每一个消息都带有进 程间约定的,应用程序指定类型的标记。但是,因为 Linux 限制了可以写的消息 的数量和长度,可能会没有空间容纳消息。这时,进程会被放到消息队列的写等 待队列,然后调用调度程序选择一个新的进程运行。当一个或多个消息从这个消 息队列中读出去的时候会被唤醒。 从队列中读是一个相似的过程。进程的访问权限一样被检查。一个读进程可
6、 以选择是不管消息的类型从队列中读取第一条消息还是选择特殊类型的消息。 如 果没有符合条件的消息,读进程会被加到消息队列的读等待进程,然后运行调度 程序。当一个新的消息写到队列的时候,这个进程会被唤醒,继续运行。 在小组中,我做了函数 msgctl( )的分析。Linux 消息函数 Msgctl()功能描 述: 功能:功能:在消息队列上执行指定的操作。根据参数的不同和权限的不同,可以 执行检索、删除等等操作。主要由 syssys_ _msgctlmsgctl 执行。 说明说明:系统调用提供一系列消息控制操作,操作动作由 cmd 定义,以下 cmd 定 义值表明了各操作动作的定义. . IPC_STAT:将 msqid 相关的数据结构中各个元素的当前值放入由 buf 5 指向的结构中. . IPC_SET:将 msqid 相关的