Академический Документы
Профессиональный Документы
Культура Документы
Objetivo do Trabalho
Desenvolver a capacidade de anlise e estudo de algoritmo no uso das diretivas para criao de subprocessos e threads.
2.
3.
4.
Prazo de Entrega
O deadline para a entrega do relatrio tcnico dever ser at as 23h59 do dia 26/11/2014. Relatrios que forem
entregue aps esta data no sero aceitos. O e-mail dever conter, no subject (assunto), o seguinte texto: so1mat2014
processosThreads. Em caso de dvidas dever ser usado o mesmo e-mail e a mesma palavra de identificao de
assunto. ( mailto: sergio_moraes_2005@yahoo.com )
5.
Temas de Estudo
a.
Estudo de Comandos
a.1 Estude e conceitue os comandos: fork(), exec(), execl(), wait(), exit(), getpid(), getppdi(), waitpid();
b.
c.
Qual a diferena entre o comando fork() e o comando exec()? Qual o retorno esperado de cada um?
A identificao do processo pai sempre maior/menor que a do processo filho? Justifique.
A identificao sempre seqencial ou pode ser aleatria? Justifique.
Em quantos processos resulta a execuo deste programa? Quais so eles? Que parte de cdigo cada
um executa?
No segundo fork(), responda as perguntas de quem sou eu.
Qual a finalidade do comando wait()? Que valores ele pode retornar?
Para que serve a varivel status? Que valores ela pode receber e o que eles significam?
O comando printf() seguinte ao comando execl() geralmente executado ou no? Apresente suas
concluses para tal comportamento.
Substitua o contedo do primeiro campo do comando execl() para /bin/date e explique o que
acontece.
Para estes casos, 7 e 8, como funcionou o comando exit()?
Altere o comando execl() para executar corretamente o comando pwd Discuta o resultado da
execuo.
b.4 Mova a instruo j = k para logo aps a instruo for (i=0, ... e veja o que acontece. Justifique o
ocorrido.
b.5 Elimine a instruo j = k e verifique o que acontece. Justifique.
b.6 Substitua a instruo for (i = j; i < maxsubproc; i++) por for (i = 0; i < maxsubproc; i++) e veja o
que acontece. Justifique.
b.7 Verifique o valor das variveis vistas por cada processo e explique como funciona o escopo das
mesmas.
b.8 Mova a declarao da varivel dado2 para dentro da rotina main(). Compare os resultados com os
obtidos em b.6.
d.
e.
Lab4 Threads
Refaa o Lab3 expandindo os vetores para matrizes aleatrias de tamanho 30x5, substituindo os processos por
threads. Avalie as vantagens e desvantagens que encontrou em cada uma das estratgias (processos e threads).
Procure levantar e estudar os comandos:
pthread_create; pthread_exit; pthread_join; pthread_attr_init; pthread_detach.
Lab1.c
#include
#include
#include
<stdio.h>
<wait.h>
<unistd.h>
int main(void)
{
int
status, id;
printf(Pai-id: %d\n, getpid());
if (fork() == 0)
{
printf(Filho-id: %d, vai tentar executar o comando execl\n, getpid());
execl(teste.out, NULL);
printf(Filho id: %d, nao executou o comando\n, getpid());
if (fork == 0)
{
printf(Quem sou eu?\n, getpid());
else
printf(E eu, quem sou?\n, getpid());
exit(1);
}
} else
{
id= wait(&status);
printf(Pai-id: %d, sabe que Filho-id: %d \n, getpid(), id);
if (status == 0)
printf(Terminou OK\n);
else
printf(Nao Terminou OK\n);
}
}
Lab2.c
#include
<stdio.h>
#include
<wait.h>
#include
<sys/types.h>
#define
maxsubprocs
2;
int i, j, k, id, dado1= -10, dado2= 15;
int rc, eu;
pid_t
pid;
int main(void)
{
j = 0;
for (i = 0; i < maxsubprocs; i++)
{
eu= getpid();
if (i == 0)
printf(I am the Grandfather of this group id: %d\n, eu);
else
printf(I am also a father id: %d\n, eu);
pid= fork();
if (pid)
{
if j == 0
printf(I am the Godfather, my id is: %d, my son is: %d\n, getpid(), pid);
else
printf(I am not the Godfather, my id is: %d, my son is: %d\n, getpid(), pid);
end;
dado1= dado1+1;
dado2= dado2+i;
} else
{
k= i + 1;
printf(My id is: %d . I am the son nr. %d of %d\n,getpid, k-j,getppid);
j= k;
dado1= dado1 - 5;
dado2= dado2 - 2*i;
}
}
if (pid != 0)
{
printf(My id: %d, I am waiting for \n, getpid());
for (i = j; i < maxsubproc; i++)
{
id= wait(&rc);
if (rc == 0)
printf(%d, he finished OK\n, id);
else
printf(%d, he DID NOT finish OK\n);
}
}
exit(0);
}