文档详情

莱昂氏UNIX源代码分析九 第8章 进 程 管 理.pdf

发布:2017-12-24约8.45千字共6页下载文档
文本预览下载声明
下载 第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 汇编语言过程
显示全部
相似文档