DAS5303: Informática Industrial II

Trabalhos para 2002/2

    Observações:

- 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 ?