【发布时间】:2022-01-25 03:15:07
【问题描述】:
如标题。
有没有什么操作系统实现在运行单线程程序时,操作系统只使用PCB(Process Control Block)来存储所有相关信息?因为我从其他地方听说每个操作系统在运行单线程程序时都会在 PCB 下创建一个 TCB(线程控制块)。
【问题讨论】:
标签: operating-system
如标题。
有没有什么操作系统实现在运行单线程程序时,操作系统只使用PCB(Process Control Block)来存储所有相关信息?因为我从其他地方听说每个操作系统在运行单线程程序时都会在 PCB 下创建一个 TCB(线程控制块)。
【问题讨论】:
标签: operating-system
单线程进程可以只使用PCB而不接触TCB是否正确?
4 种常见的可能性是:
a) 线程是可执行的东西,进程只是一个容器(包含一个虚拟地址空间、至少一个线程、文件句柄等)。在这种情况下,您可能会拥有 PCB 和 TCB 之类的东西(即使进程只有一个线程)。大多数现代操作系统都是这样的。
b) “任务”是可执行的东西。在底层“任务”之上模拟进程、线程和一堆奇怪的东西(例如共享文件句柄但不共享虚拟地址空间的任务)。在这种情况下,PCB 和 TCB(线程控制块)没有意义(你会有一个“任务控制块”,就像所有东西合并在一起一样)。现代 Linux 就是这样。
c) 从内核的角度来看,进程是可执行的东西,线程不存在/不受支持(但可以在用户空间中模拟)。在这种情况下,TCB 没有意义。旧的 Unix 系统(包括旧版本的 Linux)是这样的。
d) 只有一个进程,线程不存在;没有PCB,也没有TCB。 MS-DOS 就是这样的。
请注意,也有不常见的可能性。
【讨论】: