SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
ELT048 - SOE
Kernel Cooperativo
Rodrigo Almeida
Universidade Federal de Itajubá
Revisão
● Processos
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.
Exercício
void main (void){
process p1 = {"F1n",1,func1};
process p2 = {"F2n",2,func2};
long int i;
MCU_init();
ini = 0;
fim = 0;
PTJ = 0x00;
for(;;){
addProc(p1);
addProc(p2);
exec();
for(i=0;i<10000;i++);
removeProc();
exec();
for(i=0;i<10000;i++);
removeProc();
}
}
int func1(void* param){
PORTB=0xF0;
}
int func2(void* param){
PORTB=0x0F;
}
Inicialização do HW
Kernel
● Na área de computação o kernel é a parte
do código responsável por implementar e
gerenciar a interface entre o hardware e a
aplicação.
● Os recursos de hardware mais críticos
neste quesito são o processador, a
memória e os drivers.
Projeto de um kernel
Kernel
● Um kernel possui três responsabilidades
principais:
● Gerenciar e coordenar a execução dos
processos através de algum critério
● Manusear a memória disponível e coordenar o
acesso dos processos a ela
● Intermediar a comunicação entre os drivers de
hardware e os processos
Kernel
● Gerenciamento dos processos
● Deve levar em conta um critério para o
escalonemento do processo: tempo de
execução, prioridade, criticidade, “justiça”, etc.
● Os processos devem ser “armazenados” de
modo a ficarem facilmente disponíveis ao
kernel.
● O kernel deve prover funções para o
gerenciamento destes processos: adicionar,
remover, pausar, etc.
Kernel
● Gerenciamento da memória disponível
● A gestão do espaço disponível para cada
processo é de responsabilidade do kernel
● Um ponto crítico é garantir que cada processo
só possa acessar sua região de memória. Isto
só pode ser feito se houver um hardware
dedicado a este ponto: MMU
Kernel
● Intermediar a comunicação entre os drivers
de hardware e os processos
● O kernel deve prover uma camada de acesso
ao hardware.
● Esta camada é responsável por implementar as
questões de permissão e segurança, como
também padronizar as chamadas de aplicação.
Gestão dos processos
● A gestão dos
processo é feita
através de um
buffer circular
(process pool).
● O acesso a este
buffer deve ser
restrito ao kernel.
http://learnyousomeerlang.com/building-applications-with-otp
Gestão dos processos
● O exemplo a seguir apresenta um modelo de
gerenciamento de processos.
● Note que o pool é implementado como um buffer
circular utilizando a mesma estrutura das aulas
anteriores
● Uma das poucas diferenças é a mudança do pool
para ser um vetor de ponteiros para a struct
process
● Isto permite uma manipulação mais rápida e
simples dos elementos do pool
● Uma movimentação nas posições envolve apenas
uma cópia de ponteiros e não da estrutura inteira.
//definição do ponteiro de função
typedef int (*ptrFunc)(void* param);
//definição da estrutura processo
typedef struct {
char* nome;
void* ptr;
ptrFunc func;
} process;
//definição do pool
#define POOLSIZE 10
process* pool[POOLSIZE];
//a utilização de ponteiros de processo
//facilita a manipulação dos processos
Gestão dos processos
//função de adição de “process” no pool
void addProc(process nProcesso){
//checagem de espaço disponível
if ( ((fim+1)%POOLSIZE) != ini){
//Atualização da posição atual
buffer[fim] = nProcesso;
//incremento da posição
fim = (fim+1)%(POOLSIZE);
}
}
//função de remoção de um “process” do poolvoid
removeProc (void){
//checagem se existe alguem pra retirar
if ( ini != fim ){
//incremento da posição
ini = (ini+1)%(POOLSIZE);
}
}
Gestão dos processos
Escalonador
● É o responsável por escolher qual é o próximo
processo a ser executado.
● Existem alguns parâmetros a serem
considerados:
● Throughtput: quantidade de processos por tempo.
● Latência:
– Turnaround time – tempo entre o inicio e fim de um
processo.
– Response time: valor entre uma requisição e a primeira
resposta do processo.
● Fairness / Waiting Time – conceder uma
quantidade de tempo igual para cada processo.
Escalonador
● First in first out
● Shortest remaining time
● Fixed priority pre-emptive scheduling
● Round-robin scheduling
● Multilevel queue scheduling
Escalonador
Scheduling algorithm CPU
Overhead
Through
put
Turnaround
time
Response
time
First In First Out Low Low High Low
Shortest Job First Medium High Medium Medium
Priority based
scheduling
Medium Low High High
Round-robin
scheduling
High Medium Medium High
Multilevel Queue
scheduling
High High Medium Medium
Escalonador
Operating System Preemption Algorithm
Amiga OS Yes Prioritized Round-robin scheduling
FreeBSD Yes Multilevel feedback queue
Linux pre-2.6 Yes Multilevel feedback queue
Linux 2.6-2.6.23 Yes O(1) scheduler
Linux post-2.6.23 Yes Completely Fair Scheduler
Mac OS pre-9 None Cooperative Scheduler
Mac OS 9 Some Preemptive for MP tasks, Cooperative
Scheduler for processes and threads
Mac OS X Yes Multilevel feedback queue
NetBSD Yes Multilevel feedback queue
Solaris Yes Multilevel feedback queue
Windows 3.1x None Cooperative Scheduler
Windows 95, 98, Me Half Preemptive for 32-bit processes, Cooperative
Scheduler for 16-bit processes
Windows NT (XP,
Vista, 7, 2k)
Yes Multilevel feedback queue
Escalonadores
● Considerações para o ambiente embarcado
● Com a escassez de recursos computacionais,
um algoritmo muito complexo pode minar a
capacidade de processamento muito
rapidamente. Algoritmos mais simples são
preferidos.
● Os sistemas de tempo real possuem algumas
necessidades que em geral só são satisfeitas
por escalonadores “injustos” que possam
privilegiar alguns processos. Ex: priority based
scheduler
Kernel
● Preempção
● Permite ao kernel pausar um processo para
executar um segundo sem que as variáveis e
fluxo de código do primeiro sejam alteradas.
● Necessita de suporte de hardware por
interrupções
● Só é programado em assembly
Kernel
● Cooperativo
● É necessário que os processos terminem
dando oportunidade para outros processos
serem executados pelo processador
● Loops infinitos podem travar todo o sistema
● Pode ser programado inteiro em C e não
necessita de hardware especial
Kernel
● Reagendamento de processos
● Para um kernel cooperativo é importante que
todos os processos terminem voluntariamente
para ceder espaço na CPU para os outros
processos.
● Nos casos em que o processo precisa ser
executado constantemente ele deve ser
reagendado na CPU
Exemplo
● Exemplo de kernel cooperativo
● O código apresentado pode ser compilado em
qualquer compilador C
● O kernel é composto por três funções:
● KernelInit(): Inicializa as variáveis internas
● KernelAddProc(): Adiciona processos no pool
● KernelLoop(): Inicializa o gerenciador de
processos
– Esta função possui um loop infinito pois ela só
precisa terminar quando o equipamento/placa for
desligado.
//return code
#define SUCCESS 0
#define FAIL 1
#define REPEAT 2
//function pointer declaration
typedef char(*ptrFunc)(void);
//process struct
typedef struct {
ptrFunc function;
} process;
process* pool[POOLSIZE];
Exemplo
char kernelInit(void){
ini = 0;
fim = 0;
return SUCCESS;
}
char kernelAddProc(process newProc){
//checking for free space
if ( ((fim+1)%POOL_SIZE) != ini){
pool[fim] = newProc;
fim = (fim+1)%POOL_SIZE;
return SUCCESS;
}
return FAIL;
}
Exemplo
void kernelLoop(void){
int i=0;
for(;;){
//Do we have any process to execute?
if (ini != fim){
printf("Ite. %d, Slot. %d: ", i, start);
//check if there is need to reschedule
if (pool[start]->Func() == REPEAT){
kernelAddProc(pool[ini]);
}
//prepare to get the next process;
ini = (ini+1)%POOL_SIZE;
i++; // only for debug;
}
}
}
Exemplo
void tst1(void){
printf("Process 1n");
return REPEAT;
}
void tst2(void){
printf("Process 2n");
return SUCCESS;
}
void tst3(void){
printf("Process 3n");
return REPEAT;
}
● Os processos
Exemplo
void main(void){
//declaring the processes
process p1 = {tst1};
process p2 = {tst2};
process p3 = {tst3};
kernelInit();
//Test if the process was added successfully
if (kernelAddProc(p1) == SUCCESS){
printf("1st process addedn");}
if (kernelAddProc(p2) == SUCCESS){
printf("2nd process addedn");}
if (kernelAddProc(p3) == SUCCESS){
printf("3rd process addedn");}
kernelLoop();
}
Exemplo
Console Output:
---------------------------
1st process added
2nd process added
3rd process added
Ite. 0, Slot. 0: Process 1
Ite. 1, Slot. 1: Process 2
Ite. 2, Slot. 2: Process 3
Ite. 3, Slot. 3: Process 1
Ite. 4, Slot. 0: Process 3
Ite. 5, Slot. 1: Process 1
Ite. 6, Slot. 2: Process 3
Ite. 7, Slot. 3: Process 1
Ite. 8, Slot. 0: Process 3
...
---------------------------
Exemplo
Exercício
● Criar os arquivos kernel.c, kernel.h,
kernel_prm.h e kernel_types.h.
● Adaptar os códigos apresentados para a
placa.
● Testar o reagendamento dos processos.
● Criar um processo para ligar um segmento
do display de cada vez (PORTB).
● Criar um segundo processo para mudar de
display (PTJ)

