【问题标题】:Operating systems: implementing process IDs操作系统:实现进程 ID
【发布时间】:2012-03-11 10:29:21
【问题描述】:

我正在开发一个虚拟的类 Unix 操作系统 (OS161),我希望实现类似于 Unix 的过程,即 fork()、execv()、getpid()、waitpid()。

首先,我需要有一个进程的概念,并给每个进程一个自己的进程 ID,一个唯一的整数值来区分它们。据我所知,每个进程都与自己关联一个地址空间,以及至少一个线程;可能更多。让我们暂时保留一个。

所以我创建进程概念的第一个想法是为每个线程和地址空间赋予一个唯一的进程 ID,并创建一个包含所有 PID 的全局列表变量(哈希表?链表?) .特别是,我目前有空:

struct thread; 
struct addr_space; 

所以我可以进入这些结构并添加一个“PID”字段作为整数。或者,我想我可以创建一个包装器“结构进程”并包含一个线程(或线程列表)和一个地址空间作为成员。

[注意:目前我拥有的线程结构有一个地址空间结构作为其成员之一......这是否意味着它本质上已经是一个进程?我可以提供更多详细信息,以供参考,我正在使用 OS161]

最后,还有我应该如何存储 PID 的问题。我很确定它必须是某种全局列表结构(类似于与线程相关的各种队列),但不确定什么是可取的。

干杯。

【问题讨论】:

  • 这是什么语言?请添加语言标签并编辑您的问题以使其更加明显。我假设这是 C 或 C++?

标签: c multithreading process operating-system


【解决方案1】:

我倾向于考虑进程结构表,而不是包含 PID 的结构,并使用该表的索引作为进程 ID。

【讨论】:

  • 这是我的默认思维方式,所以我希望这就是提问者的意思。我的回答不是很具体:)
【解决方案2】:

在 Unix 系统中,进程和线程之间有一个奇怪的区别,因为它们本质上都由相同的结构(Linux 中的 task_struct)管理。

属于同一进程的线程共享一个 PID,并简单地使用父/子指针来跟踪谁产生了谁进行清理和创建。哈希表可能是存储它们的好选择。只要您的地址空间保持适当的 VM 映射,那么您应该可以使用类似的方案。

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 2016-06-08
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2016-01-01
    相关资源
    最近更新 更多