操作系统:实现进程ID

时间:2012-02-21 04:07:46

标签: c multithreading process operating-system

我正在开发一个虚拟的类Unix操作系统(OS161),我想实现类似于Unix操作的过程,意思是fork(),execv(),getpid(),waitpid()。

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

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

struct thread; 
struct addr_space; 

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

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

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

干杯。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

而不是包含PID的结构,我倾向于根据流程结构表来思考,并使用该表中的索引作为流程ID。