Mais conteúdo relacionado

Mais procurados

Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
O que é bit e byte
O que é bit e byteO que é bit e byte
O que é bit e bytenikepassos
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Leinylson Fontinele
 
Apostila sistemas operacionais
Apostila sistemas operacionaisApostila sistemas operacionais
Apostila sistemas operacionaisfernandao777
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosJuliano Atanazio
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15diogoa21
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no WindowsFee Kosta
 
Pointers in c
Pointers in cPointers in c
Pointers in cMohd Arif
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 

Mais procurados (20)

Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Linguagem C 07 Registros
Linguagem C 07 RegistrosLinguagem C 07 Registros
Linguagem C 07 Registros
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Clean Code
Clean CodeClean Code
Clean Code
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
O que é bit e byte
O que é bit e byteO que é bit e byte
O que é bit e byte
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
Apostila sistemas operacionais
Apostila sistemas operacionaisApostila sistemas operacionais
Apostila sistemas operacionais
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Psi-mod-15
Psi-mod-15Psi-mod-15
Psi-mod-15
 
Aula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveisAula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveis
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
C function presentation
C function presentationC function presentation
C function presentation
 
Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no Windows
 
Pointers in c
Pointers in cPointers in c
Pointers in c
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 

Destaque

Sísmica 2010 caracterização geofísica na definição do risco sísmico na cida...
Sísmica 2010   caracterização geofísica na definição do risco sísmico na cida...Sísmica 2010   caracterização geofísica na definição do risco sísmico na cida...
Sísmica 2010 caracterização geofísica na definição do risco sísmico na cida...Pedro Garcia
 
Trabajo el amor!
Trabajo el amor!Trabajo el amor!
Trabajo el amor!ROMINA1988
 
PRESENTACION U.E.B Web 2.0
PRESENTACION  U.E.B Web 2.0 PRESENTACION  U.E.B Web 2.0
PRESENTACION U.E.B Web 2.0 Edgar Castillo
 
Maltrato infantil sinthya michelle
Maltrato infantil sinthya michelleMaltrato infantil sinthya michelle
Maltrato infantil sinthya michelleyunuen26
 
Aprender y enseñar en colaboracion
Aprender y enseñar en colaboracionAprender y enseñar en colaboracion
Aprender y enseñar en colaboracionAlex Andrade
 
Conheça o vilão Dr. Joca Nino
Conheça o vilão Dr. Joca NinoConheça o vilão Dr. Joca Nino
Conheça o vilão Dr. Joca NinoBarao do Pirapora
 
Presentación1
Presentación1Presentación1
Presentación1RROMEROL
 
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIAL
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIALLISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIAL
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIALAnita Arteaga Baca
 
Guía de trabajo ppt candeias do jamari - slides
Guía de trabajo ppt   candeias do jamari - slidesGuía de trabajo ppt   candeias do jamari - slides
Guía de trabajo ppt candeias do jamari - slidesAirton Lima
 
