GATE | GATE-CS-2005 | Questão 72
Considere o seguinte fragmento de código:
if (fork() == 0) { a = a + 5; printf(“%d,%d\n”, a, &a); } else { a = a –5; printf(“%d, %d\n”, a, &a); }
Sejam u, v os valores impressos pelo processo pai e x, y os valores impressos pelo processo filho. Qual das opções a seguir é VERDADEIRA?
(A) u = x + 10 e v = y
(B) u = x + 10 e v! = Y
(C) u + 10 = x e v = y
(D) u + 10 = x e v! = Y
Resposta: (C)
Explicação: fork() retorna 0 no processo filho e o ID do processo filho no processo pai.
Em Criança (x), a = a + 5
Em Pai (u), a = a - 5;
Portanto, x = u + 10.
Os endereços físicos de 'a' em pai e filho devem ser diferentes. Mas nosso programa acessa endereços virtuais (supondo que estejamos executando em um sistema operacional que usa memória virtual). O processo filho obtém uma cópia exata do processo pai e o endereço virtual de 'a' não muda no processo filho. Portanto, obtemos os mesmos endereços nos pais e nos filhos. Mas em python3 vey não serão iguais. Veja isto (para Python) e veja isto (para C).
Teste desta questão
Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva