DAS6611: Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados

Ementa:

Noções básicas do processo de automação: medição, atuação e controle. Estabilidade e desempenho de sistemas realimentados.  Controle
de sistemas a eventos discretos. Hierarquia em sistemas automatizados. Requisitos dos sistemas informáticos para automação.
Programação concorrente e sistemas operacionais. Sistemas computacionais embutidos.  Programação em tempo real, abordagem
síncrona.  Estudo de caso.
 

2006/I    2005/I    2004/I    2003/I     2002/I    2001/I



Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2006/I

Plano da disciplina (segunda parte)
Notas
Simulador de cruzamento, versão 2.04, zipado, atualizado 19/04/2004  
Artigo sobre o problema do cruzamento automático
Livro sobre Pthreads
Capítulo de livro sobre pthreads
Trabalhando com o Tempo Real em Aplicações Sobre o Linux
Conjunto de Experiências Sobre Sincronização de Relógios
Organização de Sistemas Operacionais - JAI 2002
Exemplos de provas
Sistemas operacionais de tempo real

Trabalho com programação concorrente:

Implementar na forma de monitor, usando variáveis mutex e variáveis condição, um esquema de buffer duplo. O monitor possui duas rotinas de acesso, uma para inserção de um número tipo double, e outra para a leitura de um array com 100 doubles previamente escritos. Internamente ao monitor existem 2 buffers, cada um deles comporta 100 doubles. A cada momento existe 1 buffer em uso, enquanto o outro está ou completamente vazio ou completamente cheio.

Implementar o buffer duplo na forma de um módulo (arquivo .c separado), o qual exporta as funções de acesso apenas. Este módulo deve ser implementado seguindo a filosofia dos monitores, ou seja, deve usar variáveis mutex para garantir exclusão mútua entre diferentes threads que chamam estas rotinas simultaneamente. Além disto, quando uma thread fica bloqueada até o buffer encher, usar para isto uma variável condição.

void  escreve_double( double d);
A escrita do double sempre ocorre no buffer em uso. Quando o buffer em uso fica cheio, o outro buffer passa a ser o buffer em uso, e assim por diante. No caso dos dois buffers estarem cheios, a thread que deseja escrever fica bloqueada até que uma leitura aconteça, e libere um buffer.

void le_array( double *pd);
A leitura somente acontece se um buffer estiver cheio, o buffer é lido por inteiro de uma só vez, e fica liberado para novas escritas. Caso a thread tente ler, mas nenhum dos dois buffers está cheio no momento, ela fica bloqueada até que o buffer em uso fique cheio.

----

Implementar um segundo módulo (outro arquivo .c), onde são criadas várias threads recorrentes, as quais fazem inserções e remoções variadas. Usar "sleep" para testar se uma remoção antes do buffer ficar cheio efetivamente bloqueia a thread.

Esqueleto do código das threads:
void thread_coloca(void)
{   
   ...
   escreve_double(dado);
   ...
}

void thread_tira(void)
{
   ...
    le_array(array);
   ...
}
 
Todo o trabalho deve ser feito em C, no Linux, usando a biblioteca das pthreads.


 


Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2005/I

Plano da disciplina (segunda parte)
Notas
Simulador de cruzamento, versão 2.04, zipado, atualizado 19/04/2004
 
Artigo sobre o problema do cruzamento automático
Livro sobre Pthreads
Trabalho com programação concorrente:
Implementar um programa concorrente em C no Linux usando a biblioteca das pthreads,
que faça o controle do sistema descrito aqui
Entrega consiste de texto simples descrevendo as threads e os mecanismos de sincronização
utilizados, apresentação do programa e explicação do mesmo (perguntas serão feitas!).
aquecedor2004_2.jar é chamado com:
      java -jar aquecimento.jar
escuta a porta 4545.
Aceita os comandos:
"sta0"            lê valor de Ta
"st-0"            lê valor de T
"sti0"             lê valor de Ti
"sno0"           lê valor de No
"sh-0"           lê valor de H
"ani123.4"    define valor de Ni como 123.4
"aq-567.8"   define valor de Q como 567.8
Implementar um programa em C no Linux usando a biblioteca de pthreads que inclua
as seguintes funcionalidades:
- Laço de controle com tarefa periódica;
- Alarme associado com 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.
Material adicional na página de ../cad-ii2/cad-ii2.html.
A planta será simulada por um outro programa, cujo código executável será
fornecido. A comunicação entre o controle e o simulador será através
de sockets UDP/IP.
Avaliação composta por:
    - Código fonte
    - 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 ?
- Foi usado um mutex para cada estrutura compartilhada ?
- As tarefas são realmente periódicas, como feito em aula ?
- Elegância do design da solução.
- Legibilidade do código.
 
 
Entrega dos dois Trabalhos até dia 20 de maio.
Capítulo de livro sobre pthreads
Trabalhando com o Tempo Real em Aplicações Sobre o Linux
Conjunto de Experiências Sobre Sincronização de Relógios
Organização de Sistemas Operacionais - JAI 2002
Exemplos de provas
Sistemas operacionais de tempo real


Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2004/I

Plano da disciplina (segunda parte)
Notas
Simulador de cruzamento, versão 2.04, zipado, atualizado 19/04/2004
 
Artigo sobre o problema do cruzamento automático
Trabalho com programação concorrente:
Implementar um programa concorrente em C no Linux usando a biblioteca das pthreads,
ou em Java, que realize um cenário incluindo exclusão mútua e espera por condição.
Cada grupo deve implementar um cenário diferente, aprovado pelo professor. Entrega
consiste de descrição do cenário implementado, apresentação do programa e
explicação do mesmo (perguntas serão feitas!).
Entrega dos dois Trabalhos até dia 28 de maio.
Capítulo de livro sobre pthreads
Trabalhando com o Tempo Real em Aplicações Sobre o Linux
Conjunto de Experiências Sobre Sincronização de Relógios
Organização de Sistemas Operacionais - JAI 2002
Exemplos de provas
Sistemas operacionais de tempo real


Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2003/I

Plano da disciplina (segunda parte)
Notas
Simulador de cruzamento, versão 2.0 BETA, zipado, atualizado 02/06/2003
Informações extras sobre a versão 2x
(em caso de problemas sérios, usar a versão 1.4, do ano passado)
Artigo sobre o problema do cruzamento automático
Trabalho com programação concorrente:
Implementar um programa concorrente em C no Linux usando a biblioteca das pthreads,
ou em Java, que realize um cenário incluindo exclusão mútua e espera por condição.
Cada grupo deve implementar um cenário diferente, aprovado pelo professor. Entrega
consiste de descrição do cenário implementado, apresentação do programa e
explicação do mesmo (perguntas serão feitas!).
Entrega dos dois Trabalhos até dia 13 de junho.
Exemplos de provas
Sistemas operacionais de tempo real
 

Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2002/I

Plano da disciplina (segunda parte)
Notas
Simulador de cruzamento, versão 1.4, zipado, 47 Kbytes
API para o controlador
Artigo sobre o problema do cruzamento automático
Trabalho com programação concorrente:
Implementar um programa concorrente em C no Linux usando a biblioteca das pthreads,
que realize um dos cenários de processos produtores e consumidores sugeridos, sendo que
cada grupo deve implementar um cenário diferente, conforme o número do grupo. Entrega
consiste da apresentação do programa e explicação do mesmo (perguntas serão feitas!).
Lista de exercícios para a prova - Livro de Sistemas Operacionais:


Conceitos Básicos e Técnicas de Implementação de Sistemas Automatizados - 2001/I