Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix进程图混乱_Unix_Process - Fatal编程技术网

Unix进程图混乱

Unix进程图混乱,unix,process,Unix,Process,您能告诉我Unix进程图中两个红色箭头之间的区别吗? 为什么抢占进程直接进入用户运行而不重新调度?我不太明白。为什么抢占内存和准备运行内存用虚线连接? 提前谢谢。我想这张图是假的。僵尸进程应该结束,但事实并非如此。否则,僵尸进程将累积,而它们不会累积。抢占进程已准备好在内存中运行,这就是为什么在该图上抢占和准备在内存中运行状态之间有一条虚线的原因。CPU密集型进程通常在整个时间段内执行工作并使用CPU,直到在硬件级别触发计时器并导致内核抢占进程。这并不会降低进程的运行准备,因为在抢占进程的过程中

您能告诉我Unix进程图中两个红色箭头之间的区别吗? 为什么抢占进程直接进入用户运行而不重新调度?我不太明白。为什么抢占内存和准备运行内存用虚线连接?
提前谢谢。

我想这张图是假的。僵尸进程应该结束,但事实并非如此。否则,僵尸进程将累积,而它们不会累积。

抢占进程已准备好在内存中运行,这就是为什么在该图上抢占和准备在内存中运行状态之间有一条虚线的原因。CPU密集型进程通常在整个时间段内执行工作并使用CPU,直到在硬件级别触发计时器并导致内核抢占进程。这并不会降低进程的运行准备,因为在抢占进程的过程中,内核保存了上下文切换所需的所有数据结构


但是,抢占进程不一定准备好在用户模式下运行。相反,内核可能会抢占自身,因为当网络数据包到达、磁盘读取完成、计时器触发或其他事件导致抢占时,内核正在执行某些工作。如果进程被抢占时最初是在用户模式下运行的(我在第一段中描述的情况),那么每当调度器决定它应该再次运行时,它就会返回到用户模式。那是最左边的红色箭头。另一方面,如果进程在内核模式下运行时被抢占,那么每当调度程序决定它应该再次运行时,它就会返回内核模式。这是另一个红色箭头。

我认为这不是离题。在Unix测试之前学习时,我想到了这个问题。所有已完成的进程都是僵尸,直到它们被父进程捕获。是的,但给定一个状态图,可以表示所有状态,包括最终/终端状态,即使它们是那种状态的结束。进程被破坏后没有状态,这就是当它完成后被父母收回时会发生的事情。胡说。有一个转换(脱离它),所以有一个(不存在)状态。让我们称之为epsilon状态。@MaciejZiarko调度程序控制所有进程何时运行,因此在这两种情况下,都会在进程重新开始运行之前调用调度程序。然而,在用户模式下运行(通过“返回到用户”)和在内核模式下运行(通过“重新调度”)之间存在差异。好的,我理解你的意思,你真的帮助了我。但我认为图表的这一部分令人困惑。谢谢该图表明,运行的用户进程通过内核模式(并没有指向preempetd的直接箭头)被抢占,但当返回到运行的用户时,它不需要内核模式。这是真的吗?调度器是否在内核模型中运行?我想是的。@MaciejZiarko调度程序确实在内核模式下运行,内核管理用户模式和内核模式之间的转换。因此,为了回到用户模式,内核做了一些工作。我认为,如果将抢占和准备在内存中运行的状态合并到一个状态中,那么该图将更加清晰。