DAS5303: Informática Industrial II

Trabalhos para 2004/1

Trabalhos entregues após a data estipulada perdem 1 ponto por dia de
atraso, inclusive sábado e domingo.

Apresentações individuais podem ser solicitadas.

Trabalho sobre tabelas

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.
As rotinas LISTA_CRESCE e LISTA_DECRESCE utilizam a estrutura
duplamente encadeada.
A rotina LISTA_PARCIAL lista as entradas em ordem crescente, a partir do ítem
fornecido como ponto de partida.

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.

Trabalho sobre algoritmo de escalonamento

O trabalho consiste em implementar um dos módulos descritos abaixo. A implementação deve ser feita com a linguagem de programação C, no Linux.

São propostos vários módulos diferentes. Cada grupo deve escolher um módulo e comunicar sua escolha ao professor. A comunicação deve conter, por escrito, o nome dos integrantes do grupo e o número do módulo escolhido.

Cada grupo deverá implementar um módulo diferente. No caso de dois ou mais grupos escolherem o mesmo módulo, somente o grupo que manifestou seu interesse primeiro poderá implementar o módulo. Os demais deverão escolher outro módulo.

O módulo escolhido deverá ser testado através da função main, com chamadas a uma função que sinaliza a passagem do tempo. A entrega inclui:
(a) Listagem do código fonte;
(b) Demonstração no computador, com a presença dos membros do grupo.

Descrição dos módulos: Implemente o escalonador de curto termo de um sistema operacional e inclua código para testar o mesmo. O algoritmo a ser utilizado para o escalonador é:
 

Trabalho de simulação de uma planta

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.

Testar através de chamadas da função main, que atua sobre o sistema e lê as variáveis físicas.

Nesta etapa, simular apenas o que seria um device-driver para a placa de aquisição de dados
ligada no microcomputador. A aplicação em si (e o controle) serão feitos em outra etapa.

Incluir transdutores suficientes para permitir dois laços de controle com períodos diferentes e
um alarme. Entregar por escrito uma descrição (1 página) do processo simulado.

Sugestão: Usar rotinas setAtuador( ) para atuar e getVariavel( ) para ler o valor da variável física.
A setAtuador anota o valor da atuação e a hora da atuação. A getVariavel usa o valor da
variável na hora da atuação, o valor da atuação e a hora da leitura para calcular o valor
atual da variável física.
 

Trabalho das pthreads

Implementar o .................. usando a biblioteca pthreads do Linux.

Trabalho de sockets

Implementar um servidor .............. usando sockets tipo datagrama.

Trabalho das tarefas periódicas

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

Trabalho do controlador

Implementar um programa em C no Linux usando a biblioteca de pthreads que simule um
equipamento de laboratório. Deve incluir:
 
- Um laço de controle periódico;
- Um alarme associado com combinações de valores das variáveis amostradas;
- Armazenagem em arquivo de leitura periódicas;
- Informações periódicas na tela;
- Leitura de comandos e/ou valores a partir do teclado.
 
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.
 
Em outro arquivo C, "planta.c", deve ficar a simulação do processo físico,
baseada no outro trabalho da disciplina já realizado. A compilação deve ser do tipo:
gcc -o controle -lpthreads controle.c planta.c
 
 
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 do trabalho do controlador:
- Fez no Linux, em C, usando a biblioteca das pthreads ?
- A aplicação apresenta valores na tela ?
- A aplicação grava leituras em arquivo ?
- A aplicação acessa teclado durante a execução do controlador ?
- A aplicação possui alarme disparado via variável condição ?
- A aplicação possui laço de controle ?
- Foram feitos dois arquivos .c para compilação em separado ?
- Foi usado um mutex para cada estrutura compartilhada ?
- As tarefas são realmente periódicas, como feito em aula ?
- Elegância e legibilidade do código.