• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

psicotic

Ajuda a Resolver um exercicio

5 mensagens neste tópico

Bons dias.

Há uns dias tive uma e-prova de Programação Avançada em que o enunciado do segundo exercício era o que esta em baixo.

Gostaria de saber se alguém me quer ajudar a resolver o exercício como forma de estudo para a e-prova de recurso?

Pretende-se, em linguagem C, o programa benchmark que se destina a efectuar testes de carga ao

processador do sistema. Para tal deve ser calculada a carga “em vazio” e, seguidamente, com processos

que induzam uma elevada carga computacional.

Numa primeira fase, o programa deve lançar um processo filho responsável por obter valores de carga

do CPU. Para tal, este processo filho deve, a cada segundo, obter o primeiro valor inteiro presente no

ficheiro /proc/loadavg (constituído apenas por uma linha de texto). Este inteiro, actualizado em

permanência pelo S.O. representa a carga de processamento no CPU a cada instante. Depois de obter o

valor, o processo filho deve escrever o valor lido numa zona de memória que é partilhada com o pai, e

deve adequadamente sinalizar o processo pai. Por sua vez, o processo pai lê os valores da memória

partilhada, no ritmo em que são produzidos. Depois de ter lido N valores, o processo pai calcula e

apresenta a média e o desvio padrão obtido. Note-se que N é um valor inteiro positivo que deve ser

especificado como único argumento da linha de comando do programa benchmark.

Numa segunda fase, o processo pai lança três processos filhos – aqueles que induzirão carga – e repete

o cálculo da média de carga para N leituras (os valores respeitantes às N leituras são obtidos pelo

processo pai da mesma forma do que foi feito para o sistema sem carga, isto é, com o processo filho

inicial a lê-los do ficheiro /proc/loadavg e a escrevê-los no segmento de memória partilhada que divide

com o processo pai). Estes três processos filhos devem somar posição a posição, repetidamente, dois

vectores de valores inteiros, A e B, e escrever o resultado no vector C. Cada vector deve ter 5000

posições, devendo serem preenchidos aleatoriamente. Os três vectores são partilhados entre os três

processos, numa zona de memória partilhada, devidamente sincronizada. Não é importante para o

problema quais são as posições que cada processo soma, desde que os dados sejam coerentemente

sincronizados.

O processo pai deve terminar, correctamente, os processos filhos assim que obtenha a média e o desvio

padrão para os dois casos. Os três processos que induzem carga devem terminar os cálculos apenas

quando o processo pai o indicar. Ou seja, chegando ao fim do vector, devem recomeçar até que seja

indicado o término.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Apresenta dúvidas concretas que o pessoal que souber terá todo o gosto em ajudar-te :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha duvida é como é que se resolve aquela "coisa",  por exemplo como é que faço para ler as informações que estão no ficheiro relativamente á carga do cpu...so para comecar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é descrito no enunciado, o conteúdo do ficheiro é um inteiro. Basta abrires o ficheiro para leitura, fazer um fscanf, e fechar o ficheiro, isto em cada instante em que queiras saber o seu valor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas tardes.

Alguem me pode explicar o seguinte:

Como é que se faz a leitura do ficheiro a cada segundo (a parte de ler o ficheiro penso que ja percebi)?

E como é que o processo filho sinaliza o processo pai da leitura do valor? tem a ver com os semaforos  ou vai ter de se enviar um sinal?

obrigado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora