苏嵌作业6.1

消息队列,    信号量, 共享内存

1.消息队列的概念:

消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式及特定的优先级。对消息队列有写权限的进程可以像中按照一定的规则添加新消息,对消息队列有读权限的进程则可以从消息队列读走消息,消息队列是随内核持续的。


2.消息队列的基础理论:

struct kern_ipc_perm

{

    key_t key;

    uid_t uid;

    gid_t gid;

    uid_t cuid;

    gid_t cgid;

    more_t mode;

    unsigned long seq;

};


3.消息队列的使用:

(1)打开或创建消息队列

(2)读写操作

struct msgbuf

{

    long mtype;

    char mtext[1];

}

(3)获得或设置消息队列属性


4.消息队列API

(1)ftok 函数

key = ftok(path_ptr, 'a');

    ipc_id = ipc(MSGGET, (int)key, flags, 0, NULL, 0);

    ...

(2)msgget 函数

创建消息队列

(3)msgrcv 函数

读出消息队列

(4)msgsnd 函数

往消息队列写入数据

(5)msgctl 函数

控制消息队列


5.信号灯概念:

提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判断是否能够访问某些资源,同时进程

也可以修改该标志。除了访问控制还可以用于进程同步。

二种分类:

(1)二值信号灯

(2)计算信号灯


6.内核实现原理

struct sem

{

    int semval;

    int sempid;

}


7.实现信号灯

(1)打开或创建信号灯

(2)信号灯值操作

(3)获得或设置信号灯属性


8.信号灯API

(1)semget用于配置信号灯

(2)semop用于信号灯处理

(3)semctl用于控制信号灯


9.内存共享一

mmap()

fd = open(name, flag, mode);

if(fd < 0)

ptr = mmap(NULL, len, PROT_READ | PROT_WRITE | RPROT_WRITE, MAP_SHARED, fd, 0);


10.内存共享二

shmat()

struct shmid_kernel

{

    struct kern_ipc_perm            shm_perm;

    struct file *                            shm_file;

    int                                         id;

    unsigned long                      shm_nattch;

    unsigned long                      shm_segsz;

    time_t                                   shm_atim;

    time_t                                   shm_dtim;

    time_t                                   shm_ctim;

    pid_t                                     shm_cprid;

    pid_t                                     shm_lprid;

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值