Linux 内核中使用到异步机制的地方:
信号,这是一种进程间通信的异步机制 【通信】
epoll,这是一种高效I/O的异步通信机制 【I/O】
信号的本质:
软中断信号(signal,又简称为信号),用来通知进程发生了异步事件。
在软件层次上,信号是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。
信号是进程通信机制中唯一的异步通信机制。(一个进程不必通过任何操作来等待信号的到达,进程也不知道信号到底什么时候到达)
进程收到信号后,有3种处理方法:
1. 类似中断的处理程序。对于需要处理的信号,进程可以指定处理函数,由该函数去处理。
2. 忽略来的信号
3. 对所来信号保留系统的默认值(对大部分信号的缺省操作是让进程终止)
信号的种类:
1. 可靠信号与不可靠信号
2. 实时信号与非实时信号
不可靠信号:信号值小于SIGRTMIN的信号都是不可靠信号,不可靠 ---- 这些信号有可能丢失
可靠信号:由于上面的信号不可靠,所以对其进行改进和扩充,引入可靠信号,将信号值位于SIGRTMIN和SIGRTMAX之间信号定义为可靠信号(这些信号,支持排队,不会丢失)
早期Unix系统只定义了32种信号(这32种信号都有确定的用途和含义,并且每种信号都有各自默认的缺省操作,比如:按键盘的ctrl+c,会产生SIGINT信号,默认的缺省操作就是将 进程终止),这32种信号是非实时信号(非实时信号都不支持排队,都是不可靠信号),后32种信号是实时信号(实时信号都支持排队,都是可靠信号)
信号的生命周期:
对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:
原文地址:https://www.cnblogs.com/chen-cai/p/10521410.html