Segundo Experimento SO

Pontifícia Universidade Católica

Puc – Campinas

Grupo 8 - Turma 3 – Professor Tobar

Bruno de André Mazzoco	Ra:02150522

César Henrique Kallas	Ra:02099224

Introdução

O objetivo do experimento é entender o funcionamento da comunicação entre processos concorrentes através de um mecanismo de troca de mensagens, ou seja, como os processos se comunicam, além de implementar esse mecanismo na linguagem C.

No experimento foi utilizado um programa exemplo em que há um processo pai que cria uma fila de mensagens, cria dois filhos, que vão pegar os tempos em que a mensagem é passada (a mensagem é passada seqüencialmente para cada filho por isso).

Essas mensagens são passadas através da fila criada pelo pai e a mesma possui um mesmo número quando usada pelo pai ou pelos filhos. O primeiro filho pega o tempo atual em que recebe a mensagem fazendo isso um numero determinado de vezes e o segundo filho calcula o tempo gasto na troca de mensagem, entre ele e o outro filho.

Dados do programa

Programa original
Número da execução	Programas ocupando o processador	Tempo médio(s)	Tempo máximo(s)
1	0	0.0000117480	0.0000650000
2	1	0.0004475226	0.0189580005
3	3	0.0001101780	0.0020089999
4	5	0.0004834373	0.0034459999
5	10	0.0001470167	0.0024689999
6	15	0.0001153990	0.0032760000
7	16	0.0000986951	0.0023729999
8	19	0.0000776450	0.0019210000
9	30	0.0000572670	0.0037120001
10	50	0.0000632920	0.0024329999
Programa modificado
Número da execução*	Programas ocupando o processador	Tempo médio(s)	Tempo máximo(s)
1	0	0.0000463880	0.0022760001
2	1	0.0002572780	0.0070719998
3	3	0.0002006618	0.0082240002
4	5	0.0001637839	0.0041379998
5	10	0.0001472140	0.0039059999
6	15	0.0001406960	0.0040480001
7	16	0.0001183778	0.0001183778
8	19	0.0000466140	0.0035780000
9	30	0.0000363900	0.0015700000
10	50	0.0001506960	0.0020052391

cada vez, aumentou-se 100 bytes, começando de 0.

Análise dos resultados

Nos resultados acima pode-se notar duas tabelas, a primeira é em relação ao programa exemplo original, no qual se mediu os tempos gastos em 10 execuções. Em cada execução, foi acrescido N processos que ocupam o processador, como se pode ver nas tabelas. E a segunda em relação ao programa modificado (veja Modificação do Programa mais abaixo).

Nota-se que tem uma lógica, quanto mais carregado o processador estiver, mais lento será o tempo de troca das mensagens (tempo máximo), porém como o computador é uma máquina digital, não se tem uma medida exata. Mas podemos afirmar sim, que quanto mais carregado, maior será o tempo gasto.

Na segunda tabela temos os dados do programa modificado, no programa modificado, temos dois lados a analisar. O primeiro corresponde ao tamanho da mensagem que os processos filhos irão trocar, já que um aumento N lido no teclado será adcionado a mensagem original, sendo assim, quanto maior a mensagem, maior será o tempo gasto pra ela trafegar. Em segundo lugar, o tempo calculado não foi mais no filho que recebe a mensagem, e sim no pai, no qual criou uma segunda fila pra receber os resultados em uma matriz de struct.

O programa modificado, em relação a matriz de resultados, não teve seu tempo alterado (não em relação ao tamanho da mensagem), apenas foi calculado de forma diferente em outro processo (pai).

Programa que ocupa o processador (cutime.c)

#include <stdio.h>

int main(int argc, char *argv)

{

int x=1;

while(x!=0)

{

x=x*x/x;

x=x+5;

x=x-5;

}

}

Modificação do Programa

Pede-se as seguintes modificações:

um valor numérico que deve ser acrescido ao tamanho original da mensagem a ser enviada seja lido a partir do teclado;

declare uma matriz com o tamanho correspondente ao número de interações;

faça com que o filho receptor não calcule mais os tempos médio e máximo, ele deve apenas colocar os tempos na matriz declarada;

faça com que o pai calcule e exiba o tempo total, o tempo médio e o tempo máximo, após o término dos dois filhos. Cuide para que o valor dos tempos estejam em mili segundos.

Conclusão

Podemos observar pela tabela dos dados que conforme o tamanho da mensagem aumenta, ou seja, quanto mais informações um processo tem que mandar, maior é o tempo para essa mensagem ser passada para outro processo.

Como os cálculos dos tempos não são exatos em pratica sendo esses calculados por uma incrementação de variável dentro de um loop o, processador também gasta um tempo na execução do loop e dos comandos if. Além disso o programa de carga quando executado varias vezes concorrente com o programa gera uma disputa pela CPU que não é linear.

O tempo é ainda maior quando ele é calculado depois na matriz pelo filho que a recebe, não o tempo de envio de mensagem, mas o tempo total de execução dos processos, da criação a morte deles..

Podemos concluir que esses dados são uma boa aproximação para os cálculos dos tempos e o experimento forneceu um bom entendimento sobre como os processos se comunicam através da troca de mensagens e qual a dependência desse tempo com o tamanho de dados e informação a ser passada pelas mensagens.

2004-03-12T18:50:01