Tu cuerpo y vos, amigos?
Tu cuerpo y vos, amigos?Tu cuerpo y vos, amigos?
Tu cuerpo y vos, amigos?Insight Latam
 
Trabajo practico 2 juajuajua
Trabajo practico 2 juajuajuaTrabajo practico 2 juajuajua
Trabajo practico 2 juajuajuaValentinaPasquini
 
строительство иц «сколково» статус реализации
строительство иц «сколково» статус реализациистроительство иц «сколково» статус реализации
строительство иц «сколково» статус реализацииSkolkovoTPS
 

Destaque (20)

X a lagartinha comilona
X a lagartinha comilonaX a lagartinha comilona
X a lagartinha comilona
 
Sísmica 2010 caracterização geofísica na definição do risco sísmico na cida...
Sísmica 2010   caracterização geofísica na definição do risco sísmico na cida...Sísmica 2010   caracterização geofísica na definição do risco sísmico na cida...
Sísmica 2010 caracterização geofísica na definição do risco sísmico na cida...
 
Modelos de equipamiento
Modelos de equipamientoModelos de equipamiento
Modelos de equipamiento
 
Trabajo el amor!
Trabajo el amor!Trabajo el amor!
Trabajo el amor!
 
PRESENTACION U.E.B Web 2.0
PRESENTACION  U.E.B Web 2.0 PRESENTACION  U.E.B Web 2.0
PRESENTACION U.E.B Web 2.0
 
Maltrato infantil sinthya michelle
Maltrato infantil sinthya michelleMaltrato infantil sinthya michelle
Maltrato infantil sinthya michelle
 
Aprender y enseñar en colaboracion
Aprender y enseñar en colaboracionAprender y enseñar en colaboracion
Aprender y enseñar en colaboracion
 
62 0211 la unidad
62 0211 la unidad62 0211 la unidad
62 0211 la unidad
 
Conheça o vilão Dr. Joca Nino
Conheça o vilão Dr. Joca NinoConheça o vilão Dr. Joca Nino
Conheça o vilão Dr. Joca Nino
 
Presentación1
Presentación1Presentación1
Presentación1
 
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIAL
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIALLISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIAL
LISTADO DE EMPRESAS DONDE LABORA UNA TRABAJADORA SOCIAL
 
Certa noite num estábulo
 Certa noite num estábulo Certa noite num estábulo
Certa noite num estábulo
 
t4_e6 esteve
t4_e6 estevet4_e6 esteve
t4_e6 esteve
 
56 0527 en cades-barnea
56 0527 en cades-barnea56 0527 en cades-barnea
56 0527 en cades-barnea
 
Guía de trabajo ppt candeias do jamari - slides
Guía de trabajo ppt   candeias do jamari - slidesGuía de trabajo ppt   candeias do jamari - slides
Guía de trabajo ppt candeias do jamari - slides
 
A sopa verde
A sopa verdeA sopa verde
A sopa verde
 
Tu cuerpo y vos, amigos?
Tu cuerpo y vos, amigos?Tu cuerpo y vos, amigos?
Tu cuerpo y vos, amigos?
 
Kinematika 2
Kinematika 2Kinematika 2
Kinematika 2
 
Trabajo practico 2 juajuajua
Trabajo practico 2 juajuajuaTrabajo practico 2 juajuajua
Trabajo practico 2 juajuajua
 
строительство иц «сколково» статус реализации
строительство иц «сколково» статус реализациистроительство иц «сколково» статус реализации
строительство иц «сколково» статус реализации
 

Semelhante a Kernel cooperativo

Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsPedro De Almeida
 
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
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPRafael Moreira
 
ProcessosEscalonamento.pdf
ProcessosEscalonamento.pdfProcessosEscalonamento.pdf
ProcessosEscalonamento.pdfssuser1d8ddd
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaLincoln Lamas
 
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
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatchflisolmaringa
 
Coroutine e concorrência python
Coroutine e concorrência   python Coroutine e concorrência   python
Coroutine e concorrência python Kaueh Moreno
 
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
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcadaRodrigo Almeida
 

Semelhante a Kernel cooperativo (20)

Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e 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
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SP
 
ProcessosEscalonamento.pdf
ProcessosEscalonamento.pdfProcessosEscalonamento.pdf
ProcessosEscalonamento.pdf
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
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?
 
Introdução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central DispatchIntrodução ao processamento paralelo com o Grand Central Dispatch
Introdução ao processamento paralelo com o Grand Central Dispatch
 
Estrutura de Processos
Estrutura de ProcessosEstrutura de Processos
Estrutura de Processos
 
Coroutine e concorrência python
Coroutine e concorrência   python Coroutine e concorrência   python
Coroutine e concorrência python
 
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
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Processos+threads.2pp
Processos+threads.2ppProcessos+threads.2pp
Processos+threads.2pp
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcada
 
Aula3so
Aula3soAula3so
Aula3so
 
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
 
aula_04.pdf
aula_04.pdfaula_04.pdf
aula_04.pdf
 

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
 
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...
 
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
 
Microkernel Development
Microkernel DevelopmentMicrokernel Development
Microkernel Development
 

