前置知识
进程
逻辑控制流(简称逻辑流) CSAPP P508: 一系列的程序计数器PC的值唯一地对应于包含在程序的可执目标文件中的指令或包含在运行时动态链接到程序的共享对象指令。这个PC值的序列叫逻辑控制流
一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地运行。多个流并发地执行的现象也称为并发。
并行流是并发流的真子集。如果两个流并发地运行在不同的处理器核或计算机上,那么我们称它们为并行流,这两个流被称为并行地运行。多个流并行地执行的现象也称为并行
系统中的每个程序都运行在某个进程的上下文中。上下文是由程序正确运行所需的状态组成的,这个状态包括存放在内存中的代码和数据,它的栈,通用目的寄存器,程序计数器,环境变量,打开文件描述符的集合。
进程提供给应用程序的关键抽象:
- 一个独立的逻辑控制流
- 一个私有的地址空间
信号:一种更高层的软件形式的异常,称为Linux信号,允许进程或内核中断其他进程。
一个发出而没有被接收的信号叫做待处理信号(pending signal)。在任何时刻,一种类型至多只会有一个待处理信号。如果一个进程有一个类型为上的待处理信号,那么任何接下来发送到这个进程的类型为左的信号都不会排队等待;它们只是被简单地丢弃。
内核为每个进程在 pending 位向量中维护着待处理信号的集合。只要传送了一个类型为 k 的信号,内核就会设置 pending 中的第 k 位。
个进程可以有选择性地阻塞接收某种信号。当一种信号被阻塞时,它仍可以被发送,但是产生的待处理信号不会被接收,直到进程取消对这种信号的阻塞
内核为每个进程在blocked位向量中维护着被阻塞的信号集合。
当内核把进程 p 从内核模式切换到用户模式时(例如,从系统调用返回或是完成了一次上下文切换),它会检查进程 p 的未被阻塞的待处理信号的集合(pending &~blocked)。
如果这个集合为空(通常情况下),那么内核将控制传递到 p 的逻辑控制流中的下一条指令。
然而,如果集合是非空的,那么内核选择集合中的某个信号 k (通常是最小的 k),并且强制 p 接收信号 k。收到这个信号会触发进程采取某种行为。一旦进程完成了这个行为,那么控制就传递回 p 的逻辑控制流中的下一条指令
标签:CSAPP,控制流,待处理,编程,并发,内核,信号,进程 From: https://www.cnblogs.com/cilinmengye/p/18548242