1 / 24
文档名称:

linux 源代码分析-消息管理.doc

格式:doc   大小:429KB   页数:24页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

linux 源代码分析-消息管理.doc

上传人:文库旗舰店 2018/8/6 文件大小:429 KB

下载得到文件列表

linux 源代码分析-消息管理.doc

文档介绍

文档介绍:Linux源代码分析

内容:
作者:欧阳杨
单位:浙江大学混合974
1999年12月10日于求是园
Linux 源代码分析----ipc/
前言:
在操作系统中,有些进程存在着相互制约的关系,这些制约关系来源于并行进程的相互合作和资源共享。为了使合作进程和资源共享进程能协调一致的向前推进,必须使他们保持联系,一边相互了解。进程相互间需要交换一定数量的信息,以便协调一致共同完成指定的任务. 这种机制就叫做进程间通信, 中支持UNIX SYSTEM V 的三种通信机制: 消息队列, 信号量和共享内存. 现就消息队列这种机制进行分析.
包含的头文件:
#include <linux/>
#include <linux/>
#include <linux/>
#include <linux/>
#include <linux/>
#include <asm/>
中包含的函数模块:
有关进程间通信资源的属性:
键(key): 一个由用户提供的整数,用来标志某个消息。
创建者(creator): 创建这个消息的进程的用户ID(UID )和组 ID(GID).
所有者(owner): 消息所有者的UID和GID. 资源创建时,资源的创建者就是资源的所有者。资源的创建者进程、当前的所有者进程和超级用户具有改变资源所有者的权力。
参数类型的说明:
struct ipc_perm
{
key_t key; // 整型, 0表示private, 非0表示public
ushort uid; // 资源拥有者的有效标识
ushort gid; // 资源拥有者所在组的有效标识
ushort cuid; // 资源创建者的有效标识
ushort cgid; // 资源创建者所在组的有效标识
ushort mode; // 访问模式
ushort seq; // 序列号, 计算标识符
];
系统在创建消息队列的同时设定了访问权限, 并返回一个标识. 进程通信时必须先传递该标识, 待函数ipcperms()确认权限后才可以访问通信资源. 访问权限由ipc_perm 结构描述. 通过key可以得到引用标识, 从而访问通信资源. Key 为public , 则任何进程都可以通过key得到引用标识.
struct msg
{
struct msg *msg_next; //消息队列中的下一个
long msg_type; //消息的类型
char *msg_spot; //存放消息内容的地址
time_t msg_time; //消息发送的时间
short msg_ts; //消息的长度
};
msg 结构用来存放消息的有关信息.
struct msqid_ds
{
struct ipc_perm msg_perm;
struct msg *msg_first; //指向消息队列的第一条消息
struct msg *msg_last; //指向消息队列的最后一条消息
time_t msg_stime; // 最后发送时间
time_t msg_rtime; //最后接收时间
time_t msg_ctime; //最后修改时间
struct wait_queue *wwait; //写消息进程的等待队列
struct wait_queue *rwait; //读消息进程的等待队列
ushort msg_cbytes; //队列中消息的字节数
ushort msg_qnum; //队列中的消息数
ushort msg_qbytes; //队列中消息的最大字节数
ushort msg_lspid; // 最后一个发送消息的进程的标识号
ushort msg_lrpid; //最后一个接收消息的进程的标识号
};
每一个msqid_ds 结构代表一个消息队列, 是进程读写的信息的存储空间。
static struct msqid_ds *msgque[MSGMNI];
定义了一个消息队列数组msgque, 数组的元素类型是指向msqid_ds 结构的指针。消息在队列中是按到来的顺序维护。进程读消息时,这些消息按FIFO从队列中移去。
msgque msgid_ds msg msg
msg_perms msg_next msg_next
msg_first msg_type
msg_last msg_spot
ms