SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
ELT048 - SOE



        Processos

       Rodrigo Almeida
Universidade Federal de Itajubá
Revisão
●   Ponteiros de função
●   Engine de processamento
Exercício
●   Modifique a estrutura apresentada
    anteriormente para incluir também um
    ponteiro de função.
●   Crie uma função que executa o ponteiro de
    função armazenado na “primeira” posição
    do buffer circular.
●   Crie um main que adicione 3 elementos no
    buffer e execute cada um deles na ordem
    que foram inseridos.
    ●   Add(x3), exec, remove, exec, remove, exec, remove
Exercício
typedef int (*ptrFunc)(void* param);
//definição da estrutura
typedef struct {
    char tipo;
    void* ptr;
    ptrFunc func;
}process;

//definição do buffer circular
#define BUFFERSIZE 10
process buffer[BUFFERSIZE];

//definição dos “ponteiros” de acesso
int ini, fim;
Exercício
//função de adição de “process” no buffer
void addProc(process nProcesso){

    //checagem de espaço disponível
    if ( ((fim+1)%BUFFERSIZE) != ini){
      //Atualização da posição atual
      buffer[fim] = nProcesso;
      //incremento da posição
      fim = (fim+1)%(BUFFERSIZE);
    }

}
Exercício
//função de remoção de um “process” do buffer
void removeProc (void){

    //checagem se existe alguem pra retirar
    if ( ini != fim){
      //incremento da posição
      ini = (ini+1)%(BUFFERSIZE);
    }

}
Exercício
//função de adição de “process” no buffer
void exec(void){

    //checar se existe alguem para ser executado
    if (ini != fim){
      //execução da função passando ptr como
          parâmetro
      buffer[ini].func(0);
    }

}
Exercício
#include “stdio.h”
void main (void){
  process p1 = {"",0,func1};
  process p2 = {"",0,func2};
  process p3 = {"",0,func3};
  ini = 0;
  fim = 0;
  addProc(p1);
  addProc(p2);
  addProc(p3);
  exec();
  removeProc();
  exec();
  removeProc();
  exec();
  removeProc();
}
Processo
●   Um processo é
    composto por uma
    unidade de código
    que pode ser
    executada, uma
    região delimitada de
    memória e um
    conjunto de
    informações sobre
    seu estado atual.
Processo
●   A implementação de um processo é muito
    dependente do tipo de kernel utilizado e
    das interfaces disponíveis ao programador.
●   O processo mais simples pode ser
    representado por uma função.
Processo
//ponteiro para mapa de I/O
#define LEDS (*((unsigned char*)0xF95))

//processo para piscar os leds
void blinkLeds (int time){
  int i;
  //liga os leds
  LEDS = 0x00;
  for(i = 0; i < time; i++){
    __asm NOP
  }
  //desliga os leds
  LEDS = 0xFF;
  for(i = 0; i < time; i++){
    __asm NOP
  }
}
Processo
●   Como fazer para que o processo continue
    executando?
    ●   Re-executar a função?
    ●   Fazer um loop interno com n repetições
    ●   Fazer um loop infinito?
Processo
●   Como fazer para que o processo continue
    executando?
●   Antes é preciso saber:
    ●   Que tipo de kernel está rodando: preemptivo ou
        cooperativo?
    ●   Existe um escalonador temporal?
Processo
●   Loop infinito: Só deve ser usado se o kernel
    for capaz de interromper o processo ou se
    este for o único processo do sistema.
    ●   No último caso não faz sentido ter um kernel.
Processo – Loop infinito
//processo para piscar os leds
void blinkLeds (int time){
  int i;
  //liga os leds
  for(;;){//ever
    LEDS = 0x00;
    for(i = 0; i < time; i++){
      __asm NOP
    }
    //desliga os leds
    LEDS = 0xFF;
    for(i = 0; i < time; i++){
      __asm NOP
    }
  }
}
Processo
●   Re-execução da função: permite que o
    processo deixe tempo livre para o kernel
    executar outras funções. Deve ser utilizado
    no kernel cooperativo.
    ●   Quando possível omite-se as rotinas de
        tempo/delay deixando a cargo do kernel.
    ●   Deste modo o sistema pode realizar alguma
        tarefa mais útil
Processo – Reexecução
//Original
//processo para piscar os leds
void toggleLeds (int time){
  int i;
  LEDS = 0x00;
  for(i = 0; i < time; i++){
    __asm NOP
  }
  //desliga os leds
  LEDS = 0xFF;
  for(i = 0; i < time; i++){
    __asm NOP
  }
}
//igual à primeira implementação. Gasta tempo
        atoa.
Processo – Reexecução
//Omissão das rotinas de tempo 1
//processo para piscar os leds
void toggleLeds (int time){
  int i;
  //liga os leds
  LEDS = 0x00;
  //desliga os leds
  LEDS = 0xFF;
}

//Não funciona, deve ligar em uma chamada e
        desligar em outra
Processo – Reexecução
//Omissão das rotinas de tempo 2
//processo para piscar os leds
void toggleLeds (int time){
  int i;
  LEDS = ~LEDS;
}

//Não funciona bem, os tempos não são respeitados
Processo – Reexecução
//Omissão das rotinas de tempo 3
//processo para piscar os leds
void toggleLeds (int time){
  int i;
  static int lastTime;
  if ( (now() - lastTime) >= time){
    LEDS = ~LEDS;
    LastTime = now();
  }

}

//a função now() deve retornar o horário em
        unidades de segundo/milisegundo
Processo
●   Como citado o processo é, a principio, uma
    função que deve ser executada quando o
    processo é chamado.
●   Além disto existem diversas informações
    importantes que devem ser agregadas para
    que o processo seja gerenciavel
    ●   Prioridade, tempo de execução, nome, região
        de memória reservada etc.
●   Em geral é utilizado uma estrutura para
    agregar todas estas informações.
Processo
typedef int (*ptrFunc)(void* param);

//código antigo
typedef struct {
  char* nomeDoProcesso;
  ptrFunc funcao;
  int prioridade;
  int tempo;
}process;
Exercício
●   Adaptar o código e executá-lo no kit de
    desenvolvimento.
●   Reunir todas as funções relacionadas à
    operação com o buffer circular numa
    biblioteca.
●   Utilizar o debugger da placa para verificar o
    funcionamento do programa.

Mais conteúdo relacionado

Mais procurados

Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsPedro De Almeida
 
Aula 13 - Algoritmos de Escalonamento
Aula 13 - Algoritmos de Escalonamento Aula 13 - Algoritmos de Escalonamento
Aula 13 - Algoritmos de Escalonamento camila_seixas
 
Stored Procedures com PostgreSQL: porque usar.
Stored Procedures com PostgreSQL:  porque usar.Stored Procedures com PostgreSQL:  porque usar.
Stored Procedures com PostgreSQL: porque usar.Atmos Maciel
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoAlexandre Duarte
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernelSENAC RIO
 
Arquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsArquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsEvandro Júnior
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 
So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012Bill Lima
 
Sistemas operacionais escalonamento de processos
Sistemas operacionais  escalonamento de processosSistemas operacionais  escalonamento de processos
Sistemas operacionais escalonamento de processosTalles Nascimento Rodrigues
 
Resolução da atividade pagina 84 a 87 so
Resolução da atividade pagina 84 a 87 soResolução da atividade pagina 84 a 87 so
Resolução da atividade pagina 84 a 87 soCristiano Silva
 
Apostila 5 processos e threads
Apostila 5   processos e threadsApostila 5   processos e threads
Apostila 5 processos e threadsPaulo Fonseca
 
3 escalonamento processos
3 escalonamento processos3 escalonamento processos
3 escalonamento processosfrteles
 
Programacao c shell
Programacao c shellProgramacao c shell
Programacao c shellMatheus Lima
 
Tornado mais do que um framework bonitinho
Tornado   mais do que um framework bonitinhoTornado   mais do que um framework bonitinho
Tornado mais do que um framework bonitinhoMarcel Nicolay
 

Mais procurados (20)

Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e Threads
 
Aula 13 - Algoritmos de Escalonamento
Aula 13 - Algoritmos de Escalonamento Aula 13 - Algoritmos de Escalonamento
Aula 13 - Algoritmos de Escalonamento
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 
Stored Procedures com PostgreSQL: porque usar.
Stored Procedures com PostgreSQL:  porque usar.Stored Procedures com PostgreSQL:  porque usar.
Stored Procedures com PostgreSQL: porque usar.
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Funcionamento kernel
Funcionamento kernelFuncionamento kernel
Funcionamento kernel
 
Arquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e ThreadsArquitetura de Computadores: Processos e Threads
Arquitetura de Computadores: Processos e Threads
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012
 
Sistemas operacionais escalonamento de processos
Sistemas operacionais  escalonamento de processosSistemas operacionais  escalonamento de processos
Sistemas operacionais escalonamento de processos
 
Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)Event-based Asynchronous Pattern (EAP)
Event-based Asynchronous Pattern (EAP)
 
Resolução da atividade pagina 84 a 87 so
Resolução da atividade pagina 84 a 87 soResolução da atividade pagina 84 a 87 so
Resolução da atividade pagina 84 a 87 so
 
Soa#cap4.1 gestor de pacotes
Soa#cap4.1   gestor de pacotesSoa#cap4.1   gestor de pacotes
Soa#cap4.1 gestor de pacotes
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Apostila 5 processos e threads
Apostila 5   processos e threadsApostila 5   processos e threads
Apostila 5 processos e threads
 
3 escalonamento processos
3 escalonamento processos3 escalonamento processos
3 escalonamento processos
 
Programacao c shell
Programacao c shellProgramacao c shell
Programacao c shell
 
Prova1d
Prova1dProva1d
Prova1d
 
Tornado mais do que um framework bonitinho
Tornado   mais do que um framework bonitinhoTornado   mais do que um framework bonitinho
Tornado mais do que um framework bonitinho
 

Semelhante a Buffer circular de processos com ponteiros de função

Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivosFlávio Freitas
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Embarcados
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLJuliano Atanazio
 
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdfAula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdfMatheusNS1
 
Sistemas Operacionais - Gnu/Linux Gerenciando Processos
Sistemas Operacionais - Gnu/Linux Gerenciando ProcessosSistemas Operacionais - Gnu/Linux Gerenciando Processos
Sistemas Operacionais - Gnu/Linux Gerenciando ProcessosLuiz Arthur
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 

Semelhante a Buffer circular de processos com ponteiros de função (20)

Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Threads
ThreadsThreads
Threads
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Exercicios 01 tms i
Exercicios 01 tms iExercicios 01 tms i
Exercicios 01 tms i
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
PL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQLPL/Python: Programando em Python no PostgreSQL
PL/Python: Programando em Python no PostgreSQL
 
Processos
ProcessosProcessos
Processos
 
bom-1.pdf
bom-1.pdfbom-1.pdf
bom-1.pdf
 
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdfAula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
 
Processos+threads.2pp
Processos+threads.2ppProcessos+threads.2pp
Processos+threads.2pp
 
Sistemas Operacionais - Gnu/Linux Gerenciando Processos
Sistemas Operacionais - Gnu/Linux Gerenciando ProcessosSistemas Operacionais - Gnu/Linux Gerenciando Processos
Sistemas Operacionais - Gnu/Linux Gerenciando Processos
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 

Mais de Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorRodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registrosRodrigo Almeida
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRodrigo Almeida
 

Mais de Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontrolador
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
Operações com Bits
Operações com BitsOperações com Bits
Operações com Bits
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 

