С чего начать при программировании алгоритмов синхронизации процессов, таких как клон / форк, семафоры - PullRequest
0 голосов
/ 30 марта 2010

Я пишу программу, которая имитирует синхронизацию процессов. Я пытаюсь реализовать технику форка и семафора в C ++, но у меня возникают проблемы при запуске. Я просто создаю процесс и отправляю его на форк с самого начала? Будет ли программа просто одним бесконечным циклом, который идет назад и вперед между родительскими / дочерними процессами? И как вы создаете идею «разделяемой памяти» в C ++, явного адреса памяти или просто некоторой глобальной переменной? Мне просто нужно получить общую структуру / представление о потоке программы. Любые ссылки будут оценены.

1 Ответ

1 голос
/ 30 марта 2010

Из вашего вопроса неясно, имеете ли вы в виду симуляцию или пытаетесь получить доступ к общим функциям синхронизации процессов из C ++. Ваша ссылка на fork предполагает, что Linux является вашей целью.

Как только вы создаете новый процесс, вы не имитируете синхронизацию процесса, вы используете собственные возможности синхронизации операционной системы.

В Linux, чтобы получить общую память, вы должны использовать mmap (возможно, с MAP_ANON) и затем вызывать fork. Полученная область памяти будет общей. Вы также можете использовать System V Shared Memory (системные вызовы, имена которых начинаются с 'shm'). После вызова fork дочерний объект становится копией родительского объекта, но обычные глобальные переменные не становятся общими: дочерний объект получает новую копию. Таким образом, потребность в ММАП или ШМ.

В Windows нет ничего похожего на fork. Вы должны использовать именованные объекты общей памяти или сопоставленные файлы, чтобы установить общую память. Новый процесс должен выполнить необходимые системные вызовы, чтобы открыть объект общей памяти или отобразить общий файл в его адресное пространство.

Если вы действительно хотите построить симулятор - отдельный процесс, который внутренне управляет процессами и общей памятью, вы можете выбрать одну из различных книг, описывающих внутреннюю работу Linux или Windows в этой области. 1010 *

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