睡眠原因 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 定义在systm.h
- tout是定时睡眠的睡眠原因
- 用户调用 系统调用sleep,如sleep(1) (进程睡眠1秒),在Unix内核实际调用sslep函数,调用进程在tout上睡眠
- 在调用sslep函数而睡眠的所有进程中,tout为最早的睡眠到期时间
- 类型为struct buf 的 变量 作为睡眠原因
- 是因 等待该buf 的I/O操作完成 而睡眠
- 若 bfreelist 作为睡眠原因,是因为 自由队列 为空
struct buf.b_flags
- 等待swbuf可用/IO完成而进入睡眠
- 等待 超级块 的空闲块数组可用而进入睡眠
- 参看文件系统
- 等待 超级块 INODE数组可用而进入睡眠
- 参看文件系统
- 等待 该inode结构 而进入睡眠
- 参看文件系统
- 等待 写管道 而进入睡眠
- 参看管道
- 等待 读管道 而进入睡眠
- 参看管道
- 当盘交换区上有进程想调入内存却无法被调入时,0#进程在runin上睡眠
- 参看进程调度之0#进程
- 当盘交换区上没有就绪进程可以调入内存时,0#进程在runout上睡眠
- 当前进程 在等待子进程结束
- 参看wait
- 因 等待 I/O字符缓存队列 而睡眠
- 参看 字符设备管理
- 需要等待较长时间才进行的事务处理,一般用于与外设同步,如在pc-11驱动函数pcopen中使用
- 参看 clock pcopen