我在一个虚拟的类Unix操作系统(OS161)上工作,我想实现与Unix类似的进程,即fork()、execv()、getpid()、waitpid()。
首先,我需要真正了解进程的概念,并为每个进程赋予自己的进程ID,一些唯一的整数值来区分它们。据我所知,每个进程都与自己关联一个地址空间,以及至少一个线程,甚至更多。现在让我们将其保持为1。
因此,我创建进程的第一个想法是为每个线程和地址空间分配一个唯一的进程ID,并创建一个全局列表变量(哈希表?链表?)包含所有的PID。具体地说,我目前有:
struct thread;
struct addr_space; 因此,我可以进入这些结构,并添加一个"PID“字段作为整数。或者,我想我可以创建一个包装器"struct process“,并包含一个线程(或线程列表)和一个地址空间作为成员。
注意:目前我拥有的线程结构有一个地址空间结构作为它的成员之一……这是否意味着它本质上已经是一个过程?我可以提供更多细节,以供参考,我正在与OS161合作
最后,还有我应该如何存储PID的问题。我非常确定它必须是某种类型的全局列表结构(类似于与线程相关的各种队列),但不确定哪种结构是可取的。
干杯。
发布于 2012-02-21 12:21:04
在Unix系统中,进程和线程之间有一个奇怪的区别,因为它们本质上都是由相同的结构管理的(Linux中的task_struct)。
属于同一进程的线程共享一个PID,并简单地使用父/子指针来跟踪谁产生了谁来进行清理和创建。哈希表可能是存储它们的一个很好的选择。只要您的地址空间保持适当的VM映射,那么您应该可以使用类似的方案。
发布于 2012-02-21 12:23:55
而不是包含PID的结构,我倾向于从进程结构表的角度考虑,并使用该表中的索引作为进程ID。
https://stackoverflow.com/questions/9372030
复制相似问题