信号(Signal)

信号为异步事件通知机制,用于控制流管理、唤醒可中断睡眠、传达错误(如 SIGPIPE)。

  • 源码:os/src/ipc/signal.rs
  • 相关:调度器/等待队列、任务管理

概念与目标

  • 异步:可在目标任务不主动配合的情况下投递“待处理事件”。
  • 可中断:中断阻塞型系统调用/等待,返回中断错误码,交由上层恢复或重试。
  • 默认动作:对部分信号可定义缺省行为(忽略、终止等,具体以实现为准)。

关键组成

  • 待处理队列/位图:每个任务维护“待处理信号”集合。
  • 屏蔽/处理:任务可设置屏蔽集与(可选的)处理方式;未处理时采用默认动作。
  • 派发点:陷入返回(trap return)或显式检查点派发并执行处理逻辑。

常见语义

  • 投递:根据目标(任务/进程)查找对象,将信号标记为待处理并尝试唤醒。
  • 唤醒:若目标处于“可中断睡眠”,立即从等待队列移出并返回中断错误。
  • SIGPIPE:对无读者管道写入时由管道模块触发。
  • 不可屏蔽/强制:如 SIGKILL 之类(若实现)绕过屏蔽直接生效。

与调度/等待队列

  • 可中断睡眠通过 WaitQueue 实现,中断路径在唤醒后返回特定错误码,由上层重启或终止操作。

使用建议

  • 将信号用于控制流与唤醒;不要在信号处理上下文做复杂/阻塞操作。
  • 对可重启的阻塞调用,收到中断错误后按需重试。