进程间通信方式预习1

1.linux进程间通信的目的是什么?

1.数据传输,一个进程将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。

2.共享数据,多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程立刻看到。

3.通知事件,一个进程通知另一个或一组进程发生了某件事。

4.资源共享,多个进程之间共享同样的资源。需要内核提供锁和同步机制。

5.进程控制,有些进程希望完全控制另一个进程的执行,控制进程希望能够拦截另一个进程的信息和异常。

 

2.管道通信的特点是什么

1.管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立两个管道。

2.只能同于父子进程或兄弟进程之间

3.单独构成一种文件系统,管道对于两端的进程而言,就是一个文件,但他不是普通的文件,不属于某种文件系统,而是自立门户,并且只存在于内存中。

4.数据的读入和写入,一个进程写的内容被另一端的进程读出,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓存区的头部读出数据。

 

3.有名管道与普通管道的区别优缺点

管道只能用于具有亲缘关系的进程间通信,在有名管道提出后,该限制可以突破,FIFO不同于管道之处在于,它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中,这样,即使与FIFO的创建进程不存在血缘关系的进程,只要可以访问该路劲,就能彼此通过FIFO相互通信,因此,不相关的进程也能通过FIFO交互数据,FIFO严格遵循先进先出,对管道及FIFO的读总是从开始处返回数据的,对它们的写则把数据添加到末尾,不支持lseek等文件定位操作。

 

4.信号处理方式有哪些

1.忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略,即SIGKILL,SIGSTOP

2.捕捉信号,定义信号处理函数,当信号发生时,执行相应的处理函数

3.执行默认操作,linux对每种信号都规定了默认操作,注意,进程对实时信号的默认反应是进程终止。

 

5.消息队列的使用方法

1.打开或创建消息队列,消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以要获得一个消息队列的描述字,只需要提供该消息队列的键值(消息队列描述字实在有系统范围内唯一的键值生成的,而键值可以看作对应系统内的一条路径。

2.读写操作,消息读写操作很简单,每个消息都类似于如下数据结构:

Struct msgbuf

{

long mtype;

char mtext[1];

};

mtype成员代表消息类型,从消息队列中读取消息的一个重要依据就是消息的类型,mtext是消息的内容,当然长度不一定为1,因此,对于发送消息来说,首先预置一个msgbuf的缓冲区并写入消息类型和内容,调用相应的发送函数即可,对读取消息来说,首先分配这样一个msgbuf缓冲区,然后把消息读入该缓存区即可。

3.获得或设置消息队列属性,消息队列的信息基本上都保存在消息队列头中,因此可以分配一个类似于消息队列头的结构,来返回消息队列的属性,同样可以设置该数据结构。

 

 

6.消息队列与管道、有名管道相比的优缺点

消息队列具有更大的灵活性,首先它提供格式字节流,有利于减少开发人员的工作量,其次消息具有类型,在实际应用中,可以作为优先级使用,这两点是管道和有名管道所不能比的。同样,消息队列可以在几个进程间复用,而不管这几个进程是否具有血缘关系,这一点与有名管道相似,但消息队列是随内核持续的,与有名管道相比(随进程持续),生命力更强,应用空间更大。

 

7.信号灯与其他通信方式的不同之处

信号灯主要提供对进程间共享资源访问控制机制,相当于内存中的标志,进程可以根据它判断是否能够访问某些共享资源,同时,进程也可以修改该标志,除了用于访问控制外,还可以用于进程同步。

 

8.信号灯的两种类型含义

1.二值信号灯,最简单的信号灯形式,其值只能取01,类似于互斥锁。

二值信号灯能够实现互斥锁功能,但两者关注内容不同,信号的强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值,互斥锁更强调进程,占用资源的进程用完资源后,必须由进程本身来解锁。

 

2.计算信号灯,信号灯的值可以取任意非负值。

 

9.对信号灯的几种操作

1.打开或创建信号灯,与消息队列类似。

2.信号灯值操作,linux可以增加或减小信号灯的值,相应于对共享资源的释放和占有,

3.获得或设置信号灯属性,系统中的每一个信号灯集都对应一个struct sem_array结构,该结构记录了信号灯集的各种信息,存在于系统空间,为了设置,获得该信号灯的各种信息及属性,在用户空间有一个重要的联合机构与之对应,即union semun

 

10.什么叫共享内存

共享内存是最有用的进程间通信方式,也是最快的IPC形式,两个不同进程AB共享内存的意思是,同一块物理内存被映射到进程A,B个字的进程地址空间,进程A可以即时看到进程B对共享内存中数据的更新,反之亦然,由于多个进程共享同一块内存区域,必须要某种同步机制,互斥锁和信号量都可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值