操作系统通信方式可以分为两种方式直接通信和间接通信,对于直接通信进程A将通知进程B ,进程必须指明发送方或者接收方来发送/获取消息。对于间接通信进程A将通知消息发送操作系统内存种的某个区域,由进程B从该区域获取消息,发送消息方只负责把消息放到指定位置,接收方只负责在对应的位置不断地检查是否有新消息进入,从而触发事件。消息传递可以是阻塞/同步的。A确认完B接收到了消息才会继续执行A的任务,也可以是非阻塞/异步的A发送消息给B 可以继续执行A的任务。
目录
一、信号 Signal
信号是一个很小的一个bit,不能传递数据。通过通知应用程序有一个紧急的事情需要处理,中断应用程序,这个中断不是硬件中断而是软件意义上的信号中断。信号有多种类型例如进程终止相关的信号,异常信号,kill 信号,键盘中断信号等。接收该信号的进程B可以使用操作系统的默认操作,也可以用catch捕捉信号等。进程A通过操作系统给B发送信号的过程中。操作系统确认PCB和信号处理函数,找到进程B,修改进程B的栈空间,退出对应栈帧执行信号处理函数。由于要修改别的进程的栈空间,通常正常的应用程序不允许这么操作,除了木马和病毒。
二、管道
在Unix设计过程中,一个小的应用程序完成一个小的功能,但是Unix科学家想要把这些小的功能灵活地组合起来,把前面一个功能的输出,定向程下一个功能的输入。之后才有了Unix和Linux的管道符“|”。例如Linux命令 history | grep java