Как системы Unix отслеживают разделяемую память, когда процессы fork()?

Процесс A создает область общей памяти и делит ее с процессом B. Затем Процесс A разветвляется и тем самым создает Процесс C. По определению, C теперь имеет доступ к тем же областям общей памяти. Если A умирает, C и B по- прежнему имеют доступ к области памяти. Только когда С и В тоже умирают, физическая память снова становится свободной.

Как системы Unix достигают этого? Хранят ли они информацию о том, какая память кому предназначена для каждого процесса или эта информация глобальна?

1 ответ

Решение

Область общей памяти имеет счетчик ссылок. Он увеличивается каждый раз, когда процесс открывает общую память или получает ее, будучи разветвленным от процесса, у которого она была открыта. Он уменьшается, когда процесс закрывает общую память или завершает работу. Когда счетчик становится равным 0, область разделяемой памяти отбрасывается.

Другие вопросы по тегам