进程间通信方式(2)

Q:消息队列实质及运用?
A:消息队列就是一个消息的链表,把消息看作有特定格式和优先级的记录,该记录包括消息队列键值,用户ID,组ID,消息队列中消息数目等,甚至可以包括对消息队列读写进程的ID。对于消息有相应权限的进程可以对消息进程进行相应写入和读取操作,消息队列是随着内核持续的。

对于消息队列的操作有以下三种类型:1.打开或创建消息队列;2.读写操作;3.获得或设置消息队列属性。

Q:信号灯概述及其应用?
A:信号灯提供了对进程间共享资源访问的控制机制,相当于内存中的标志,进程据它判断是否可以访问某些共享资源,进程亦可修改信号灯,信号灯也可用于进程同步。信号灯主要有以下两种类型:1.二值信号灯(只能取0或者1),类似于互斥锁;两者功能类似,但关注点不同,释放条件也不同。2.计算信号灯(可以取任何非负值)。

对于信号灯的操作包括三部分:1.打开或创建信号灯;2.信号灯值操作,包括对信号灯的增减,对应共享资源的释放和占用;3.获得或设置信号灯属性,每一个信号灯对应一条记录。
Q:共享内存方式的意义及优点?
A:两个不同进程共享内存的意思就是,同一个物理内存被映射到两块进程各自的进程地址空间,两个进程皆可看到另外一个内存对于共享内存中数据的更新。共享内存方式的实现需要借助于互斥锁和信号量等同步机制。其突出优点为效率高。
Q:共享内存内核实现原理是什么?
A:其原理类似于是编纂图书的原理。当编写某一页内容(struct indde/struct page)时,先写好其中的信息,而后对其进行页码(i_mapping)标注,并将页码返回为某一条目录信息(address_space),并记录在目录页(page cache,此时该页面与目录存在且仅仅存在唯一偏移量,调用mmap()随手翻阅,并不能直接跳转到该页。之后将翻阅目录,若存在该页,即可从目录处获得其信息,返回地址,进行查找;若查找不到地址,也就相当于该页未修订或者不存在,未修订则加页码,写入目录页;不存在则进行编撰,更新目录页。

Q:mmap()及其相关系统调用?
A:调用mmap函数时相当于将该文件取出并共享,通过不同的进程进行读写等操作。其用于共享内存的方式有以下两种:1.使用普通文件提供的内存映射,该方法适用于任何进程之间;

2. 用特殊文件提供匿名内存映射:适用于具有亲缘关系的进程之间。
Q:mmap()返回地址的访问?
A:对于用mmap()来映射普通文件而言,进程会在自己的地址空间新增一块空间,空间的大小由mmap()len参数指定。进程也不一定能够对全部新增空间都能进行有效访问,进程能够访问的有效地址大小取决于文件被映射部分的大小。
Q:系统V共享内存原理?
A:系统V共享内存通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。内核在shnget 函数创建一个共享内存区,初始化该共享内存区相应的shmid_kernel的同时,还将在特殊文件系统shm中,创建并打开一个同名文件,并复制该文件的内容。该同名文件不属于任何一个进程。Shmid_kernel是共享内存区中存储管理和文件系统结合起来的桥梁,该结构最重要的shm_file域将存储被映射文件的地址,每个共享内存区对象都对应shm中的一个文件。Shm中的文件不能用read(),write()函数访问,当其中文件映射到进程地址空间后,可直接采用访问内存空间的方式访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值