Рубрики

Операционные системы | Управление процессами | Вопрос 6

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

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.
Физические адреса «а» в родительском и дочернем элементах должны быть разными. Но наша программа обращается к виртуальным адресам (при условии, что мы работаем в операционной системе, которая использует виртуальную память). Дочерний процесс получает точную копию родительского процесса, и виртуальный адрес «а» не изменяется в дочернем процессе. Таким образом, мы получаем одинаковые адреса как родительского, так и дочернего. Смотрите этот прогон, например.
Тест на этот вопрос

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

Операционные системы | Управление процессами | Вопрос 6

0.00 (0%) 0 votes