Beruflich Dokumente
Kultur Dokumente
Tratando de entender
porqu ahora y no antes
Operating Systems
SASE
Facultad de Ingeniera
Universidad de Buenos Aires
Justificacin
yri
gh
tG
uil
Justificacin
ler
mo
Ja
qu
en
od
Co
p
Justificacin
Justificacin
Justificacin
E Internet explot a nivel mundial, y su uso pas a ser algo comn a todas las
personas, tanto tcnicas como no
en
od
En este caso no existe un administrador de tareas sino que todas las tareas
interactan entre si, a veces en forma compleja y poco estructurada
(Foreground/Background Systems)
Prioridad
Foreground #2
Task #1
ISR #1
/* Background */
void main (void)
{
Initialization;
FOREVER { // while (1)..for (;;)
Read analog inputs;
Read discrete inputs;
Perform monitoring functions;
Perform control functions;
Update analog outputs;
Update discrete outputs;
Scan keyboard;
Handle user interface;
Update display;
Handle communication requests;
Other...
}
uil
Background
ISR #1
Task #2
Task #3
Lazo Infinito
Labrosse
/* Foreground */
ISRa (void) // prioridad media
{
Enable higher interrupts;
Handle asynchronous event;
}
ISRb (void) // prioridad alta
{
Handle asynchronous event;
}
}
10
Labrosse
yri
gh
tG
Tiempo
(Foreground/Background Systems)
ler
ISR #2
Foreground #1
mo
Ja
qu
(soluciones ad-hoc).
Co
p
La duracin de la tarea
#2 es afectada por una
interrupcin
Task #1
ISR
Task #3
Task #4
Lazo Infinito
11
Labrosse
12
Labrosse
Task #1
Task #2
Task #1
en
od
Task #3
Lazo infinito
14
Labrosse
mo
Ja
13
QoS: calidad de
servicio..
qu
Servicios web
Juegos de computadora.
uil
16
yri
gh
tG
15
ler
Co
p
Protocolos de comunicaciones
Aplicacin
Entrada/salida
Compartir recurso
Comunicacin entre tareas
I/Os
Aplicacin
Debug?
Estadsticas?
Stacks
Interfase con
el usuario
RTOS
17
Net
Labrosse
18
Sistema de archivos
Labrosse
en
od
qu
20
Labrosse
Labrosse
uil
tG
Semforos
Semforos de exclusin mutua (MUTEX)
Banderas de eventos (Flags)
Administracin de tareas (Crear, Quitar, Cambiar prioridad,
Suspender, Continuar, etc.)
Bloques de manejo de tareas de dimensin prefijada
Manejo del tiempo y de temporizadores
22
Labrosse
yri
gh
Administracin de mensajes
El caso C-OS II
ler
mo
Ja
19
Co
p
MicroC/OS-II
(Cdigo Independente del
procesador)
OS_CORE.C
OS_FLAG.C
OS_MBOX.C
OS_MEM.C
OS_MUTEX.C
OS_Q.C
OS_SEM.C
OS_TASK.C
OS_TIME.C
uCOS_II.C
uCOS_II.H
C/OS-II
MicroC/OS-II
Configuracin
(Propio de la
aplicacin)
User Program
Newlib C Standard
Library
OS_CFG.H
INCLUDES.H
HAL API
Device
Driver
23
Timer
Device
Driver
Device
Driver
Device
Driver
Device
Driver
Se ubica ac
Y queda disponible
como parte de las
bibliotecas del
sistema
HW
24
Labrosse
Qu es un kernel Non-Preemptive?
Qu es un kernel Preemptive?
ISR
Kernel - ISR
La ocurrencia de una
interrupcin activa la ISR
Kernel - ISR
ISR
Tarea de menor
prioridad(LPT)
Tarea de menor
prioridad
26
Labrosse
uil
Loop infinito
Tarea
Tarea
Labrosse
28
Qu es una tarea?
Labrosse
yri
gh
27
Tarea
tG
Importancia
Tarea
Evento
Tarea
Numeracin
La aplicacin es
dividida en tareas a las
que se asigna
prioridad en base a
sus requerimientos
temporales
ler
Tarea
mo
Ja
Labrosse
qu
en
od
La ocurrencia de una
interrupcin activa la ISR
Co
p
Labrosse
30
Labrosse
Task
A
ISR
Sensores
Qu
ventajas
tendr?
en
od
Tarea de
captura
de Datos
Message
Queue
Tarea de
almacenar
datos
Recurso de
almacenaje
Task
ABC
ISR
Server
qu
Datos
32
Labrosse
Labrosse
ler
mo
Ja
31
Task
C
VS
Comando
Client
Task
B
uil
Labrosse
34
Labrosse
yri
gh
33
tG
Como regla inicial, una tarea debe requerir mucho ms tiempo que el tiempo
del cambio de contexto
35
Co
p
Labrosse
Resident in ROM
(Non-active)
Waiting
For
Execution
Delete
Task
Dormant
Create
Task
Ready
Event Occurs
Or Timeout
Wait for time to expire
Wait for a message
Wait for a signal
Waiting
For
Context
Switch
Wait For
Event
Running
Task
Interrupted
ISR
Event
36
Labrosse
qu
38
Labrosse
Labrosse
Descriptores de tareas
Un TCB (Task Control Block) es una estructura de datos usada por el
kernel para la administracin de las tareas
El TCB contiene:
La prioridad de la tarea
Un puntero al stack de la tarea (TOS: Top-Of-Stack)
Otros datos relacionados con la tarea
Labrosse
Prioridad
de la tarea
40
Labrosse
yri
gh
39
Direccin del
Tope del Stack
ERR_CODE
OSTaskCreate (p_task, p_arg, p_tos, prio)
{
if (a TCB is available) Initialize the TCB;
else
Return an error code;
Initialize the tasks stack;
Increment the number of tasks counter;
Make task ready-to-run;
if (OS is running) {
Call the scheduler;
}
}
tG
Direccin en
memoria de la tarea
uil
ler
mo
Ja
37
INT8U OSTaskCreateExt (
void (*task) (void *pd),
void *pdata,
OS_STK *ptos,
INT8U prio,
INT16U id,
OS_STK *pbos,
INT32U stk_size,
void *pext,
INT16U opt)
en
od
Co
p
Task Stacks
Priority
Priority
Ready
Ready
Priority
Priority
Priority
Ready
Ready
Ready
TCBs
NULL
Task List
41
Labrosse
42
Labrosse
Qu es el Scheduling?
Cundo es invocada?
Cul es su resultado?
Si una tarea ms importante est lista para ser ejecutada (ready)
conmutar de contexto y pasar a estado running dicha tarea. Sin,
retornar al control a la tarea pre-existente
Copyright Guillermo Jaquenod/ELKO - 2010
TCB
TCB
TCB
Highest
Priority
Task
44
Labrosse
TCB
NULL
Lowest
Priority
Task
Interrupciones
Las interrupciones conforman un tipo de tarea de mayor jerarqua que las
tareas convencionales
uil
46
yri
gh
tG
45
ler
mo
Ja
43
qu
en
od
Co
p
Rutina de atencin de
interrupciones: Interrupt Service
Routine (ISR)
Tarea de mayor
prioridad: HPT =
High Priority Task
Labrosse
HPT
HPT
La tarea interrumpida an
es la de mayor prioridad
La tarea HPT
contina lista
ISR
48
PendSV
C/OS-II requiere una interrupcin peridica, que puede ser generada por un
timer de hardware (es tpico de 10 a 1000 ticks/seg) aunque tambin puede
ser la frecuencia de la red (50 or 60 Hz)
HPT
HPT
LPT
LPT
50
Interrupcin sincrnica:
uso del Clock Tick de C/OS-II
uil
52
Timeout de 10 ticks.
void ADCTask (void *p_arg) {
void
*p_msg; OS_ERR err;
for (;;) {
Start ADC;
p_msg = OSMboxPend(.., .., 10, &err);
if (err == OS_NO_ERR) {
Read ADC and Scale; ... ; ... ; ... ;}
else { /* Problema con el ADC! */ }
}
}
Copyright Guillermo Jaquenod/ELKO - 2010
yri
gh
tG
Interrupcin sincrnica:
C/OS-II Timeouts
ler
mo
Ja
49
en
od
Conmutacin de contexto
Context Switch (PendSV call)
Higher priority
task ready
ISR
qu
Interrupcin sincrnica:
el Clock Tick del RTOS
Retardos en C/OS-II
Co
p
Retardos en C/OS-II
void OSTimeDly (INT16U ticks);
53
OSTimeSet() permite alterar por software el valor del reloj del sistema
54
en
od
56
Semforos
uil
ler
mo
Ja
55
qu
58
yri
gh
57
tG
OSSchedLock();
Codigo con el scheduler deshabilitado;
OSSchedUnlock();
Co
p
Semforos
60
10
Recurso compartido
Semforo
Variable(s)
Estructuras de datos
Dispositivos fsicos de I/O
Task 2
Medium
HPT
HPT
Medium
Priority
Task
Task 3
Low
LPT
MPT
La tarea MPT
interrumpe a LPT
LPT
62
Latencia extra
Inversin de prioridades
ler
mo
Ja
61
qu
Tasks
en
od
Task 1
High
La tarea HPT
necesita el
semforo
uil
HPT termina
LPT contina
64
yri
gh
63
tG
MPT termina
Co
p
Banderas de eventos:
Event Flags
ISRs
Abort ISR
RPM
Task
Set or Clear
RPM == 0
Events
(8, 16 or 32 bits)
Abort
TASKs
AI
Task
OR
Wait
Wait
OR
Wait
Abort
Task
AND
Wait
Start
Task
Fuel > 1%
TASKs
User
I/F
Task
AND
Event
Flag
Group
Start
Stop
TASKs
66
11
Banderas de eventos:
estructuras de datos y funciones
Banderas de eventos:
funciones de manejo de flags
Tipos de datos:
typedef INT8U (o INT16U o INT32U) OS_FLAGS; al definir un objeto
de este tipo se lo puede inicializar
struct {} OS_FLAG_GRP: define el estado de un grupo de flags y la
lista de tareas esperando sobre esos eventos
struct {} OS_FLAG_NODE: creado cuando una dada tarea decide
depender de los flags de un dado grupo
en
od
qu
mo
Ja
67
ISR
OSMBoxCreate ( )
OSMBoxDel ( )
OSMBoxPost ( )
OSMBoxPostOpt ( )
Mensaje
OSMBoxAccept ( )
OSMBoxPend ( )
OSMBoxQuery ( )
MailBox
OSMBoxPost ( )
OSMBoxPostOpt ( )
OSMBoxAccept ( )
TAREA
ISR
tG
/* DEFINICIN */
OS_EVENT *mailbox1;
OS_EVENT *mailbox2;
OS_EVENT *mailbox3;
/* CREACION E INICIALIZACION */
int initOSDataStructs (void) {
mailbox1 = OSMboxCreate((void *)NULL);
mailbox2 = OSMboxCreate((void *)NULL);
mailbox3 = OSMboxCreate((void *)NULL);
return 0;
}
yri
gh
69
uil
Un buzn de mensajes es un objeto que permite que una tarea o ISR enve
una variable tipo puntero a otra tarea, donde ese puntero tpicamente
apunta a una estructura propia de la aplicacin, que contiene un mensaje.
Para administrar estos objetos, uC/OS II brinda las siguientes funciones:
El manejo de mensajes
involucra 3 pasos
1.
Definirlos
2.
Crearlos e inicializarlos
3.
Usarlos
ler
TAREA
Organizacin de colas de
mensajes y las tareas que las usan
71
Co
p
Colas de mensajes
TCB
TCB
TCB
pIn
pOut
NULL
Cola de
mensajes
Puntero
al
mensaje
72
Puntero
al
mensaje
Puntero
al
mensaje
Puntero
al
mensaje
12
Rx Task
en
od
Rx ISR
Buffer Pool
NULL
Free List
RxISR(void)
{
Read character from UART
if (1st character of message)
Get a buffer from Buffer Manager
Put character in buffer
if (End of Packet character)
Send packet to RxTask for processing
}
RxTask(void)
{
PACKET *p_msg;
while (1)
p_msg = OSQPend(RxQ, timeout)
Process packet received
Return packet buffer to Buffer Manager
74
ler
mo
Ja
73
qu
UART
Rx
Interrupt
uil
76
yri
gh
75
tG
Co
p
#define
TASK_STACKSIZE
2048
INITIALIZE_TASK_PRIORITY
PRINT_STATUS_TASK_PRIORITY
GETSEM_TASK_PRIORITY
RECEIVE_TASK_PRIORITY
.
.
6
7
8
9
13
80
mo
Ja
79
qu
en
od
tG
uil
ler
82
ALTERA
yri
gh
81
Ejercicio
Ejercicio
reset
Co
p
initOSDataStructs();
OSTaskCreate (InitTask)
OSStart();
OSTaskCreate (host_rcv_task)
InitTask
OSTaskCreate (main_task)
int main ()
Atiendo INT
Escribo semforo
handle_button
interrupts
83
#include <stdio.h>
#include <io.h>
#include <unistd.h>
#include <string.h>
#include "includes.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "altera_avalon_jtag_uart_regs.h"
#include "alt_ucosii_simple_error_check.h"
Habilito INT
Loop {
espero semforo,
cargo mensaje en cola}
host_rcv_task
OSTaskDel (OS_PRIO_SELF)
Loop {
espero mensaje en cola
activo led
delay 1/3 seg }
main_task
ALTERA
84
ALTERA
14
Ejercicio
Ejercicio
// Definition of Message Queue:
#define MSG_QUEUE_SIZE 2
//Size of message queue
OS_EVENT *msgqueue;
//Message queue pointer
void *msgqueueTbl [MSG_QUEUE_SIZE]; // Storage for messages
en
od
#define TASK_STACKSIZE
1024
OS_STK init_task_stk [TASK_STACKSIZE];
OS_STK main_task_stk [TASK_STACKSIZE];
OS_STK host_rcv_task_stk [TASK_STACKSIZE];
// Definition of Semaphore:
OS_EVENT *shared_resource_sem;
// Definition of Task Priorities:
#define INIT_TASK_PRIORITY 6
#define MAIN_TASK_PRIORITY 7
#define HOST_RCV_TASK_PRIORITY 8
int button_val;
int tabla_button[MSG_QUEUE_SIZE]; int postabla;
// Function prototypes
86
ALTERA
ALTERA
mo
Ja
85
qu
my_print (str);
uil
ler
ALTERA
88
ALTERA
yri
gh
87
tG
Ejercicio
Co
p
89
ALTERA
90
ALTERA
15
else { // No place. Ignore the message. Delay by 1 second upon exit of task
OSTimeDlyHMSM (0, 0, 1, 0);
}
}
qu
}
92
ALTERA
ALTERA
mo
Ja
91
en
od
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,NULL_PATTERN);
while (1);
return 0;
Copyright Guillermo Jaquenod/ELKO - 2010
return 0;
ALTERA
94
ALTERA
yri
gh
93
tG
uil
ler
Ejercicio: initOSDataStructs
Co
p
Ejercicio: main ()
int main () {
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,NULL_PATTERN);
printf ("Main program starts now! Press SW Buttons to control LEDs\n");
OSInit();
// Initialize RTOS
initOSDataStructs(); // Initialize Data Structures
ALTERA
16