睡眠原因 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Table of Contents

睡眠原因

tout

  • 定义在systm.h
  • tout是定时睡眠的睡眠原因
  • 用户调用 系统调用sleep,如sleep(1) (进程睡眠1秒),在Unix内核实际调用sslep函数,调用进程在tout上睡眠
  • 在调用sslep函数而睡眠的所有进程中,tout为最早的睡眠到期时间

struct buf

  • 类型为struct buf 的 变量 作为睡眠原因
  • 是因 等待该buf 的I/O操作完成 而睡眠

bfreelist

  • 若 bfreelist 作为睡眠原因,是因为 自由队列 为空

struct buf.b_flags

  • 等待swbuf可用/IO完成而进入睡眠

filsys.s_flock

  • 等待 超级块 的空闲块数组可用而进入睡眠
  • 参看文件系统

filsys.s_ilock

  • 等待 超级块 INODE数组可用而进入睡眠
  • 参看文件系统

struct inode

(struct inode)+1

  • 等待 写管道 而进入睡眠
  • 参看管道

(struct inode)+2

  • 等待 读管道 而进入睡眠
  • 参看管道

runin

  • 当盘交换区上有进程想调入内存却无法被调入时,0#进程在runin上睡眠
  • 参看进程调度之0#进程

runout

execnt

  • 当 当前调用exec的进程过多,则睡眠
  • 参看exec

struct proc

  • 当前进程 在等待子进程结束
  • 参看wait

ipc

  • 因 等待 ipc 可用/请求完成 而睡眠
  • 参看ptrace

struct clist

lbolt

  • 需要等待较长时间才进行的事务处理,一般用于与外设同步,如在pc-11驱动函数pcopen中使用
  • 参看 clock pcopen
⚠️ **GitHub.com Fallback** ⚠️