2014-02-15 2 views
-2

вот мой вопрос: если процесс (отец) создает новый процесс (ребенок) с fork(), какая из этих структур данных не разделяет между отцом и сыном? -процесса ID -heap -кода -stackФункция Вилка в операционных системах

+0

Похоже на вопрос о домашнем задании. Пожалуйста, разместите то, что вы считали, как вы думаете, ответ и т. д. – BroSlow

+0

это вопрос, который использовался в нашем экзамене по университету в Иране, который я принял вчера , Я думаю, что стек правильный ответ, потому что когда процесс создает новый по fork(), он дает своему ребенку новое пространство и все переменные-копии отца, пока мы не назовем exec(), это просто мое мнение –

+0

Извините, но вы получили ответ не так. Оглядываясь назад, это должно было быть очевидно. Почему (или как может) система имеет два процесса с одним и тем же идентификатором процесса? – Duck

ответ

1

связь для процесса ID

После успешного завершения, вилка() возвращает значение 0, чтобы дочерний процесс и возвращает идентификатор процесса дочерний процесс для родителя процесс. В противном случае, значение -1 возвращается в родительском процесс, ни один процесс ребенка не создается, а глобальная переменная ERRNO устанавливаются на показываемые Cate ошибки

связи кучной памяти или пространство

Ребенок получает точную копию адресного пространства родителей, которое во многих случаях может быть выложено в том же формате, что и родительское адресное пространство. Я должен указать, что каждый из них будет иметь собственное виртуальное адресное пространство для своей памяти, так что каждый может иметь одни и те же данные по одному и тому же адресу, но в разных адресных пространствах. Кроме того, linux использует копию при записи при создании дочерних процессов. Это означает, что родительский и дочерний будут разделять родительское адресное пространство, пока один из них не напишет, и в этот момент память будет физически скопирована на дочерний. Это исключает ненужные копии при выполнении нового процесса. Так как вы просто перезаписываете память новым исполняемым файлом, зачем его копировать?

связь для кода

Там нет объектно-ориентированного Наследования в C.

Fork'ing в С в основном процессом остановкой во время его работы, и полная копия этого являющееся (эффективно) различного пространства памяти, то оба процесса говорят продолжать. Они оба продолжат с того места, где родитель был приостановлен. Единственный способ узнать, в каком процессе вы находитесь, - проверить возвращаемое значение вызова fork().

В такой ситуации ребенок на самом деле не наследует все от родительского процесса, это больше похоже на то, что он получает полную копию всего, что имел родитель.

Stack

дочерний процесс получает отдельный экземпляр глобальной переменной, объявленной в родительском процессе». Точка отдельных процессов для разделения памяти. Таким образом, вы не можете разделить переменные между родительским и дочерним процессом

+0

это вопрос, который использовался в нашем экзамене по вступлению в университет в Иране, который я взял вчера, я думаю, что стек - правильный ответ, потому что, когда процесс создает новый по fork(), он дает ребенку новое пространство и весь отец переменная копия в ней до тех пор, пока мы не назовем exec(), это просто мое мнение –

+0

@ user2668753 ok, По вашему мнению, правильный ответ только на стек? А что еще, неверно? если да, то скажите мне, каково ваше мнение об этом. Мне интересно узнать новое от вас :) –

+0

Я думаю, что куча - это структура, в которой процессы могут получить от нее некоторую информацию о предках. например, p1-2 знают, что он является дочерним элементом p1, поэтому эта структура данных является долей между ними. основываясь на вопросе о том, что он говорит о том, чтобы делиться вещами не с тем, что является их атрибутом. PID - это всего лишь атрибут. когда отец создает ребенка с fork(), он создает процесс и копирует весь его код (отец) в пространство своего ребенка. после исполнения ребенок может быть независимым. Но я думаю, что стек - это единственная структура данных, которая принадлежит каждому процессу. –

Смежные вопросы