Когда выделяется куча памяти для процесса? Что происходит в системном вызове exec? - PullRequest
0 голосов
/ 06 декабря 2010

Пожалуйста, потерпите меня, потому что я не очень хорошо разбираюсь в вопросах.и, насколько мне известно, это не повторяющийся вопрос.и наверняка это не домашняя работа.

Когда мы вызываем fork, создается поток, который разделяет память кучи с родительским процессом.что произойдет, если я наложу адресное пространство этого потока другим образом процесса (используя exec)

1), каждый сегмент будет перезаписан соответствующим сегментом нового процесса или, как это будет, полное виртуальное адресное пространство будетперезаписаны полным адресным пространством нового процесса?

2) будет ли ОС выделять дополнительную память для этого нового процесса ?& heap (ранее общедоступный) больше не будет доступен для нового процесса?

3) вся эта путаница состоит в том, что я не знаю, имеет ли исполняемый файл (готовый к загрузке) сегменты кучи или нет.

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Fork создает память, которая помечается как копия при записи, поэтому процессы не могут влиять друг на друга по этому пути.

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

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

РЕДАКТИРОВАТЬ: Я думаюо третьем пункте вы хотите знать следующее: новый процесс инициализируется с новой пустой областью кучи.Но он, вероятно, имеет некоторые выделения, выполняемые библиотекой времени выполнения до вызова main ().

1 голос
/ 06 декабря 2010

Fork создает память, которая копируется при записи - при запуске exec страницы перезаписываются, но, поскольку они помечаются как копии при записи, новые страницы выделяются для дочернего процесса.Старые страницы больше не доступны.

Больше информации из Википедии: http://en.wikipedia.org/wiki/Fork_(operating_system)#Fork_and_page_sharing

...