操作系统学习-进程间通信

提示:以下内容不保证对,只能个人在学习时的笔记。

通信方式:管道、消息队列、信号、信号量、共享内存、套接字

一、管道

1.管道是内核中的缓存,有大小限制linux中是4KB,无数据格式;

   写满时,再写时写进程会被阻塞;管道为空时,读时会被阻塞;

   管道中数据是一次性的,读完就被抛弃;

   管道机制必须提供三方面的协调能力:互斥、同步、确定对方的存在。

2.单向传输,单工通信;先进先出

3.种类:

(1)匿名管道:只能用于父子进程间通信,存在于内存中

        系统调用:int pipe(int fd[2])     描述符  fd[0]用于读,fd[1]用于写,

        父进程会关闭 fd[0],只保留写入的fd[1] ; 子进程会关闭fd[1], 只保留读取的fd[0]

        使用时不用打开,用完要做关闭操作,close(fd[0]); close(fd[1]); 

        标准库调用:***

(2)命名管道:不同进程间都可相互通信,是文件系统中(在交换空间磁盘上)的一个设备(管道)文件。在文件系统中只有一个索引块存放文件的路径,没有数据块,数据块存在内核中

        系统调用:mkfifo(char* pathname,mode_t mode)

        fifo是一个文件,使用时要open,close,read,write,一般文件IO函数都可用

优点:简单,能够知道管道中的数据已经被另一个进程读取了

缺点:通信效率低,不适合进程间频繁通信

二、消息队列

1.是内核中的消息链表,以消息体为独立单位链接起来,消息队列的总长度有上限;

2.消息体有大小也有数据类型,数据类型由用户定义;

3.读完消息后,相应的消息体会被内核删除。

4.写数据和读数据时,存在用户态和内核态的系统开销

5.生命周期:没有释放消息队列或没关闭系统就一直在

优点:

缺点:通信不及时(我觉得是因为链表),附件也有大小限制

三、共享内存

1.共享内存是多个进程共享的一块物理内存,各进程的虚拟地址映射到该内存

2.对共享空间进行读写操作,必须使用同步互斥工具

优点:共享数据的最快方式

缺点:多个进程写同一个共享内存,会被覆盖

四、信号量

P、V操作

用于进程间同步互斥问题。

P操作,是减,减后<0,说明共享资源被占用,当前进程阻塞;

V操作,是加,加后当前进程<=0,说明当前有进程阻塞,就唤醒。

信号初始化为1,是互斥信号量;初始化为0,是同步信号量。

五、信号

对于异常情况下的工作模式,需要用信号的方式来通知进程。是唯一的异步通信方式。

用户进程对信号的处理方式:

1.默认方式处理

2.捕捉信号

3.忽略信号

六、套接字(socket)

不同主机间通信、同一主机间进程间通信

系统调用:int socket(int domain , int type, int protocal )

domain(协议族):AF_INET(IPV4), AF_INET6(IPV6), AF_LOCAL/AF_UNIX(本地)

type(通信类型);    TCP通信类型SOCK_STREAM(字节流),UDP通信类型 SOCK_DGRAM(数据报), SOCK_RAM(原始套接字)

protocal: 0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值