Kernel cooperativo

  • 1. ELT048 - SOE Kernel Cooperativo Rodrigo Almeida Universidade Federal de Itajubá
  • 2. Revisão ● Processos typedef int (*ptrFunc)(void* param); //código antigo typedef struct { char* nomeDoProcesso; ptrFunc funcao; int prioridade; int tempo; }process;
  • 3. 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.
  • 4. Exercício void main (void){ process p1 = {"F1n",1,func1}; process p2 = {"F2n",2,func2}; long int i; MCU_init(); ini = 0; fim = 0; PTJ = 0x00; for(;;){ addProc(p1); addProc(p2); exec(); for(i=0;i<10000;i++); removeProc(); exec(); for(i=0;i<10000;i++); removeProc(); } } int func1(void* param){ PORTB=0xF0; } int func2(void* param){ PORTB=0x0F; } Inicialização do HW
  • 5. Kernel ● Na área de computação o kernel é a parte do código responsável por implementar e gerenciar a interface entre o hardware e a aplicação. ● Os recursos de hardware mais críticos neste quesito são o processador, a memória e os drivers.
  • 6. Projeto de um kernel
  • 7. Kernel ● Um kernel possui três responsabilidades principais: ● Gerenciar e coordenar a execução dos processos através de algum critério ● Manusear a memória disponível e coordenar o acesso dos processos a ela ● Intermediar a comunicação entre os drivers de hardware e os processos
  • 8. Kernel ● Gerenciamento dos processos ● Deve levar em conta um critério para o escalonemento do processo: tempo de execução, prioridade, criticidade, “justiça”, etc. ● Os processos devem ser “armazenados” de modo a ficarem facilmente disponíveis ao kernel. ● O kernel deve prover funções para o gerenciamento destes processos: adicionar, remover, pausar, etc.
  • 9. Kernel ● Gerenciamento da memória disponível ● A gestão do espaço disponível para cada processo é de responsabilidade do kernel ● Um ponto crítico é garantir que cada processo só possa acessar sua região de memória. Isto só pode ser feito se houver um hardware dedicado a este ponto: MMU
  • 10. Kernel ● Intermediar a comunicação entre os drivers de hardware e os processos ● O kernel deve prover uma camada de acesso ao hardware. ● Esta camada é responsável por implementar as questões de permissão e segurança, como também padronizar as chamadas de aplicação.
  • 11. Gestão dos processos ● A gestão dos processo é feita através de um buffer circular (process pool). ● O acesso a este buffer deve ser restrito ao kernel. http://learnyousomeerlang.com/building-applications-with-otp
  • 12. Gestão dos processos ● O exemplo a seguir apresenta um modelo de gerenciamento de processos. ● Note que o pool é implementado como um buffer circular utilizando a mesma estrutura das aulas anteriores ● Uma das poucas diferenças é a mudança do pool para ser um vetor de ponteiros para a struct process ● Isto permite uma manipulação mais rápida e simples dos elementos do pool ● Uma movimentação nas posições envolve apenas uma cópia de ponteiros e não da estrutura inteira.
  • 13. //definição do ponteiro de função typedef int (*ptrFunc)(void* param); //definição da estrutura processo typedef struct { char* nome; void* ptr; ptrFunc func; } process; //definição do pool #define POOLSIZE 10 process* pool[POOLSIZE]; //a utilização de ponteiros de processo //facilita a manipulação dos processos Gestão dos processos
  • 14. //função de adição de “process” no pool void addProc(process nProcesso){ //checagem de espaço disponível if ( ((fim+1)%POOLSIZE) != ini){ //Atualização da posição atual buffer[fim] = nProcesso; //incremento da posição fim = (fim+1)%(POOLSIZE); } } //função de remoção de um “process” do poolvoid removeProc (void){ //checagem se existe alguem pra retirar if ( ini != fim ){ //incremento da posição ini = (ini+1)%(POOLSIZE); } } Gestão dos processos
  • 15. Escalonador ● É o responsável por escolher qual é o próximo processo a ser executado. ● Existem alguns parâmetros a serem considerados: ● Throughtput: quantidade de processos por tempo. ● Latência: – Turnaround time – tempo entre o inicio e fim de um processo. – Response time: valor entre uma requisição e a primeira resposta do processo. ● Fairness / Waiting Time – conceder uma quantidade de tempo igual para cada processo.
  • 16. Escalonador ● First in first out ● Shortest remaining time ● Fixed priority pre-emptive scheduling ● Round-robin scheduling ● Multilevel queue scheduling
  • 17. Escalonador Scheduling algorithm CPU Overhead Through put Turnaround time Response time First In First Out Low Low High Low Shortest Job First Medium High Medium Medium Priority based scheduling Medium Low High High Round-robin scheduling High Medium Medium High Multilevel Queue scheduling High High Medium Medium
  • 18. Escalonador Operating System Preemption Algorithm Amiga OS Yes Prioritized Round-robin scheduling FreeBSD Yes Multilevel feedback queue Linux pre-2.6 Yes Multilevel feedback queue Linux 2.6-2.6.23 Yes O(1) scheduler Linux post-2.6.23 Yes Completely Fair Scheduler Mac OS pre-9 None Cooperative Scheduler Mac OS 9 Some Preemptive for MP tasks, Cooperative Scheduler for processes and threads Mac OS X Yes Multilevel feedback queue NetBSD Yes Multilevel feedback queue Solaris Yes Multilevel feedback queue Windows 3.1x None Cooperative Scheduler Windows 95, 98, Me Half Preemptive for 32-bit processes, Cooperative Scheduler for 16-bit processes Windows NT (XP, Vista, 7, 2k) Yes Multilevel feedback queue
  • 19. Escalonadores ● Considerações para o ambiente embarcado ● Com a escassez de recursos computacionais, um algoritmo muito complexo pode minar a capacidade de processamento muito rapidamente. Algoritmos mais simples são preferidos. ● Os sistemas de tempo real possuem algumas necessidades que em geral só são satisfeitas por escalonadores “injustos” que possam privilegiar alguns processos. Ex: priority based scheduler
  • 20. Kernel ● Preempção ● Permite ao kernel pausar um processo para executar um segundo sem que as variáveis e fluxo de código do primeiro sejam alteradas. ● Necessita de suporte de hardware por interrupções ● Só é programado em assembly
  • 21. Kernel ● Cooperativo ● É necessário que os processos terminem dando oportunidade para outros processos serem executados pelo processador ● Loops infinitos podem travar todo o sistema ● Pode ser programado inteiro em C e não necessita de hardware especial
  • 22. Kernel ● Reagendamento de processos ● Para um kernel cooperativo é importante que todos os processos terminem voluntariamente para ceder espaço na CPU para os outros processos. ● Nos casos em que o processo precisa ser executado constantemente ele deve ser reagendado na CPU
  • 23. Exemplo ● Exemplo de kernel cooperativo ● O código apresentado pode ser compilado em qualquer compilador C ● O kernel é composto por três funções: ● KernelInit(): Inicializa as variáveis internas ● KernelAddProc(): Adiciona processos no pool ● KernelLoop(): Inicializa o gerenciador de processos – Esta função possui um loop infinito pois ela só precisa terminar quando o equipamento/placa for desligado.
  • 24. //return code #define SUCCESS 0 #define FAIL 1 #define REPEAT 2 //function pointer declaration typedef char(*ptrFunc)(void); //process struct typedef struct { ptrFunc function; } process; process* pool[POOLSIZE]; Exemplo
  • 25. char kernelInit(void){ ini = 0; fim = 0; return SUCCESS; } char kernelAddProc(process newProc){ //checking for free space if ( ((fim+1)%POOL_SIZE) != ini){ pool[fim] = newProc; fim = (fim+1)%POOL_SIZE; return SUCCESS; } return FAIL; } Exemplo
  • 26. void kernelLoop(void){ int i=0; for(;;){ //Do we have any process to execute? if (ini != fim){ printf("Ite. %d, Slot. %d: ", i, start); //check if there is need to reschedule if (pool[start]->Func() == REPEAT){ kernelAddProc(pool[ini]); } //prepare to get the next process; ini = (ini+1)%POOL_SIZE; i++; // only for debug; } } } Exemplo
  • 27. void tst1(void){ printf("Process 1n"); return REPEAT; } void tst2(void){ printf("Process 2n"); return SUCCESS; } void tst3(void){ printf("Process 3n"); return REPEAT; } ● Os processos Exemplo
  • 28. void main(void){ //declaring the processes process p1 = {tst1}; process p2 = {tst2}; process p3 = {tst3}; kernelInit(); //Test if the process was added successfully if (kernelAddProc(p1) == SUCCESS){ printf("1st process addedn");} if (kernelAddProc(p2) == SUCCESS){ printf("2nd process addedn");} if (kernelAddProc(p3) == SUCCESS){ printf("3rd process addedn");} kernelLoop(); } Exemplo
  • 29. Console Output: --------------------------- 1st process added 2nd process added 3rd process added Ite. 0, Slot. 0: Process 1 Ite. 1, Slot. 1: Process 2 Ite. 2, Slot. 2: Process 3 Ite. 3, Slot. 3: Process 1 Ite. 4, Slot. 0: Process 3 Ite. 5, Slot. 1: Process 1 Ite. 6, Slot. 2: Process 3 Ite. 7, Slot. 3: Process 1 Ite. 8, Slot. 0: Process 3 ... --------------------------- Exemplo
  • 30. Exercício ● Criar os arquivos kernel.c, kernel.h, kernel_prm.h e kernel_types.h. ● Adaptar os códigos apresentados para a placa. ● Testar o reagendamento dos processos. ● Criar um processo para ligar um segmento do display de cada vez (PORTB). ● Criar um segundo processo para mudar de display (PTJ)