process - 谁控制过程控制 block (PCB)?

标签 process operating-system kernel

最近在学习内核,发现一个问题,谁控制进程控制 block (PCB)?

内核还是进程本身?它在不同的平台上是否不同( windows/Linux )?

到目前为止,我知道PCB由硬件控制,但我无法得到正确的答案。

最佳答案

该进程完全是由操作系统内核专门创建和维护的软件抽象。进程控制 block 是表示操作系统中进程的数据结构。操作系统跟踪有关 PCB 中系统中运行的每个进程的所有必要信息。例如,在这个特定进程中运行哪些线程,它使用什么内存,哪个用户启动了这个进程,它拥有哪些特权。因此,每个操作系统都根据操作系统认为是一个进程来定义其私有(private)的 PCB 格式。

一些操作系统实现进程(Windows/Linux),而另一些则不这样做(MS-DOS)。甚至有维护线程但不维护进程的操作系统。不同的操作系统定义了不同的PCB格式。例如,Linux 实现了文件表作为进程抽象的一部分,但几乎所有微内核操作系统都不认为文件表是进程的一部分。传统 UNIX 系统不支持线程概念,因此没有跟踪进程中运行的线程。同时,现代 Linux 实现了线程并跟踪 PCB 中的所有相关数据。所有操作系统共享的进程抽象的唯一永久部分是私有(private)虚拟地址空间。

再一次,PCB 完全是软件抽象,而不是硬件抽象!我还没有看到处理器实现或直接支持流程。然而,在操作系统层面实现进程抽象通常需要一些硬件支持。例如,支持虚拟内存和不同级别的权限。

关于process - 谁控制过程控制 block (PCB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795024/

相关文章:

scala - Scala系统进程挂起

neo4j - 如何设置 Neo4j 开机自动启动?

linux - 在内核代码中禁用同步中断

linux - 如何在 mprotect 处理程序中获取当前程序计数器并更新它

android - 跨进程共享状态变量

c++ - Linux : How to detect a process that consumes the maximum memory and kill it?

android - Zygote 共享库处理

memory-management - ELF 头和进程虚拟内存中的不同地址

x86 - 操作系统的引导加载程序不起作用

c - Linux 内核空间中的动态内存分配