Совместное использование сегмента кода между двумя процессами - PullRequest
2 голосов
/ 28 июня 2010

Предположим, что мы запускаем два процесса подряд, скажем: -

$ grep abc abc.txt ==> pid 100
$ grep def def.txt ==> pid 101

Я прочитал в книге "Начало программирования Linux" главу № 11, что раздел кода процессов будет общим, так как он доступен только для чтения. Это так? Я думаю, что если grep скомпилирован только как разделяемая библиотека, то раздел кода будет общим.

Еще один вопрос, в случае разделяемых библиотек, как ОС узнает, что библиотека уже загружена или нет? Предположим, что если 2 процесса одновременно вызывают функцию общей библиотеки, как преобразовать виртуальный адрес двух процессов в физический адрес, указывающий одно и то же место в ОЗУ?

Ответы [ 2 ]

4 голосов
/ 28 июня 2010

ОС больше не загружает файлы в память.Вместо этого файлы отображены в память .Это означает, что индекс и смещение файла на диске будут связаны со страницей в памяти.Это позволяет довольно просто узнать, была ли загружена какая-то часть файла.Кроме того, вы можете хранить только часть файла в оперативной памяти (после установки вам больше не нужен код установки, поэтому вы можете «забыть» об этом и использовать эти страницы для чего-то более полезного).

2 голосов
/ 28 июня 2010

Библиотеки и исполняемые файлы не загружаются, но отображаются в память с помощью mmap (2) .По сути, когда вы выполняете mmap () что-то с флагом MAP_SHARED, другие, отображающие один и тот же файл, получат те же страницы памяти.

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