【问题标题】:Unix Processes Diagram confusionUnix 进程图混乱
【发布时间】:2012-04-15 00:19:54
【问题描述】:

你能告诉我Unix进程图中的两个红色箭头有什么区别吗? 为什么抢占进程直接进入用户运行而不重新调度?我不太明白。为什么 Preempted 和 Ready to Run In Memery 用虚线连接? 提前致谢。

【问题讨论】:

  • 我认为这不是题外话。在 Unix > 测试之前学习时,我想到了这个问题。

标签: unix process


【解决方案1】:

一个被抢占的进程准备好在内存中运行,这就是为什么在这张图上的 Preempted 和 Ready to Run in Memory 状态之间有一条虚线。 CPU 密集型进程通常会在整个时间片内完成工作并使用 CPU,直到在硬件级别触发计时器滴答并导致内核抢占该进程。这并没有使进程准备好运行,因为在抢占进程的行为中,内核保存了上下文切换所需的所有数据结构。

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

【讨论】:

  • @MaciejZiarko 调度程序控制所有进程何时运行,因此在这两种情况下,调度程序都会在进程重新开始运行之前被调用。但是,区别在于在用户模式下运行(通过“返回给用户”)和在内核模式下运行(通过“重新调度”)。
  • 好的,我明白你的意思,你真的帮助了我。但我认为这部分图表令人困惑。谢谢!
  • 图表表明正在运行的用户进程通过内核模式被抢占(没有直接指向preempetd的箭头)但是当返回运行用户时它不需要内核模式。这是真的吗?调度程序是否在内核模型中运行?我想是的。
  • @MaciejZiarko 调度程序确实在内核模式下运行,内核管理用户模式和内核模式之间的转换。所以要回到用户模式,内核确实做了一些工作。如果将 Preempted 和 Ready to Run in Memory 状态组合成一个状态,我认为该图会更清晰。
【解决方案2】:

恕我直言,该图是伪造的。僵尸进程应该结束,但没有。否则僵尸进程会累积而不会累积。

【讨论】:

  • 所有完成的进程都是僵尸进程,直到它们被父进程收割。
  • 是的,但是给定一个状态图,可以说明所有状态,包括最终/终止状态,即使它们属于那种状态结束.
  • 进程销毁后没有状态,就是进程完成后被父进程回收时的状态。
  • 废话。有一个过渡(脱离它),所以有一个(不存在的)状态。我们称之为 epsilon 状态。
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2019-02-27
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多