SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
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)

Weitere ähnliche Inhalte

Was ist angesagt?

Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
Emertxe Information Technologies Pvt Ltd
 
Java Programming: Loops
Java Programming: LoopsJava Programming: Loops
Java Programming: Loops
Karwan Mustafa Kareem
 
Linux booting procedure
Linux booting procedureLinux booting procedure
Linux booting procedure
Dhaval Kaneria
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
Linaro
 

Was ist angesagt? (20)

Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
 
Introduction to Modern U-Boot
Introduction to Modern U-BootIntroduction to Modern U-Boot
Introduction to Modern U-Boot
 
Linux Internals - Part II
Linux Internals - Part IILinux Internals - Part II
Linux Internals - Part II
 
Advanced C - Part 1
Advanced C - Part 1 Advanced C - Part 1
Advanced C - Part 1
 
Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)Dead Lock Analysis of spin_lock() in Linux Kernel (english)
Dead Lock Analysis of spin_lock() in Linux Kernel (english)
 
Java Programming: Loops
Java Programming: LoopsJava Programming: Loops
Java Programming: Loops
 
Course 102: Lecture 19: Using Signals
Course 102: Lecture 19: Using Signals Course 102: Lecture 19: Using Signals
Course 102: Lecture 19: Using Signals
 
Advanced C - Part 3
Advanced C - Part 3Advanced C - Part 3
Advanced C - Part 3
 
linux device driver
linux device driverlinux device driver
linux device driver
 
Linux booting procedure
Linux booting procedureLinux booting procedure
Linux booting procedure
 
OpenGL ES 3 Reference Card
OpenGL ES 3 Reference CardOpenGL ES 3 Reference Card
OpenGL ES 3 Reference Card
 
HKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting ReviewHKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting Review
 
16 dynamic-memory-allocation
16 dynamic-memory-allocation16 dynamic-memory-allocation
16 dynamic-memory-allocation
 
Linux Device Driver’s
Linux Device Driver’sLinux Device Driver’s
Linux Device Driver’s
 
Basics of boot-loader
Basics of boot-loaderBasics of boot-loader
Basics of boot-loader
 
Linux boot process
Linux boot processLinux boot process
Linux boot process
 
C Programming - Refresher - Part III
C Programming - Refresher - Part IIIC Programming - Refresher - Part III
C Programming - Refresher - Part III
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
 
Introduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsIntroduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra Solutions
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 

Andere mochten auch

Trabajo el amor!
Trabajo el amor!Trabajo el amor!
Trabajo el amor!
ROMINA1988
 
Presentación1
Presentación1Presentación1
Presentación1
RROMEROL
 
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
Airton Lima
 
Trabajo practico 2 juajuajua
Trabajo practico 2 juajuajuaTrabajo practico 2 juajuajua
Trabajo practico 2 juajuajua
ValentinaPasquini
 
строительство иц «сколково» статус реализации
строительство иц «сколково» статус реализациистроительство иц «сколково» статус реализации
строительство иц «сколково» статус реализации
SkolkovoTPS
 

Andere mochten auch (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
 
строительство иц «сколково» статус реализации
строительство иц «сколково» статус реализациистроительство иц «сколково» статус реализации
строительство иц «сколково» статус реализации
 

Ähnlich wie Kernel cooperativo

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
Rodrigo Almeida
 
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
flisolmaringa
 

Ähnlich wie 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
 

Mehr von Rodrigo 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 virus
Rodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
Rodrigo Almeida
 

Mehr von 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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

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)