进程调度 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 全局变量 runrun,是申请进程调度的标志
- 置runrun的时机
- 关于 setpri中置runrun情况 的说明
(不得不承认这种情况确实诡异)
- 参看系统初启
主要由 sched 完成
- 找到盘交换区上 进程状态为SRUN 且 驻留时间最长 的进程(称为调入进程)
- 若没找到,则睡眠在runout,唤醒后重新进行整个过程
- 若找到,则
- 若 能从内存分配足够的空间,则从 盘交换区 载入进程图像 到内存,重新进行整个过程
- 若 不能从内存分配空间,则继续进行
- 从内存 找到 状态为SWAIT或SSTOP 且 不含SYS或SLOCK标志 的进程(称为调出进程)
- 若找到,则 将该进程 从内存 调出到 盘交换区,重新进行整个过程
- 若找不到,则继续
- 若 调入进程 的驻留时间小于3秒,则睡眠在runin,唤醒后重新进行整个过程;否则继续
- 从内存 找到 状态为SRUN或SSLEEP 且 驻留时间最长 的进程(称为调出进程2)
- 将 调出进程2 从内存 调出到 盘交换区,重新进行整个过程
- 公式:
- 说明: