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

PDF
Kernel cooperativo
ODP
Sistemas Operacionais - 04 - Processos
PDF
Introdução ao processamento paralelo com o Grand Central Dispatch
PDF
Kernel com requisitos temporais
PPTX
Coroutines tech summit
PDF
Exercicios 01 02 tms i
PPTX
Coroutine e concorrência python
PDF
Apresentação Sobre Sistemas Operacionais com Orbis OS
Kernel cooperativo
Sistemas Operacionais - 04 - Processos
Introdução ao processamento paralelo com o Grand Central Dispatch
Kernel com requisitos temporais
Coroutines tech summit
Exercicios 01 02 tms i
Coroutine e concorrência python
Apresentação Sobre Sistemas Operacionais com Orbis OS

Mais procurados (20)

PDF
Sistemas Operativos - Processos e Threads
PPTX
Aula 13 - Algoritmos de Escalonamento
PDF
SO-04 Escalonamento de Processos
PDF
Stored Procedures com PostgreSQL: porque usar.
PPT
Gerências de Processos: Sincronização
PDF
Funcionamento kernel
PDF
Arquitetura de Computadores: Processos e Threads
PDF
Introdução ao Node.js
PDF
So gabarito exerciciosescalonamentocpu-2012
PPTX
Sistemas operacionais escalonamento de processos
PDF
Event-based Asynchronous Pattern (EAP)
DOCX
Resolução da atividade pagina 84 a 87 so
PDF
Soa#cap4.1 gestor de pacotes
PDF
PHP-CLI em 7 passos
PPTX
PPT
Apostila 5 processos e threads
PDF
3 escalonamento processos
PDF
Programacao c shell
PDF
Tornado mais do que um framework bonitinho
Sistemas Operativos - Processos e Threads
Aula 13 - Algoritmos de Escalonamento
SO-04 Escalonamento de Processos
Stored Procedures com PostgreSQL: porque usar.
Gerências de Processos: Sincronização
Funcionamento kernel
Arquitetura de Computadores: Processos e Threads
Introdução ao Node.js
So gabarito exerciciosescalonamentocpu-2012
Sistemas operacionais escalonamento de processos
Event-based Asynchronous Pattern (EAP)
Resolução da atividade pagina 84 a 87 so
Soa#cap4.1 gestor de pacotes
PHP-CLI em 7 passos
Apostila 5 processos e threads
3 escalonamento processos
Programacao c shell
Tornado mais do que um framework bonitinho
Anúncio

Semelhante a Definição de processos (20)

PDF
Ponteiros de Função
PDF
Mini-curso Programação Paralela e Distribuída
PDF
Desenvolvimento de drivers para sistemas embarcados
PDF
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
PDF
Curso de Java: Threads
PDF
M2ti - Python Brasil
PDF
Exercicios 01 tms i
PDF
Webinar: Porque o RTOS não faz o que eu quero?
PDF
Igor Oliveira - Puppet
PDF
Threads 08: Executores e Futures
PDF
mod3-programação-estruturada
PDF
PL/Python: Programando em Python no PostgreSQL
PPTX
PDF
bom-1.pdf
PPTX
SO - Integrado - Aula 02 - Processos e Threads.pptx
PPTX
Introdução a Linguagem C.pptx [Reparado].pptx
PDF
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
PDF
Processos+threads.2pp
PDF
Sistemas Operacionais - Gnu/Linux Gerenciando Processos
Ponteiros de Função
Mini-curso Programação Paralela e Distribuída
Desenvolvimento de drivers para sistemas embarcados
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Curso de Java: Threads
M2ti - Python Brasil
Exercicios 01 tms i
Webinar: Porque o RTOS não faz o que eu quero?
Igor Oliveira - Puppet
Threads 08: Executores e Futures
mod3-programação-estruturada
PL/Python: Programando em Python no PostgreSQL
bom-1.pdf
SO - Integrado - Aula 02 - Processos e Threads.pptx
Introdução a Linguagem C.pptx [Reparado].pptx
Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf
Processos+threads.2pp
Sistemas Operacionais - Gnu/Linux Gerenciando Processos
Anúncio

Mais de Rodrigo Almeida (20)

PPTX
Embedded systems design @ defcon 2015
PDF
Embedded systems development Defcon 19
PDF
As diferentes engenharias
PDF
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
PDF
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
PDF
Cryptology - Antônio Lacerda
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Projeto de uma controladora de drivers
PDF
Conceitos de ponteiros struct e buffers
PDF
Introdução aos sistemas operacionais embarcados
PDF
Segurança de sistemas: invasões, engenharia reversa e análise de virus
PDF
Comunicação serial
PDF
Utilizando um Display de LCD
PDF
Leitura de teclas com arranjo matricial
PDF
Display de 7 segmentos multiplexados
PDF
Acessando os periféricos de um microcontrolador
PDF
Acesso à memória e registros
PDF
Operações com Bits
Embedded systems design @ defcon 2015
Embedded systems development Defcon 19
As diferentes engenharias
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Cryptology - Antônio Lacerda
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...
Projeto de uma controladora de drivers
Conceitos de ponteiros struct e buffers
Introdução aos sistemas operacionais embarcados
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Comunicação serial
Utilizando um Display de LCD
Leitura de teclas com arranjo matricial
Display de 7 segmentos multiplexados
Acessando os periféricos de um microcontrolador
Acesso à memória e registros
Operações com Bits

Último (12)

PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Utilizando code blockes por andre backes
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Jira Software projetos completos com scrum
PPTX
Tipos de servidor em redes de computador.pptx
Conceitos básicos de Redes Neurais Artificiais
Processos no SAP Extended Warehouse Management, EWM100 Col26
Manejo integrado de pragas na cultura do algodão
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Viasol Energia Solar -Soluções para geração e economia de energia
Utilizando code blockes por andre backes
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Analise Estatica de Compiladores para criar uma nova LP
Jira Software projetos completos com scrum
Tipos de servidor em redes de computador.pptx

Definição de processos

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