Publicado el 12 de Enero del 2019
707 visualizaciones desde el 12 de Enero del 2019
12,5 MB
49 paginas
Creado hace 11a (24/03/2014)
Topic 5
ARM Cortex M3(i)
Operating Systems in Industrial
Applications
5 Operating Systems
La informatica industrial a menudo trata de la
programacion de pequeños sistemas informáticos sin
muchos recursos.
Si aumentamos la complejidad del hardware o de los
algoritmos a emplear, necesitaremos de otra aplicación
que nos ofrezca las funciones del sistema
Sistema Operativo
Aplicación industrial
•
se ejecuta en modo usuario
Sistema Operativo
•
en modo supervisor
Aplicación
industrial
Sistema Operativo
Hardware
2
5 Operating Systems
Tarea o Proceso Programa en ejecucion
Tarea es cualquier programa que se encuentre cargado en
memoria desde la que es procesado por la CPU.
Caracteristicas de las tareas
Deben ser lo mas independientes posibles del resto de tareas.
No deben compartir datos con otras tareas
Tendrá sistemas para intercambiar informacion con es exterior (E/S)
y con el resto de tareas (sincronizacion)
Dispondrá de areas de memoria propias
3
5 Operating Systems
Multitarea
Monotarea.
Sistema informatico que solo puede mantener simultaneamente un
programa de aplicación cargado en memoria
Multitarea.
Permite a varios programas simultaneamente
Paralelismo de grano gordo. ->Dan la sensacion de que varios
trabajos independientes se ejecutan en paralelo
Se aprovecha los tiempos de espera de una tarea para que
ejecuten instrucciones otras tareas
4
5 Operating Systems
Procesos
El Sistema Operativo se encarga de administrar el tiempo,
sincronizar y comunicar entre si a los procesos
Permite a tareas trabajar mientras otras esperan otros eventos
En un mismo sistema pueden existir tareas de tiempo real con
tareas sin requerimientos temporales estrictos
El Sistema Operativo es el encargado de asegurar que se
cumplen los tiempos de las tareas de TR
5
5 Operating Systems
Tiempo de
espera a
eventos
Tarea de
tiempo real
Planific
ador
Tarea de
tiempo real
Tarea con
operaciones de
E/S
Despac
hador
CPU
Tarea en
ejecución
Tiempo
de
cómputo
Tiempo de
acceso a
E/S
STOP
Tarea de
cómputo
intensivo
Figura -. Colaboración entre planificador y despachador.
6
5 Operating Systems
Procesos
Proceso Se pueden ver como contenedores de recursos
Tareas que ejecutan codigo
Memoria
Descriptores de archivos
Objetos que indican elementos software o hardware que se tienen en uso
7
5 Operating Systems
Si una aplicación necesita realizar más de un
trabajo,¿Cómo lo estructuramos?
Solucion 1
Realizar una aplicación que vaya ejecutando en orden todos los trabajos
que hay que realizar.
Ventajas
Sencillo
Inconveniente
No es eficiente. Si en uno de los trabajos se accede a hardware, toda la
aplicación debe esperar a que el hardware responda
8
5 Operating Systems
Si una aplicación necesita realizar más de un
trabajo,¿Cómo lo estructuramos?
Solucion 2
Dividir toda la aplicación en trabajos, y asignar cada uno de ellos a un
procesos.
Si necesito comunicar datos entre ellos, utilizar metodos de comunicación
entre procesos (pipes, sockets, buffers de memoria,…)
Ventajas
Puede incrementar el rendimiento de la aplicación
Disminuye el tiempo de respuesta por la ejec. paralelo
Inconveniente
Se duplican los recursos
La comunicación entre procesos puede llegar a ser lenta
9
5 Operating Systems
Si una aplicación necesita realizar más de un
trabajo,¿Cómo lo estructuramos?
Solucion 3
Permitir una ejecucion paralela de los diferentes trabajos en el mismo
proceso
No necesito comunicar datos entre los flujos, ya que estos pueden acceder
a todos los recursos
Surgen para poder obtener esta solucion los subprocesos (o procesos
ligeros o hilos)
10
5 Operating Systems
El proceso es un contenedor de los recursos que utilice la
aplicación
Memoria
Descriptores de archivos
Objetos que indican elementos software o hardware que se tienen en uso
Y................ Los hilos de los que haga uso
11
5 Operating Systems
Hilos
Cada proceso tendrá por lo menos un hilo
Los hilos son entes de ejecución de código, tareas que
comparten recursos
Estado de un hilo lo define
Su propia pila
Los registros del procesador a nivel de usuario
Una estructura interna del núcleo con informacion adicional del estado del
hilo
En la pila es donde se almacena la parte fundamental de su
estado, que incluye fundamentalmente su estado
12
5 Operating Systems
Hilos
Todos los recursos son compartidos por todos los hilos del proceso
Las variables globales y la memoria dinámica (como vimos está en la zona de
memoria asignada a la parte de código) será compartida por todos los
procesos Problema de concurrencia
13
5 Operating Systems
Hilos
Estados de un hilo
Lista
Bloqueada
Corriendo
Terminada
14
5 Operating Systems
Creacion de Hilos.
Los sistemas operativos multihilados ofrecen a los usuarios la
forma de crear hilos.
Nosotros en esta asignatura nos vamos a basar en un Sistema
Operativo soportado por Cortex-M3: RTX.
RTX es un sistema operativo de tiempo real creado para
dispositivos basados en el procesador Cortex-M. El Kernel de
RTX se puede utilizar para crear aplicaciones que realizan varias
tareas al mismo tiempo. Permite la programacion de aplicaciones
de usuario usando el estándar de C y C++ y compilados con
ARMCC, GCC o IAR compilator.
15
5 Operating Systems
Creacion de Hilos.
El CMSIS-RTOS es una API (Interfaz de programación de aplicaciones)
común para RTOS. Proporciona una interfaz de programación estándar que
es portátil para muchos RTOS y por lo tanto permite que las plantillas de
Software, middleware, bibliotecas y otros componentes soportados por RTOS
El RTX CMSIS-RTOS gestiona los recursos del micro implementa el
concepto de hilos paralelos que se ejecutan simultáneamente.
16
5 Operating Systems
Creacion de Hilos.
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)
Crea un hilo y lo añadie a la lista de Hilos Activos en el estado de READY
Parameters:
[entrada] thread_def Puntero a una definicion de hilo realizada mediante osThreadDef y referenciada con
osThread.
[entrada] argument Puntero a una variable que se pasa a la funcion del hilo como un argumento de
entrada. t.
returns: ID del hilo para referenciar por otras funciones o NULL en caso de error.
Inicia hilo asignado a una funcion y lo añade a la lista hilos activos, estableciendo su estado como
READY. La función del hilo recibe el argumento como argumento de la función cuando se ésta se
inicia. Cuando la prioridad de la función del hilo creado es superior al hilo RUNNING, el hilo creado
comienza inmediatamente y se convierte en el nuevo hilo RUNNING .
17
5 Operating Systems
Creacion de Hilos.
La definicion de un hilo se realiza en dos fases:
Primero se define la funcion que va a ejecutar
void FuncionHilo(void const *arg);
A continuacion se define el tipo de hilo
osThreadDef (funtion_name,priority,instancias,stacksize)
La prioridad del hilo tendra los valores
osPriorityIdle = -3,
osPriorityLow = -2,
osPriorityBelowNormal = -1,
osPriorityNormal = 0,
osPriorityAboveNormal = +1,
osPriorityHigh = +2,
osPriorityRealtime = +3,
osPriorityError = 0x84
Instancias: numero maximo de hilos con esta definicion que se crearan.
StackSize. Tamaño de la pila del hilo (en bytes). 0->Tamaño standar.
18
5 Operating Systems
19
5 Operating Systems
Creacion de Hilos.
Example
#include "cmsis_os.h“
void Thread_1 (void const *arg); // function prototype for Thread_1
osThreadDef (Thread_1, osPriorityNormal, 1, 0); // define Thread_1
void ThreadCreate_example (void) {
osThreadId id;
id = osThreadCreate (osThread (Thread_1), NULL); // create the thread
if (id == NULL)
{ // handle thread creation
// Failed to create a thread
}
osThreadTerminate (id); // stop the thread
}
20
5 Operating Systems
Creacion de Hilos.
osThreadId osThreadGetId (void)
Retorna el identificador osThreadId del hilo que la llama
osStatus osThreadTerminate (osThreadId thread_id)
Finaliza la ejecucion del hilo que la llama y lo borra de la lista de Hilos Activos.
osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority)
Cambia la prioridad del hilo thread_id a la prioridad priority.
21
5 Operating Systems
Concurrencia
Si dos sistemas pretenden usar simultaneamente un mismo
recurso se dice que lo usan concurrentemente
Eso puede provocar errores
de codigo modificaciones de la memoria compartida.
Dispositivo hardwarecorrupcion de datos
22
5 Operating Systems
Código en lenguaje C
int main(int argc, char** argv)
{
int iNum, iCubo, iCont;
printf(“Introduzca un nº:”);
scanf(“%d”, &iNum);
iCubo = iNum;
if(!CompruebaNumero(iNum))
{
printf(“Número no válido”);
return -1;
}
for(iCont = 0; iCont < 2; ++iCont)
iCubo *= iNum;
printf( “\nEl cubo de %d es %d\n”,
iNum, iCubo);
return 0;
}
int CompruebaNumero(int num)
{
if(num > 1000)
return 0;
return 1;
}
23
5 Operating Systems
Código en lenguaje C
int main(int argc, char** argv)
{
int iNum, iCubo, iCont;
printf(“Introduzca un nº:”);
scanf(“%d”, &iNum);
iCubo = iNum;
if(!CompruebaNumero(iNum))
{
printf(“Número no válido”);
return -1;
}
for(iCont = 0; iCont < 2; ++iCo
Comentarios de: Topic 5 - Operating Systems in Industrial Applications (0)
No hay comentarios