- Para os trabalhos 1, 2, 3 e 4, 20% da nota representa iniciar o trabalho na
aula de laboratório.
- Trabalhos entregues após a data estipulada perdem 1 ponto por dia de
atraso, inclusive sábado e domingo.
(1) Baseado nos exemplos listadup.c e tabhash.c, montar uma
lista que usa a estrutura hash
para localizar os elementos mas ao mesmo tempo permite uma listagem
ordenada através da
lista duplamente encadeada. As rotinas INSERE e RETIRA devem operar
sobre as
duas estruturas de dados. A rotina CONSULTA utiliza a estrutura hash,
e as rotinas
LISTA_CRESCE e LISTA_DECRESCE utilizam a estrutura duplamente encadeada.
Chamar as funções a partir da "main" para testar o funcionamento,
não precisa ler
comandos do teclado.
A estrutura registro deve ter o seguinte formato:
struct registro{
int prio;
char nome[30];
struct registro *prox_hash;
struct registro *ant_hash;
struct registro *prox_lista;
struct registro *ant_lista;
};
Obs: As informações propriamente ditas "prio" e "nome"
são armazenadas somente uma vez,
não devem ser duplicadas.
(2) Implementar um laço periódico seguindo as recomendações
do relatório técnico
"Trabalhando com o Tempo Real em Aplicações Sobre o Linux".
Apresentar o tempo médio,
mínimo e máximo usados como parâmetros para a função
de dormir, para avaliar a variação
do mesmo.
(3) Implementar o produtor&consumidor usando a biblioteca pthreads do Linux.
(4) Implementar o "servidor de meio de campo" usando sockets tipo datagrama.
(5) Experiências com sincronização de relógios.
(6-7) Implementar um programa em C no Linux usando a biblioteca
de pthreads que simule um
equipamento de laboratório.
Cada grupo deve criar seu cenário de controle,
e apresentar ao professor para aprovação,
mas ele deve incluir no mínimo:
- Dois laços de controle com períodos diferentes;
- Amostragem de 4 variáveis;
- Dois alarmes associados com combinações de valores
das variáveis amostradas;
- Armazenagem em arquivo de leitura periódicas;
- Informações periódicas na tela;
- Leitura de três diferentes comandos a partir do teclado, indicados
pela letra digitada.
(6) O acesso aos transdutores deve ser feito
através de rotinas que simulam a atuação
e a leitura. Essas rotinas devem ficar no arquivo "transdutores.c".
Não é necessária precisão
na simulação da dinâmica do sistema, mas um comportamento
consistente. Por exemplo, ao
aumentar a queima de gás a temperatura sobe.
(7) O programa em si deve ficar no arquivo
"controle.c" e deve ser composto por várias threads
que colaboram entre si através de variáveis compartilhadas.
Avaliação composta por:
- Código fonte
- Texto explicando o processo físico simulado
- Texto explicando qual a função de
cada thread e quais variáveis compartilhadas cada uma acessa
- Apresentação individual do trabalho
Outros requisitos:
- Cada variável compartilhada deve ter seu
próprio mutex.
- Variáveis condição devem
ser usadas para liberar as threads de alarme.
- Tarefas periódicas implementadas com precisão
e não com sleep fixo.
Alguns aspectos para a composição
da nota dos trabalhos 6 e 7:
- Fez no Linux ?
- Usou a biblioteca das pthreads ?
- A aplicação acessa arquivos ?
- A aplicação acessa teclado ?
- A aplicação possui alarmes ?
- A aplicação possui laços
de controle ?
- Foram feitos dois arquivos .c para compilação
em separado ?
- Foi usado um mutex para cada estrutura compartilhada
?
- O alarme utiliza variável condição
?
- As tarefas são realmente periódicas
?