Операционные системы: реализация идентификаторов процессов - PullRequest
1 голос
/ 21 февраля 2012

Я работаю на фиктивной Unix-подобной ОС (OS161) и хочу реализовать процессы, аналогичные Unix, то есть fork (), execv (), getpid (), waitpid ().

Для начала мне нужно иметь представление о процессе и дать каждому свой идентификатор процесса, какое-то уникальное целочисленное значение для их дифференциации.Из того, что я знаю, каждый процесс ассоциирует с собой адресное пространство и хотя бы один поток;возможно больше.Давайте пока держим это в одном.

Итак, моя первая мысль о создании понятия процесса - дать каждому потоку и адресному пространству его связь с уникальным идентификатором процесса и создать глобальную переменную списка (хеш-таблицу? Связанный список?), Содержащуювсе PID.В частности, в настоящее время у меня есть в наличии:

struct thread; 
struct addr_space; 

Так что я мог бы войти в эти структуры и добавить поле "PID" в виде целого числа.В качестве альтернативы я подумал, что я мог бы просто создать оболочку «struct process» и включить поток (или список потоков) и адресное пространство в качестве членов.

[Примечание: в настоящее время в структуре потока у меня есть структура адресного пространства в качестве одного из его членов ... Означает ли это, что это по сути уже процесс?Я могу предоставить более подробную информацию, для справки я работаю с OS161]

Наконец, есть проблема, как я должен хранить PID.Я почти уверен, что это должна быть какая-то глобальная структура списка (похожая на различные очереди, связанные с потоками), но не уверен, что было бы целесообразно.

Приветствия.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Вместо структуры, содержащей PID, я склонен думать о терминах таблицы структур процессов и использовать индексы в этой таблице в качестве идентификаторов процессов.

1 голос
/ 21 февраля 2012

В системах Unix существует странное различие между процессом и потоками, поскольку они по сути управляются одной и той же структурой (task_struct в Linux).

Потоки, принадлежащие одному и тому же процессу, используют общий PID и просто используют указатели родителя / потомка для отслеживания того, кто кого создал для очистки и создания. Хеш-таблица, вероятно, является хорошим вариантом для их хранения. Пока в вашем адресном пространстве сохраняются соответствующие сопоставления виртуальных машин, с аналогичной схемой у вас все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...