Я работаю на фиктивной Unix-подобной ОС (OS161) и хочу реализовать процессы, аналогичные Unix, то есть fork (), execv (), getpid (), waitpid ().
Для начала мне нужно иметь представление о процессе и дать каждому свой идентификатор процесса, какое-то уникальное целочисленное значение для их дифференциации.Из того, что я знаю, каждый процесс ассоциирует с собой адресное пространство и хотя бы один поток;возможно больше.Давайте пока держим это в одном.
Итак, моя первая мысль о создании понятия процесса - дать каждому потоку и адресному пространству его связь с уникальным идентификатором процесса и создать глобальную переменную списка (хеш-таблицу? Связанный список?), Содержащуювсе PID.В частности, в настоящее время у меня есть в наличии:
struct thread;
struct addr_space;
Так что я мог бы войти в эти структуры и добавить поле "PID" в виде целого числа.В качестве альтернативы я подумал, что я мог бы просто создать оболочку «struct process» и включить поток (или список потоков) и адресное пространство в качестве членов.
[Примечание: в настоящее время в структуре потока у меня есть структура адресного пространства в качестве одного из его членов ... Означает ли это, что это по сути уже процесс?Я могу предоставить более подробную информацию, для справки я работаю с OS161]
Наконец, есть проблема, как я должен хранить PID.Я почти уверен, что это должна быть какая-то глобальная структура списка (похожая на различные очереди, связанные с потоками), но не уверен, что было бы целесообразно.
Приветствия.