【问题标题】:Process state kept in PCB and thread state kept in TCB进程状态保存在 PCB 中,线程状态保存在 TCB 中
【发布时间】:2023-03-27 20:01:01
【问题描述】:

假设进程 p0 已经创建。 P0 有两个线程(主线程)t0 和 t1。所以某处有 p0 的 PCB0,t0 的 TCB0 和 t1 的 TCB1。 (为简单起见,有 5 种执行状态:创建、就绪、运行、阻塞、终止)

  1. 当至少有一个线程处于运行状态时,p0 处于运行状态?

  2. 当然,在 TCB 中必须有一个线程状态字段。如果p0状态可以直接从它的线程状态计算出来:PCB中是否有执行状态字段,为什么?

  3. 如果 2 中的答案是肯定的:每次线程状态发生变化时,我们是否必须检查所有进程线程的状态以使 PCB.state 保持最新?这不是多余的吗?

【问题讨论】:

  • 当一个进程不是一个执行单元时,为什么它需要一个执行状态?
  • 我本可以问你的问题。它的分类更全面。

标签: operating-system


【解决方案1】:

当至少有一个线程处于运行状态时,p0 处于运行状态 运行状态?

不是每次。进程状态和线程状态可以不同。因此,当线程在运行时,p0 没有必要保持运行状态,它可以处于阻塞或就绪状态。线程和进程之间可能出现的一些情况:

进程处于就绪状态,其中一个进程的线程处于运行状态。

进程被阻塞在阻塞状态,进程的一个线程处于运行状态。

例如当线程应用程序作为包含单个线程的进程启动时。此时进程处于运行状态。然后应用程序使用用户级线程库来创建额外的线程。现在当线程 A 开始运行时,它将进入运行状态。假设线程 A 进行 I/O 系统调用。在这种情况下,控制权被转移到阻塞进程的内核。在这种情况下,线程 A 仍在运行,即使进程处于阻塞状态。这是进程被阻塞但线程正在运行的示例之一。

肯定在 TCB 中必须有一个线程状态字段。

是的,tcb 中有状态字段(例如 running 、 terminate 、 ready 、 block 等)。

PCB中是否存在执行状态字段,为什么?

是的,PCB 中也有状态场。但它不是从 tcb 状态计算出来的,因为正如我所说的那样,两种状态都可以不同。线程通常会调用不同的过程,因此会调用不同的执行历史。

希望你对我的回答满意。祝你好运:-)

--->Check this link for reference

---> check link for content of TCBPCB

【讨论】:

  • 我可以对否决票发表评论,以便我改进答案吗?
  • 我正在更新答案,如果您认为此答案错误,请阅读参考资料。
  • 我只回答了第一个问题,而不是每个问题我希望您重新考虑您的否决决定
  • 感谢您考虑否决这个答案。我非常感谢您。:-)
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多