Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40017
  • 博文数量: 11
  • 博客积分: 570
  • 博客等级: 中士
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-23 11:19
文章分类

全部博文(11)

文章存档

2009年(4)

2008年(7)

我的朋友

分类: LINUX

2008-11-23 22:18:15

笔记: XSI IPC (SYSV IPC)

XSI IPC包含了三种通信机制:消息队列,信号量,共享内存。


1.标志符(identifiers)和键(keys)

内核中每个IPC结构都用一个非负整数加以引用,这个非负整数称为“标志符”。例如,给一个消息队列发送或者接收消息,只需要使用这个队列的标志符即可。

标志符是IPC对象的内部名称。

为了使多个合作进程能够在同一个IPC对象上会合,需要提供一个外部名称方案。键(keys)IPC对象的外部名称。每个IPC对象与一个键相关联,这个键作为该对象的外部名称。


当创建一个IPC对象时(调用msgget,semget或者shmget),都应指定一个键。键的数据类型是key_t。键由内核变换成标志符。

客户端程序和服务器程序在同一个IPC结构上汇合的三种方式:

1>. 如果key的值被指定为IPC_PRIVATE,服务器程序会创建一个新的IPC结构,返回identifier值;服务器程序需要将这个返回值存储到某一个地方(比如一个文件内),以便让客户端程序能够获取。

IPC_RIVATE key还可以用在父子进程中。父进程通过IPC_PRIVATE创建一个新的IPC结构,返回identifier值;父进程fork()一个子进程,然后可以将identifier的值作为exec()的一个参数传给子进程。达到父子进程在同一个IPC结构上通信的目的。

2>. 客户端程序和服务器端程序可以将一个指定的key定义到一个公用的头文件中。然而,指定的key不能保证它是否已经关联到其他的IPC结构上。

3>.客户端程序和服务器端程序可以传递一个pathname和一个project ID,调用ftok()函数来产生一个key;然后将这个key值放到一个公用的头文件中。


三个get函数(msgget, semget, shmgetg)都有两个类似的参数:一个key和一个flag。一个新的IPC结构(通常,由服务器)被在以下两种情况下创建:key被指定为IPC_PRIVATEkey被指定为一个唯一值(改值没有和其他IPC结构关联),flag里的IPC_CREATE位被置位。


2. Permission Structure

每个IPC结构会关联一个 ipc_perm的数据结构。这个数据结构定义了IPC的权限访问域:

struct ipc_perm {

uid_t uid; /* owner's effective user id */

gid_t gid; /* owner's effective group id */

uid_t cuid; /* creator's effective user id */

gid_t cgid; /* creator's effective group id */

mode_t mode; /* access modes */

.

.

.

};


Access mode List:

Permission

Bit

user-read

0400

user-write (alter)

0200

group-read

0040

group-write (alter)

0020

other-read

0004

other-write (alter)

0002


3. Configuration Limits

ipcs -l

cat /proc/sysvipc/msg

cat /proc/sysvipc/shm

cat /proc/sysvipc/sem

cat /poc/sys/kernel/msgmax

cat /poc/sys/kernel/msgmnb

cat /poc/sys/kernel/msgmni

cat /proc/sys/kernel/shmall

cat /proc/sys/kernel/shmmax

cat /proc/sys/kernel/shmmni

ipcrm






文件:笔记:IPC通信机制.pdf
大小:150KB
下载:下载
阅读(1027) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:笔记:JAVA学习之“对象导论”

给主人留下些什么吧!~~