操作系统原理:进程间通信 IPC

本文详细介绍了操作系统中进程间通信的四种主要方式:信号、管道、消息队列和共享内存。信号用于通知进程有紧急事件;管道实现了进程间的单向数据流通信;消息队列允许进程间传递复杂数据结构,遵循FIFO原则;共享内存则允许进程直接读写同一内存区域,高效但需同步控制。这些通信方式各有特点,适用于不同的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     操作系统通信方式可以分为两种方式直接通信和间接通信,对于直接通信进程A将通知进程B ,进程必须指明发送方或者接收方来发送/获取消息。对于间接通信进程A将通知消息发送操作系统内存种的某个区域,由进程B从该区域获取消息,发送消息方只负责把消息放到指定位置,接收方只负责在对应的位置不断地检查是否有新消息进入,从而触发事件。消息传递可以是阻塞/同步的。A确认完B接收到了消息才会继续执行A的任务,也可以是非阻塞/异步的A发送消息给B 可以继续执行A的任务。

目录

     一、信号 Signal

    二、管道

    三、消息队列 按FIFO来管理消息

    四、共享内存


     一、信号 Signal

     信号是一个很小的一个bit,不能传递数据。通过通知应用程序有一个紧急的事情需要处理,中断应用程序,这个中断不是硬件中断而是软件意义上的信号中断。信号有多种类型例如进程终止相关的信号,异常信号,kill 信号,键盘中断信号等。接收该信号的进程B可以使用操作系统的默认操作,也可以用catch捕捉信号等。进程A通过操作系统给B发送信号的过程中。操作系统确认PCB和信号处理函数,找到进程B,修改进程B的栈空间,退出对应栈帧执行信号处理函数。由于要修改别的进程的栈空间,通常正常的应用程序不允许这么操作,除了木马和病毒。

    二、管道

   在Unix设计过程中,一个小的应用程序完成一个小的功能,但是Unix科学家想要把这些小的功能灵活地组合起来,把前面一个功能的输出,定向程下一个功能的输入。之后才有了Unix和Linux的管道符“|”。例如Linux命令   history | grep java 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值