Рубрики

ВОРОТА | GATE-CS-2005 | Вопрос 72

Рассмотрим следующий фрагмент кода:

  if (fork() == 0)
  { a = a + 5; printf(“%d,%d\n”, a, &a); }
  else { a = a –5; printf(“%d, %d\n”, a, &a); } 

Пусть u, v будут значениями, напечатанными родительским процессом, а x, y будут значениями, напечатанными дочерним процессом. Что из следующего является ИСТИННЫМ?
(А) и = х + 10 и V = у
(B) u = x + 10 и v! = Y
(C) U + 10 = х и V = у
(D) u + 10 = x и v! = Y

Ответ: (с)
Объяснение: fork () возвращает 0 в дочернем процессе и идентификатор процесса дочернего процесса в родительском процессе.
У ребенка (х), а = а + 5
В Parent (u) a = a — 5;
Следовательно, х = и + 10.
Физические адреса «а» в родительском и дочернем элементах должны быть разными. Но наша программа обращается к виртуальным адресам (при условии, что мы работаем в операционной системе, которая использует виртуальную память). Дочерний процесс получает точную копию родительского процесса, и виртуальный адрес «а» не изменяется в дочернем процессе. Таким образом, мы получаем одинаковые адреса в parent и child.но в python три v и y не будут равны. увидеть это
Смотрите
этот прогон, например.
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2005 | Вопрос 72

0.00 (0%) 0 votes