gpt4 book ai didi

c - 操作系统 : implementing process IDs

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:47 24 4
gpt4 key购买 nike

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

首先,我需要真正了解进程的概念,并为每个进程赋予自己的进程 ID,一些唯一的整数值来区分它们。据我所知,每个进程都与一个地址空间和至少一个线程相关联;可能更多。让我们暂时保持一个。

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

struct thread; 
struct addr_space;

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

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

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

干杯。

最佳答案

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

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

关于c - 操作系统 : implementing process IDs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com