Системный вызов Vfork - PullRequest
       0

Системный вызов Vfork

1 голос
/ 22 февраля 2011

В системном вызове vfork родительские и дочерние процессы совместно используют страницы, и любое изменение глобальной переменной (скажем, дочерним процессом) также отражается на родительском процессе после его возврата.Теперь, если мы выполним системный вызов exec () из дочернего процесса, он загрузит указанную программу в адресное пространство дочернего процесса, когда родительский процесс снова станет активным, не обнаружит ли он поврежденные данные и стеккадры (с новым двоичным файлом, загруженным дочерним процессом).Пожалуйста, ответьте,

1 Ответ

0 голосов
/ 22 февраля 2011

Нет, ядро ​​организует, чтобы это не было проблемой.Я уже не помню точных подробностей, но общая процедура такова: когда процесс вызывает vfork, ядро ​​сохраняет указатель стека и ПК и выполняет часть настройки для дочернего процесса.Когда процесс, вызвавший vfork, вызывает execve, ядро ​​создает новое адресное пространство для нового образа программы вместо перезаписи адресного пространства вызывающего процесса.Затем он возвращает указатель стека родителя и ПК к тому, что было раньше, и родитель продолжает работу с точки vfork.

Онлайн-страницы для vfork неутешительно расплывчаты и имеют неприятные комментариио его опасности и отсутствии утилиты, что несправедливо - она ​​действительно более эффективна, чем fork, даже с разделением адресного пространства при копировании при записи, потому что ей не нужно очищать TLB или делать почти столько жеработают в ядре, и его семантика довольно одинакова для всех операционных систем, все еще широко используемых.Обработка ошибок - боль в заднице, но обработка ошибок с простым fork столь же плоха, если вы серьезно относитесь к этому.

[Кто-нибудь знает, безопасно ли выполнять настройку перенаправления ввода / вывода вмежду vfork и execve?Стандарт не гарантирует этого, и man-страницы также не гарантируют, но я помню, что операции открытия / закрытия / дублирования в этом окне влияют только на потомков, как в случае fork.]

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