About 进程挂起

对于挂起,一直处于模糊理解 状态,知道有这么个东西,而不知道它具体如何工作的,更迷惑这个挂起和swap 有什么关系;
这里先说一下自己的理解,而后再贴上博文的内容。

挂起就是由于种种原因,我们让进程处于静止状态,说白了就是让进程不能立即执行,当然我们将一个进程的全部内存都放入虚存中,当然也是满足这个条件的,所以我们将全部放入虚存中的就绪进程叫做静止就绪状态;
而我们平常主动挂起的进程一定会放入虚存中吗,Yes,答案是肯定的。对于一个被挂起的进程,系统真的没有任何必要将它还放在内存中,这样太浪费资源了,所以系统会果断的将这些挂起的进程放入swap区。So,这样挂起和虚存就有机的结合起来了。

About 进程挂起_第1张图片

到目前为止,挂起进程的概念与不在内存中的进程概念是等价的。一个不在内存中的进程,不论它是否在等待一个事件,都不能立即执行。

我们可以总结一下挂起进程的概念。首先,按照以下特点定义挂起进程:

1)进程不能立即执行。

2)进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即被执行。

3)为阻止进程执行,可以通过代理把这个进程置于挂起状态,代理可以是进程自己,也可以是父进程或操作系统。

4)除非代理显式地命令系统进行状态转换,否则进程无法从这个状态中转移。

表3.3 列出了进程的一些挂起原因。已经讨论过的一个原因是提供更多的内存空间,这样可以调入一个就绪/挂起态进程,或者增加分配给其他就绪态进程的内存。操作系统因为其他动机而挂起一个进程,例如,记账或跟踪进程可能用于监视系统的活动,可以使用进程记录各种资源(处理器、内存、通道)的使用情况以及系统中用户进程的进行速度。在操作员控制下的操作系统可以不时地打开或关闭这个进程。如果操作系统发现或怀疑有问题,它可以挂起进程。死锁就是一个例子,将在第6 章讲述。另一个例子是,如果在进程测试时检测到通信线路中的问题,操作员让操作系统挂起使用该线路的进程。

另外一些原因关系到交互用户的行为。例如,如果用户怀疑程序中有缺陷,他(她)可以挂起执行程序并进行调试,检查并修改程序或数据,然后恢复执行;或者可能有一个收集记录或记账的后台程序,用户可能希望能够打开或关闭这个程序。

表3.3 导致进程挂起的原因

About 进程挂起_第2张图片

最后,父进程可能会希望挂起一个后代进程。例如,进程A 可以生成进程B,以执行文件读操作;随后,进程B 在读文件的过程中遇到错误,并报告给进程A;进程A 挂起进程B,调查错误的原因。
时机的选择也会导致一个交换决策。例如,如果一个进程周期性地被激活,但大多数时间是空闲的,则在它在两次使用之间应该被换出。监视使用情况或用户活动的程序就是一个例子。

在所有这些情况中,挂起进程的活动都是由最初请求挂起的代理请求的。


你可能感兴趣的:(os)