操作系统学习9进程间通信和文件系统

进程间通信

进程间通信,简称IPC,Inter Process Communication。

传统上我们认为,进程间要保持相对独立,地址空间是独立的。然而,进程之间需要协作完成一些大型任务。所以进程间要在保持相对独立的同时,有相互的沟通。进程间通信提及的信号,和之前的信号量是不一样的。

1、通信模型


2、直接与间接通信


左边是间接通信,右边是直接通信。左边进程A先把消息发送到内核,内核再把消息发给B。


对于直接通信来说,链路的建立一定要通过操作系统。因为打破了进程之间的隔离,而操作系统拥有最高的权限。



3、阻塞与非阻塞

对于进程间的通信,有两个很重要的概念:进程间消息的传递,可以是阻塞的或者是非阻塞的。阻塞被认为是同步的,非阻塞被认为是异步的。 


4、通信链路缓冲

有以下几种缓存的容量情况。缓存的意义在于,发送方和接收方的动作也许并不是同步的,也许处理的速度一快一慢等情况,这个时候借助缓存就很有必要。一般情况都是第二种情况。


5、四种进程间通信的手段(https://www.cnblogs.com/LUO77/p/5816326.html讲得很好)

第一到第三种都是间接通信。第四种是直接通信。

(1)信号。信号主要是Linux的机制

信号是Linux系统中用于进程之间通信或操作的一种机制,信号可以在任何时候发送给某一进程,而无须知道该进程的状态。如果该进程并未处于执行状态,则该信号就由内核保存起来,知道该进程恢复执行并传递给他为止。如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。

 

Linux提供了几十种信号,分别代表着不同的意义。信号之间依靠他们的值来区分,但是通常在程序中使用信号的名字来表示一个信号。在Linux系统中,这些信号和以他们的名称命名的常量被定义在/usr/includebitssignum.h文件中。通常程序中直接包含<signal.h>就好。

 

信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式,信号可以在用户空间进程和内核之间直接交互。内核也可以利用信号来通知用户空间的进程来通知用户空间发生了哪些系统事件。信号事件有两个来源:

1)硬件来源,例如按下了cltr+C,通常产生中断信号sigint

2)软件来源,例如使用系统调用或者命令发出信号。最常用的发送信号的系统函数是kill,raise,setitimer,sigation,sigqueue函数。软件来源还包括一些非法运算等操作。

 

一旦有信号产生,用户进程对信号产生的相应有三种方式:

1)执行默认操作,linux对每种信号都规定了默认操作。

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

3)忽略信号,当不希望接收到的信号对进程的执行产生影响,而让进程继续执行时,可以忽略该信号,即不对信号进程作任何处理。<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值