Escolar Documentos
Profissional Documentos
Cultura Documentos
MODELO
FICHA PRÁTICA N.º 3 PED
Processos
int valor = 5;
int main( )
{
pid_t pid;
pid = fork( );
#define SIZE 5
int main( )
{
int i;
pid_t pid;
pid = fork( );
if (pid == 0) {
for (i = 0; i < SIZE; i++) {
vetor[i] *= -i;
printf(“FILHO: %d\n“, vetor[i]); /* LINHA A */
}
}
Indique os valores que identificam os processos nas linhas A, B, C e D. Considere que os valores
pid atuais do processo pai e do processo filho são, respetivamente, 1500 e 1502.
10. Incluindo o processo pai inicial, quantos processos são criados pelo programa seguinte?
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main( )
{
fork( ); /* Cria um processo filho*/
fork( ); /* Cria outro processo filho*/
fork( ); /* E ainda cria outro processo filho*/
return 0;
}
11. Incluindo o processo pai inicial, quantos processos são criados pelo programa seguinte?
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main( )
{
int i;
for (i = 0; i < 4; i++)
fork( ); /* Cria um processo filho*/
return 0;
}
12. Escrever um programa em C, usando a chamada sistema fork(), que apresente a sucessão de
Fibonacci no processo filho. O número de termos da sucessão é fornecido na linha de comandos.
Os processos pai e filho têm as suas próprias cópias de dados, pelo que será necessário que o
processo filho apresente a sucessão.
O processo pai deverá invocar a chamada sistema wait() para esperar que o processo filho
termine antes de o programa terminar.
Realizar a verificação de erro necessária de modo a garantir que é passado um valor não
negativo na linha de comandos.
Sucessão de Fibonacci: 1, 1, 2, 3, 5, 8, …
Formalmente: fib0 = 1
fib1 = 1
fibn = fibn-1 + fibn-2
13. Repetir o exercício anterior, utilizando agora a chamada sistema CreateProcess() da API Win32.
Neste caso, vai ser necessário especificar outro programa que será invocado por
CreateProcess(). Será esse programa que irá ser executado como um processo filho e que
visualizará a sucessão de Fibonacci.
Realizar a verificação de erro necessária de modo a garantir que é passado um valor não
negativo na linha de comandos.
14. Escrever um programa em C, usando a chamada sistema fork(), que calcule e apresente o
fatorial de um número no processo filho. O número é fornecido na linha de comandos.
Os processos pai e filho têm as suas próprias cópias de dados, pelo que será necessário que o
processo filho apresente o resultado do fatorial.
O processo pai deverá invocar a chamada sistema wait() para esperar que o processo filho
termine antes de o programa terminar.
Realizar a verificação de erro necessária de modo a garantir que é passado um valor não
negativo na linha de comandos.
15. Repetir o exercício anterior, utilizando agora a chamada sistema CreateProcess() da API Win32.
Neste caso, vai ser necessário especificar outro programa que será invocado por
CreateProcess(). Será esse programa que irá ser executado como um processo filho e que
apresentará o resultado do fatorial.
Realizar a verificação de erro necessária de modo a garantir que é passado um valor não
negativo na linha de comandos.
16. Considere o mecanismo RPC (Remote Procedure Calls). Descreva as consequências indesejáveis
que podem ocorrer caso não se implementem os mecanismos “no máximo uma vez” ou
“exatamente uma vez” na semântica de uma chamada.