莱昂氏UNIX源代码分析九 第8章 进 程 管 理.pdf
文本预览下载声明
下载
第8章 进 程 管 理
进程管理关系到在多个进程之间共享处理机和主存,这些进程可被视为是这些资源的竞
争者。
在初启使用资源的进程时,或者由于其他原因,经常要作出重新分配资源的决定。
8.1 进程切换
一个进程调用s w t c h ( 2 1 7 8 ) ,s w t c h又调用“r e t u ”( 0 7 4 0 )可挂起自身,也就是释放处理机。
例如若一个进程已到达它不能超过的某个点,这时它就要调用“ s l e e p ”( 2 0 6 6 ) ,而s l e e p
则调用“s w t c h ”。
另外,一个在核心态下运行的进程,当它将要转入用户态之前,会测试变量“ r u n r u n ”,
如果其值非 0 ,则意味着更高优先权的进程已为运行准备就绪。此时该核心态进程也将调用
“s w t c h ”。
“s w t c h ”在“p r o c ”表中搜索其“p _ s t a t ”等于“S R U N”,其“p _ f l a g ”中设置了“S L O A D ”
位的各进程,并从中选择其“p _ p r i ”最小的进程,然后将控制转移给被选中的进程。
对于每一个进程的“ p_ p r i ”值,系统要经常重新进行计算,为此目的使用的过程是
“s e t p r i ”( 2 1 5 6 ) 。显然,“s e t p r i ”使用的算法具有重要影响。
调用“s l e e p ”挂起自身的进程可由另一个进程唤醒而返回到准备运行状态。在进行中断
处理时经常发生这种情况,此时处理中断的进程直接调用“ s e t r u n ”( 2 1 3 4 )或先调用“w a k e u p ”
( 2 11 3 ) ,然后由“w a k e u p ”调用“s e t r u n ”。
8.2 中断
应当注意一个硬件中断 (请参见第9 章) 并不会直接造成对“ s w t c h ”或其等效例程的调用。
一个硬件中断使一个用户进程转变为一核心进程,正如上面刚刚提到的,在它处理完中断后
可能不返回到用户态而是调用“ s w t c h ”。
若一核心态进程被中断,那么在中断处理结束后,该核心态进程一定回到它被中断的点
继续运行。这一点对理解U N I X如何避免很多与“临界区” (critical sections)相关的陷井是很重
要的。本章最后部分将对临界区进行讨论。
8.3 程序交换
一般而言,内存容量并不足以让所有进程的映像同时驻留其中,于是某些数据段就是被
“换出”(swapped out) ,写到磁盘上一个被称之为磁盘交换区(disk swapping area) 的区域中。
264 下篇 莱昂氏UNIX源代码分析
下载
存放在磁盘期间,进程映像相对而言是不可存取的,而且确实是不可执行的。因此,驻
在内存中的进程映像集应当定期更改,其方法是将内存中的某些进程映像换出,将存放在磁
盘交换区中的某些进程映像换进。
关于进程映像换进换出的很多决策都是由过程“ s c h e d ”( 1 9 4 0 )作出的,在第 1 4章将对此
过程进行详细分析。
“s c h e d ”是由#0进程执行的。# 0进程完成其初始任务后起两种作用。一种作用是调
度进程 ( s c h e d u l e r ) ,也就是一个正常的核心态进程;另一种是在不知不觉之中担任
“s w t c h ”的中间进程 ( 已在第7 章中讨论了 s w t c h ) 。因为过程“ s c h e d ”决不终止,所以核
心态# 0 进程也决不会完成其任务,随之而来的结果是:不会有在用户态下运行的# 0 进
程。
8.4 作业
在U N I X 中没有作业的概念,至少是没有传统批处理系统中作业的概念。
任一进程在任一时刻都可创建 ( f o r k ) 它自身的一个副本,而且基本上没有多少延迟,
因而也就创建了一个新作业的等价物。 U N I X 中没有作业调度、作业类之类的活动和概
念。
8.5 汇编语言过程
显示全部