Buffer circular de processos com ponteiros de função

  • 1. ELT048 - SOE Processos Rodrigo Almeida Universidade Federal de Itajubá
  • 2. Revisão ● Ponteiros de função ● Engine de processamento
  • 3. Exercício ● Modifique a estrutura apresentada anteriormente para incluir também um ponteiro de função. ● Crie uma função que executa o ponteiro de função armazenado na “primeira” posição do buffer circular. ● Crie um main que adicione 3 elementos no buffer e execute cada um deles na ordem que foram inseridos. ● Add(x3), exec, remove, exec, remove, exec, remove
  • 4. Exercício typedef int (*ptrFunc)(void* param); //definição da estrutura typedef struct { char tipo; void* ptr; ptrFunc func; }process; //definição do buffer circular #define BUFFERSIZE 10 process buffer[BUFFERSIZE]; //definição dos “ponteiros” de acesso int ini, fim;
  • 5. Exercício //função de adição de “process” no buffer void addProc(process nProcesso){ //checagem de espaço disponível if ( ((fim+1)%BUFFERSIZE) != ini){ //Atualização da posição atual buffer[fim] = nProcesso; //incremento da posição fim = (fim+1)%(BUFFERSIZE); } }
  • 6. Exercício //função de remoção de um “process” do buffer void removeProc (void){ //checagem se existe alguem pra retirar if ( ini != fim){ //incremento da posição ini = (ini+1)%(BUFFERSIZE); } }
  • 7. Exercício //função de adição de “process” no buffer void exec(void){ //checar se existe alguem para ser executado if (ini != fim){ //execução da função passando ptr como parâmetro buffer[ini].func(0); } }
  • 8. Exercício #include “stdio.h” void main (void){ process p1 = {"",0,func1}; process p2 = {"",0,func2}; process p3 = {"",0,func3}; ini = 0; fim = 0; addProc(p1); addProc(p2); addProc(p3); exec(); removeProc(); exec(); removeProc(); exec(); removeProc(); }
  • 9. Processo ● Um processo é composto por uma unidade de código que pode ser executada, uma região delimitada de memória e um conjunto de informações sobre seu estado atual.
  • 10. Processo ● A implementação de um processo é muito dependente do tipo de kernel utilizado e das interfaces disponíveis ao programador. ● O processo mais simples pode ser representado por uma função.
  • 11. Processo //ponteiro para mapa de I/O #define LEDS (*((unsigned char*)0xF95)) //processo para piscar os leds void blinkLeds (int time){ int i; //liga os leds LEDS = 0x00; for(i = 0; i < time; i++){ __asm NOP } //desliga os leds LEDS = 0xFF; for(i = 0; i < time; i++){ __asm NOP } }
  • 12. Processo ● Como fazer para que o processo continue executando? ● Re-executar a função? ● Fazer um loop interno com n repetições ● Fazer um loop infinito?
  • 13. Processo ● Como fazer para que o processo continue executando? ● Antes é preciso saber: ● Que tipo de kernel está rodando: preemptivo ou cooperativo? ● Existe um escalonador temporal?
  • 14. Processo ● Loop infinito: Só deve ser usado se o kernel for capaz de interromper o processo ou se este for o único processo do sistema. ● No último caso não faz sentido ter um kernel.
  • 15. Processo – Loop infinito //processo para piscar os leds void blinkLeds (int time){ int i; //liga os leds for(;;){//ever LEDS = 0x00; for(i = 0; i < time; i++){ __asm NOP } //desliga os leds LEDS = 0xFF; for(i = 0; i < time; i++){ __asm NOP } } }
  • 16. Processo ● Re-execução da função: permite que o processo deixe tempo livre para o kernel executar outras funções. Deve ser utilizado no kernel cooperativo. ● Quando possível omite-se as rotinas de tempo/delay deixando a cargo do kernel. ● Deste modo o sistema pode realizar alguma tarefa mais útil
  • 17. Processo – Reexecução //Original //processo para piscar os leds void toggleLeds (int time){ int i; LEDS = 0x00; for(i = 0; i < time; i++){ __asm NOP } //desliga os leds LEDS = 0xFF; for(i = 0; i < time; i++){ __asm NOP } } //igual à primeira implementação. Gasta tempo atoa.
  • 18. Processo – Reexecução //Omissão das rotinas de tempo 1 //processo para piscar os leds void toggleLeds (int time){ int i; //liga os leds LEDS = 0x00; //desliga os leds LEDS = 0xFF; } //Não funciona, deve ligar em uma chamada e desligar em outra
  • 19. Processo – Reexecução //Omissão das rotinas de tempo 2 //processo para piscar os leds void toggleLeds (int time){ int i; LEDS = ~LEDS; } //Não funciona bem, os tempos não são respeitados
  • 20. Processo – Reexecução //Omissão das rotinas de tempo 3 //processo para piscar os leds void toggleLeds (int time){ int i; static int lastTime; if ( (now() - lastTime) >= time){ LEDS = ~LEDS; LastTime = now(); } } //a função now() deve retornar o horário em unidades de segundo/milisegundo
  • 21. Processo ● Como citado o processo é, a principio, uma função que deve ser executada quando o processo é chamado. ● Além disto existem diversas informações importantes que devem ser agregadas para que o processo seja gerenciavel ● Prioridade, tempo de execução, nome, região de memória reservada etc. ● Em geral é utilizado uma estrutura para agregar todas estas informações.
  • 22. Processo typedef int (*ptrFunc)(void* param); //código antigo typedef struct { char* nomeDoProcesso; ptrFunc funcao; int prioridade; int tempo; }process;
  • 23. Exercício ● Adaptar o código e executá-lo no kit de desenvolvimento. ● Reunir todas as funções relacionadas à operação com o buffer circular numa biblioteca. ● Utilizar o debugger da placa para verificar o funcionamento do programa.