Manual de referencia de µc/os-ii. Alberto Ortiz

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Manual de referencia de µc/os-ii. Alberto Ortiz"

Transcripción

1 Manual de referencia de µc/os-ii Alberto Ortiz 3 de noviembre de 2011

2 Contenido 5.1. Introducción Arquitectura de µc/os-ii Inicialización del núcleo Gestión de tareas Gestión del tiempo Comunicación entre tareas y sincronización Semáforos Buzones de mensajes Colas de mensajes Gestión de memoria Programación de interrupciones en µc/os-ii Obtención de estadísticas Configuración de µc/os-ii Introducción Una de las alternativas para programar sistemas empotrados hoy en día son los llamados sistemas operativos de tiempo real (SOTR). Su característica principal es que ofrecen al programador toda una serie de servicios orientados a la implementación de sistemas de tiempo real en general, y sistemas empotrados en particular, lo cual no es habitual en los sistemas operativos normales. Algunos presentan la apariencia típica de un sistema operativo en el sentido habitual del término, con sistemas de ventanas, sistema de ficheros, acceso a redes y entornos de desarrollo, mientras que otros, denominados núcleos de tiempo real (real-time kernels), son librerías de funciones, normalmente en C, que implementan los servicios anteriormente comentados. A la hora de implementar sistemas empotrados existen otras alternativas, consistentes en utilizar lenguajes de programación que incorporan construcciones apropiadas para implementar aplicaciones de tiempo real. Hoy en día, el lenguaje ADA constituye la opción más apropiada dentro de esta categoría, aunque lenguajes como MODULA u OCCAM pueden resultar también útiles. En particular, los compiladores ADA permiten apoyarse en el sistema operativo en cuanto a la gestión de tareas, o bien añadir al programa un planificador, para así poder prescindir del sistema operativo y poder trabajar sobre máquina desnuda. En este capítulo, consideraremos la utilización del núcleo de tiempo real µc/os-ii [Lab99] junto con lenguaje C para la implementación de sistemas empotrados. Actualmente, hay más de 80 productos de este estilo comercializados, disponibles para casi todas las plataformas basadas en microprocesador/microcontrolador existentes. Su coste va desde los $70 hasta los $30,000. Este hecho es uno de los que puede dificultar adoptar un cierto núcleo para el desarrollo de un sistema empotrado, sobre todo si el fabricante exige el pago de royalties por la incorporación 1

3 Alberto Ortiz - Escuela Politécnica Superior (UIB) 2 del núcleo a cada unidad fabricada o vendida (es como si el núcleo estuviera en un circuito integrado que forma parte del diseño hardware del sistema, y que por tanto hay que incorporar a cada unidad fabricada). El incremento en los requerimientos de memoria y un overhead en torno al 2 %-4 % son desventajas añadidas al uso de SOTR en general. Las ventajas que aportan, sin embargo, sobre el uso de lenguajes de programación estándar, superan ampliamente estas desventajas: 1. diseño de aplicaciones más simple por la división en tareas, 2. gestión eficiente y rápida de eventos críticos, 3. gestión adecuada de recursos, via semáforos, mailboxes, colas de mansajes, retrasos temporales, etc. En las siguientes secciones veremos las características y funciones básicas de µc/os-ii. El resto de funciones se pueden encontrar en [Lab99] Arquitectura de µc/os-ii La arquitectura de µc/os-ii, así como su relación con el hardware, vienen reflejada en la siguiente figura: Aplicación µc/os-ii (código independiente del procesador) ucos II.C, ucos II.H OS CORE.C OS TASK.C OS TIME.C OS MBOX.C OS Q.C OS SEM.C OS MEM.C µc/os-ii configuration (código específico de la aplicación) OS CFG.H INCLUDES.H µc/os-ii port (código específico del procesador) OS CPU.H OS CPU A.ASM OS CPU C.C CPU TEMPORIZADOR

4 Alberto Ortiz - Escuela Politécnica Superior (UIB) 3 Dentro de esta estructura, el fichero OS CFG.H da valor a constantes de configuración de µc/os-ii. En particular, fuerza la inclusión de las partes necesarias de µc/os-ii para cada aplicación concreta, de acuerdo con la filosofía microkernel. Aparte, da por ejemplo valor a constantes relacionadas con el número de semáforos o de colas de mensajes utilizados por la aplicación. El fichero INCLUDES.H es un fichero general que incluye todos los ficheros.h necesarios para crear una aplicación µc/os-ii, tanto los headers del compilador como los headers de µc/os-ii. Finalmente, el enlazador debe enlazar los ficheros OS CPU A.OBJ (proviene de OS CPU A.ASM), OS CPU C.OBJ (proviene de OS CPU C.C) y ucos II.OBJ (proviene de ucos II.C) con el(los) fichero(s).obj que constituyen la aplicación. El compilador con el que fue desarrollado µc/os-ii fue Borland C/C++ v3.1, por lo que es el más indicado para realizar cualquier desarrollo. Otros compiladores, o incluso versiones superiores del compilador de Borland, deberían ser utilizables sin muchas adaptaciones, siempre y cuando puedan generar código para MS-DOS Inicialización del núcleo El siguiente listado muestra la estructura de cualquier aplicación µc/os-ii: #include "includes.h" void Task1(void *data); void Task2(void *data); void main (void) OSInit(); (1) PC_DOSSaveReturn(); (2) PC_VectSet(uCOS, OSCtxSw); (3) OS_ENTER_CRITICAL(); (4) PC_VectSet(0x08, OSTickISR); (5) PC_SetTickRate(OS_TICKS_PER_SEC); (6) OS_EXIT_CRITICAL(); (7) OSTaskCreate(Task1,...); (8) OSTaskCreate(Task2,...); (8) OSStart(); (9) void Task1 (void *data) for (;;) if (...) PC_DOSReturn(); (10)... OSTimeDly(...); (11)

5 Alberto Ortiz - Escuela Politécnica Superior (UIB) 4 void Task2 (void *data) for (;;)... OSTimeDly(...); (11) En este listado: (1) OS Init() inicializa el núcleo. En particular, crea las tareas OSTaskIdle, que es la que se ejecuta cuando no hay ninguna tarea de aplicación lista, y OSTaskStat, que es una tarea encargada de proporcionar estadísticas acerca de la aplicación en ejecución. (2) PC DOSSaveReturn() guarda información para poder volver al DOS una vez iniciado el entorno multitarea (3) PC VectSet(uCOS, OSCtxSw) instala la función de conmutación de contexto OS- CtxSw (ver OS CPU A.ASM) de µc/os-ii en la interrupción ucos (0x80, ver OS CPU.H). (4) OS ENTER CRITICAL desactiva las interrupciones para asegurar que las siguientes operaciones son atómicas (ver OS CPU.H). (5) PC VectSet(0x08, OSTickISR) instala la rutina de servicio a la interrupción del temporizador (ver OS CPU A.ASM) que a su vez invoca OSTimeTick() para mantener el control del tiempo (ver OS CORE.C). (6) PC SetTickRate(OS TICKS PER SEC) reprograma el temporizador que controla el paso del tiempo. Por defecto, OS TICKS PER SEC vale 200, indicando una frecuencia de activación de la rutina de interrupción del temporizador de 200 Hz (ver OS CFG.H). (7) EXIT CRITICAL reactiva las interrupciones desactivadas con anterioridad para asegurar la atomicidad de operaciones anteriores (ver OS CPU.H). (8) OSTaskCreate(Task,...) crea la tarea Task a partir del código de la función del mismo nombre. (9) OSStart() activa el entorno multitarea poniendo en ejecución las tareas creadas. Esta función nunca vuelve a la función main. (10) PC DOSReturn() devuelve el control al DOS a partir de la información de retorno obtenida por PC DOSSaveReturn(). (11) OSTimeDly(...) suspende la tarea que lo invoca durante el número de activaciones de la rutina de activación del temporizador indicado. Aunque esta estructura es factible dentro de µc/os-ii, modifica el vector de interrupción del temporizador antes de que el entorno multitarea sea activado. Es muy probable que OSStart() se ejecute antes de que llegue la interrupción del temporizador, por lo que la mayoría de las veces no pasará nada. Sin embargo, si se crea una única tarea desde el main(), de forma que sea ésta la que modifique el vector de interrupciones del temporizador y la que declare las tareas de la aplicación, entonces se obtiene una versión más segura.

6 Alberto Ortiz - Escuela Politécnica Superior (UIB) 5 #include "includes.h" void void void Task1(void *data); Task2(void *data); TaskStart(void *data); void main (void) OSInit(); PC_DOSSaveReturn(); PC_VectSet(uCOS, OSCtxSw); OSTaskCreate(TaskStart,...); OSStart(); void TaskStart (void *data) WORD key; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSTaskCreate(Task1,...); OSTaskCreate(Task2,...); for (;;) if (PC_GetKey(&key) == TRUE) if (key == 0x1B) PC_DOSReturn(); OSTimeDly(...); void Task1 (void *data) for (;;)... OSTimeDly(...); void Task2 (void *data)

7 Alberto Ortiz - Escuela Politécnica Superior (UIB) 6 for (;;)... OSTimeDly(...); Estos dos listados muestran, por tanto, dos esqueletos posibles para aplicaciones µc/os-ii. En el caso del port para Win32, hay ligeros cambios: #include "includes.h" void void void Task1(void *data); Task2(void *data); TaskStart(void *data); void main (void) OSInit(); /* PC_DOSSaveReturn(); PC_VectSet(uCOS, OSCtxSw); */ // no es necesario // no es necesario OSTaskCreate(TaskStart,...); OSStart(); void TaskStart (void *data) WORD key; /* OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); */ // no es necesario OSTaskCreate(Task1,...); OSTaskCreate(Task2,...); for (;;) if (PC_GetKey(&key) == TRUE) if (key == 0x1B) /* PC_DOSReturn(); */ // nueva forma de retorno exit(0); OSTimeDly(...);

8 Alberto Ortiz - Escuela Politécnica Superior (UIB) 7 void Task1 (void *data) for (;;)... OSTimeDly(...); void Task2 (void *data) for (;;)... OSTimeDly(...); Para finalizar, µc/os-ii define también una serie de tipos de datos independientes de la plataforma (ver OS CPU.H): typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned int INT16U; typedef signed int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef float FP32; typedef double FP64; #define BYTE #define UBYTE #define WORD #define UWORD #define LONG #define ULONG INT8S INT8U INT16S INT16U INT32S INT32U 5.4. Gestión de tareas Estados de una tarea La siguiente figura muestra los estados y transiciones entre estos estados que son posibles en µc/os-ii:

9 Alberto Ortiz - Escuela Politécnica Superior (UIB) 8 Creación de tareas Para µc/os-ii, una tarea es una función con un parámetro consistente en un puntero a datos con parámetros para la tarea, código de inicialización y un bucle infinito que se suspende de vez en cuando. Por otro lado, la función nunca vuelve. void task (void *pdata) <inicializacion> for(;;)... <suspension>... Una tarea es creada mediante OSTaskCreate(): INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) donde: task es el puntero a la función que contiene el código de la tarea. pdata es un puntero al argumento que es pasado a la tarea en la primera activación (esto permite activar como tareas diferentes instancias de la misma función y pasarle a cada una de ellas un pdata diferente). ptos es el puntero a la cabeza de la pila de la tarea. Por lo tanto, el programador debe haber asignado memoria para la pila con anterioridad a la creación de la tarea. ptos es un puntero al tipo OS STK, el cual viene dado por (ver OS CPU.H): typedef unsigned int OS_STK; Cuando se pasa ptos hay que tener claro cómo crece la pila del procesador en cuestión: hacia posiciones altas de memoria o hacia posiciones bajas (80x86).

10 Alberto Ortiz - Escuela Politécnica Superior (UIB) 9 prio es la prioridad asignada a la tarea, entre 0 (máxima) y OS LOWEST PRIO 63 (mínima, ver OS CFG.H). Dentro de este rango, están reservadas para el entorno las prioridades 0, 1, 2, 3, OS LOWEST PRIO-3, OS LOWEST PRIO-2, OS LOWEST PRIO-1 y OS LOWEST PRIO. El valor retornado por la función, al igual que muchas otras funciones de µc/os-ii, es un código de error. En este caso, tiene que ver básicamente con la validez de la prioridad asignada. En particular, no se puede asignar la misma prioridad a diferentes tareas (la prioridad actua como identificador). Por ejemplo: #define TASK_STK_SIZE 512 OS_STK TaskStartStk[TASK_STK_SIZE];... OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0); Si una tarea crea otra tarea con prioridad superior, el planificador es invocado para hacer la conmutación de contexto correspondiente. Cuando una tarea es creada, el núcleo almacena la información que necesita acerca de ella en una estructura de datos denominada Bloque de Control de Tarea (TCB, Task Control Block). En µc/os-ii, existe una variante de OSTaskCreate llamada OSTaskCreateExt, que aporta flexibilidad a la creación de tareas. Eliminación de tareas µc/os-ii permite eliminar tareas creadas con OSTaskCreate y OSTaskCreateExt mediante la función OSTaskDel(). Eliminar la tarea no significa liberar el espacio en memoria ocupado por la función correspondiente a la tarea, sino invalidar su TCB, por lo que la tarea pasa a estado durmiente. Por tanto, una vez eliminada, la tarea no volverá a ser planificada a menos que vuelva a ser creada. La sintaxis de esta función viene dada por: INT8U OSTaskDel (INT8U prio) donde prio es la prioridad que ostenta la tarea, que como ya se ha dicho actua de identificador. Una tarea puede borrarse a si misma si emplea el valor de la variable OS PRIO SELF (ver ucos II.H). El planificador es invocado en este caso para poner en ejecución una nueva tarea. La única tarea que no puede ser eliminada es OSTaskIdle. Suspensión y reanudación de tareas En algunas ocasiones es útil poder suspender la ejecución de una tarea concreta de la aplicación. En µc/os-ii, esto se consigue invocando la función OSTaskSuspend(): INT8U OSTaskSuspend (INT8U prio) donde prio es la prioridad de la tarea a suspender. Una vez suspendida, la tarea sólo puede ser reanudada mediante OSTaskResume(): INT8U OSTaskResume (INT8U prio) donde de nuevo prio es la prioridad de la tarea a reanudar. Una tarea puede suspenderse a si misma, pero no puede suspender a la tarea OSTaskIdle. Si una tarea suspendida con OSTaskSuspend() estaba originalmente suspendida por alguna otra razón, OSTaskResume() sólo la libera de la suspensión OSTaskSuspend().

11 Alberto Ortiz - Escuela Politécnica Superior (UIB) 10 Modificar la prioridad de una tarea Una tarea puede modificar su prioridad o la de otra tarea invocando la función OSTask- ChangePrio(): INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio) donde oldprio y newprio son, respectivamente, la prioridad original y la nueva Gestión del tiempo µc/os-ii proporciona dos funciones para suspender la tarea actualmente en ejecución hasta que se produzca un cierto evento periódico: OSTimeDly() y OSTimeDlyHMSM(). OSTimeDly() presenta la siguiente sintaxis: void OSTimeDly (INT16U ticks) donde ticks es el número de ticks de reloj o expiraciones del temporizador que se desea suspender la tarea. Cuando se emplea esta función hay que convertir tiempo en ticks de reloj. Para ello se tiene la constante OS TICKS PER SEC (ver OS CFG.H), que indica la frecuencia de expiración del temporizador. Por otra parte, OSTimeDlyHMSM() presenta la siguiente sintaxis: void OSTimeDlyHMSM (INT8U hrs, INT8U min, INT8U sec, INT16U mil) que permite expresar el intervalo de suspensión directamente en tiempo, como hrs horas, min minutos, sec segundos y mil milisegundos. Nótese que esta función permite retrasar la tarea un número de ticks superior a 65535, que es el máximo que permite OSTimeDly. Una tarea suspendida por tiempo puede ser reanudada por otra tarea mediante la función OSTimeDlyResume(): INT8U OSTimeDlyResume (INT8U prio) De nuevo, prio es el identificador de la tarea suspendida. Análogamente al caso de OSTaskResume(), esta función sólo libera a la tarea de la suspensión por tiempo. Por otra parte, si la tarea requerida no estaba realmente suspendida, la función retorna el código de error correspondiente (ver manual de referencia [Lab99] para la lista de errores). Finalmente, se puede consultar el tiempo actual, en ticks, a través de la función OSTime- Get(): INT32U OSTimeGet (void) También se puede fijar el contador de tiempo al valor deseado con OSTimeSet(): void OSTimeSet (INT32U ticks) 5.6. Comunicación entre tareas y sincronización µc/os-ii proporciona varios mecanismos estándar para proteger variables compartidas y de comunicación entre tareas. Aparte de esos mecanismos µc/os-ii implementa: 1. las macros OS ENTER CRITICAL y OS EXIT CRITICAL para, respectivamente, activar y desactivar las interrupciones; y

12 Alberto Ortiz - Escuela Politécnica Superior (UIB) las funciones OSSchedLock() y OSSchedUnlock() para, respectivamente, bloquear y desbloquear la activación del planificador. Debido a lo drástico de estas medidas, es recomendable utilizar los mecanismos tradicionales que se describen a continuación Semáforos Un semáforo debe ser creado antes de ser utilizado. Para ello hay que invocar la función OSSemCreate(): OS_EVENT *OSSemCreate (INT16U cnt) donde cnt es el valor inicial del semáforo y el valor de retorno es un puntero a una estructura de tipo OS EVENT que será requerido en llamadas posteriores a otras funciones OSSem???(). Si se ha excedido el número máximo de semáforos, el valor de retorno es NULL. Como se puede ver, µc/os-ii permite crear semáforos contadores. La operación wait sobre un semáforo es implementada a través de la función OSSemPend() de µc/os-ii: void OSSemPend (OS_EVENT *sem, INT16U timeout, INT8U *err) donde sem es el puntero a la estructura OS EVENT correspondiente al semáforo, timeout expresa un tiempo máximo de espera en ticks, tras el cual la tarea pasa a estar activa de nuevo y err es un código de error que expresa, entre otros, si el semáforo ha podido ser capturado o no en el tiempo especificado. Si timeout es 0, la tarea espera indefinidamente hasta que obtiene el semáforo. Una función similar a OSSemPend() es OSSemAccept(). Al contrario que la primera, ésta no suspende la tarea en caso de que el recurso no esté disponible. INT16U OSSemAccept (OS_EVENT *sem) El valor retornado es el valor de cuenta del semáforo antes de decrementarlo; es decir, el número de recursos disponibles antes de ejecutar la llamada. Si este valor es 0, es que no hay recursos disponibles y por tanto la tarea no debería entrar en la región crítica protegida por sem. Por otro lado, la operación signal viene implementada en forma de la función OSSem- Post(): INT8U OSSemPost (OS_EVENT *sem) donde sem es el puntero a la estructura OS EVENT correspondiente al semáforo y el valor retornado es un código de error Buzones de mensajes Un buzón de mensajes o mailbox en µc/os-ii es un mecanismo que permite a una tarea enviar un puntero a un mensaje a otra tarea. Al igual que en el caso de los semáforos, los mailboxes han de ser creados antes de ser utilizados. Para ello, se ha de utilizar la función OSMboxCreate(): OS_EVENT *OSMboxCreate (void *msg)

13 Alberto Ortiz - Escuela Politécnica Superior (UIB) 12 Análogamente a los semáforos, esta función retorna un puntero a una estructura de tipo OS EVENT que hace referencia al mailbox. El parámetro msg permite pasar el primer mensaje al mailbox. El mailbox está vacío cuando el puntero al mensaje es NULL. Una vez creado el mailbox, las funciones para utilizarlo son también análogas a las de los semáforos: 1. OSMboxPend() para esperar a que otra tarea ponga un mensaje en el mailbox: void *OSMboxPend (OS_EVENT *mbox, INT16U timeout, INT8U *err) mbox, timeout y err tienen el mismo significado que en el caso de la función OSSemPend(). El valor retornado, sin embargo, es el mensaje existente en el mailbox, si es que no ha sido excedido el tiempo timeout. 2. OSMboxPost() para poner un mensaje en el mailbox: INT8U OSMboxPost (OS_EVENT *mbox, void *msg) Esta función retorna un error en caso de que el mailbox esté lleno, entre otras situaciones. Si hay una tarea suspendida por el mismo mailbox y de mayor prioridad que la que invoca OSMboxPost(), entonces se produce el intercambio de contexto correspondiente. 3. OSMboxAccept() para capturar el mensaje del mailbox sin esperar: void *OSMboxAccept (OS_EVENT *mbox) Si el mailbox está vacío, el valor returnado es el puntero NULL Colas de mensajes En µc/os-ii, una cola de mensajes es una lista circular de tamaño fijo a través de la que una o varias tareas pueden pasar mensajes a otra(s) tarea(s). Una cola de mensajes ha de ser también creada con anterioridad a su uso, mediante la función OSQCreate(): OS_EVENT *OSQCreate (void **start, INT16U size) El parámetro start es un puntero al buffer donde se ha de almacenar los mensajes (los mensajes son de tipo void). Ese buffer ha de tener espacio suficiente para size mensajes. El valor retornado es de nuevo un puntero a una estructura OS EVENT. µc/os-ii implementa las siguientes funciones en relación a las colas de mensajes: 1. OSQPend() para obtener un mensaje de la cola y suspender la tarea en el caso en el que la cola esté vacía: void *OSQPend (OS_EVENT *queue, INT16U timeout, INT8U *err) El significado de los parámetros y del valor retornado es idéntico al caso de OS MboxPend(). 2. OSQPost() para colocar una mensaje al final de una cola de mensajes (estrategia FIFO): INT8U OSQPost (OS_EVENT *queue, void *msg)

14 Alberto Ortiz - Escuela Politécnica Superior (UIB) 13 El valor retornado es de nuevo un código de error. En particular, se produce un error si la cola está llena. Si hay una tarea suspendida por la misma cola y de mayor prioridad que la que invoca OSQPost(), entonces se produce el intercambio de contexto correspondiente. 3. OSQPostFront() para colocar un mensaje al principio de una cola de mensajes (estrategia LIFO): INT8U OSQPostFront (OS_EVENT *queue, void *msg) Por lo demás, funciona igual que OSQPost(). 4. OSQAccept() permite capturar un mensaje de la cola sin esperar, de manera análoga a semáforos y mailboxes: void *OSQAccept (OS_EVENT *queue) 5. OSQFlush() borra todos los mensajes de una cola: INT8U OSQFlush (OS_EVENT *queue) El valor retornado es un código de error Gestión de memoria Desde una aplicación C normal se puede asignar memoria de forma dinámica invocando las funciones malloc y free, y de hecho esto se puede hacer en una aplicación µc/os-ii. Sin embargo, no es aconsejable utilizar estas funciones en una aplicación de tiempo real porque: (1) la forma como se realiza la asignación de memoria da lugar a fragmentación; (2) el algoritmo de asignación no es determinista, lo cual impide calcular el peor tiempo de ejecución; (3) las funciones de gestión de memoria dinámica no son generalmente reentrantes, por lo que en una aplicación de tiempo real habría que considerarlas como recursos compartidos. La estrategia de asignación de memoria dinámica implementada en µc/os-ii está basada en gestionar áreas de memoria suministradas por la propia aplicación a modo de particiones de bloques de tamaño fijo. Por tanto, la aplicación es quien ha de proporcionar las particiones y las funciones de µc/os-ii son las que gestionan los bloques de tamaño fijo en que se dividen esas particiones. Para crear una partición, hay que invocar la función OSMemCreate(): OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksz, INT8U *err) donde addr es el puntero a la partición, nblks es el número de bloques de tamaño blksz en que se quiere dividir la partición y err es un código de error. El valor retornado es un puntero a una estructura de tipo OS MEM, que contiene la información relativa a la partición. Cada bloque ha de poder contener al menos un puntero, porque la partición se organiza como una lista encadenada de bloques. Una vez creada la partición se puede obtener bloques de memoria, uno cada vez, invocando OSMemGet(): void *OSMemGet (OS_MEM *pmem, INT8U *err) pmem hace referencia a la partición en cuestión y err contendrá un código de error. Si no hay bloques disponibles, el valor retornado es NULL. Tras utilizar un bloque, la tarea correspondiente debería retornarlo llamando a la función OSMemPut():

15 Alberto Ortiz - Escuela Politécnica Superior (UIB) 14 INT8U OSMemPut (OS_MEM *pmem, void *pblk) pblk hace referencia al bloque a retornar a pmem. El valor retornado es un código de error Programación de interrupciones en µc/os-ii En µc/os-ii, una rutina de servicio a una interrupción debe ser programada de acuerdo con la siguiente estructura: salvar todos los registros de la CPU; invocar OSIntEnter(); ejecutar codigo de usuario; invocar OSIntExit(); restaurar todos los registros de la CPU; ejecutar una instruccion de retorno de interrupcion; µc/os-ii utiliza las funciones OSIntEnter() y OSIntExit() para saber cuándo se está sirviendo una interrupción. Eso es porque µc/os-ii no permite ejecutar ciertas operaciones desde rutinas de servicio a interrupción para facilitar que terminen lo antes posible. Por ejemplo, las funciones tipo OS???Pend() no pueden ser ejecutadas desde interrupciones si ello puede dar lugar a que la interrupción sea suspendida, ya que sólo las tareas pueden estar suspendidas. Por otro lado, tampoco permite provocar conmutaciones de contexto desde una rutina de interrupción (es el caso de las funciones tipo OS???Post(), que pueden dar lugar a conmutaciones de contexto como ya se ha descrito anteriormente). En el caso que se haya producido un anidamiento de interrupciones, cuando se termina de servir la última interrupción, la ejecución del último OSIntExit() (nivel de anidamiento de interrupciones 0) sí puede derivar en un intercambio de contexto si las rutinas de interrupción ejecutadas han provocado que tareas de más alta prioridad a la interrumpida se despierten Obtención de estadísticas µc/os-ii contiene una tarea que, cuando es activada, proporciona la utilización de la CPU en tiempo de ejecución. Esta tarea se denomina OSTaskStat() y se ejecuta cada segundo para almacenar en la variable OSCPUUsage la utilización instantánea de la CPU. Para poder obtener esa medida, hay que invocar OSStatInit() antes de declarar las tareas de la aplicación. En definitiva, OSStatInit() inicializa la variable OSIdleCtrMax con el número de veces que la tarea OSTaskIdle() 1 puede incrementar el contador de 32 bits OSIdleCtr durante un segundo. void OSTaskIdle (void *pdata) for (;;) OS_ENTER_CRITICAL(); OSIdleCtr++; OS_EXIT_CRITICAL(); 1 OSTaskIdle() es la tarea que se ejecuta cuando ninguna tarea de la aplicación está lista para ser ejecutada. Es decir, cuando todas las tareas de aplicación están suspendidas.

16 Alberto Ortiz - Escuela Politécnica Superior (UIB) 15 Por ejemplo, en un Pentium 333 MHz, este contador alcanza en un segundo un valor en torno a 15,000, A partir de OSIdleCtrMax, se puede calcular la utilización de la CPU en tiempo de ejecución de la forma siguiente: ( OSCP UUsage = OSIdleCtr ) OSIdleCtrM ax Obsérvese que, al utilizar OSIdleCtrMax tal y como se ha definido, este cálculo es independiente del procesador empleado. Aparte de OSCPUUsage, µc/os-ii mantiene una serie de contadores que permiten completar la estadística sobre la aplicación: OSTaskCtr contiene el número de tareas creadas, OSCtxSwCtr contiene el número de intercambios de contexto realizados Configuración de µc/os-ii µc/os-ii puede ser configurado de diferentes maneras, en particular en cuanto a la funcionalidad que efectivamente es incluida en el archivo ejecutable definitivo. La configuración concreta del sistema se realiza a través de una serie de constantes, definidas en OS CFG.H. La siguiente lista repasa las constantes más relevantes: 1. OS TICKS PER SEC especifica la frecuencia a la que será invocada la función del núcleo OSTimeTick(). La aplicación debe asegurarse que será ésta la frecuencia con la que el temporizador llegará a 0 invocando apropiadamente PC SetTickRate(). 2. OS MAX TASKS es el número máximo de tareas que se pueden declarar. No puede ser mayor que OS LOWEST PRIO especifica la prioridad más baja, es decir el identificador de tarea más alto que puede ser asignado. No puede superar OS TASK CREATE EN es un flag que habilita (1) o deshabilita (0) la compilación de la función OSTaskCreate(). 5. OS TASK CREATE EXT EN es un flag que habilita (1) o deshabilita (0) la compilación de la función OSTaskCreateExt(). 6. OS TASK DEL EN es un flag que habilita (1) o deshabilita (0) la compilación de la función OSTaskDel(). 7. OS TASK SUSPEND EN es un flag que habilita (1) o deshabilita (0) la compilación de la función OSTaskSuspend(). 8. OS TASK CHANGE PRIO EN es un flag que habilita (1) o deshabilita (0) la compilación de la función OSTaskChangePrio(). 9. OS TASK IDLE STK SIZE indica el tamaño de la pila de la tarea OSTaskIdle en palabras (2 bytes). Debe ser suficiente para almacenar todos los registros de la CPU y gestionar todas las interrupciones anidadas. 2 Aunque está lejos del valor máximo de un entero sin signo de 32 bits, 4,294,967,296, al pasar a una máquina más potente habría que asegurarse que el contador sigue sin desbordarse.

17 Alberto Ortiz - Escuela Politécnica Superior (UIB) OS TASK STAT EN es un flag que habilita (1) o deshabilita (0) la compilación del código correspondiente a la obtención de estadísticas de ejecución. 11. OS TASK STAT STK SIZE especifica el tamaño de la pila de la tarea que obtiene las estadísticas de la aplicación. 12. OS MBOX EN es un flag que habilita (1) o deshabilita (0) la compilación de las funciones y estructuras de datos relacionadas con mailboxes. 13. OS Q EN es un flag que habilita (1) o deshabilita (0) la compilación de las funciones y estructuras de datos relacionadas con colas de mensajes. 14. OS MAX QS indica el número máximo de colas de mensajes que va a poder crear la aplicación. Como mínimo tiene que valer OS SEM EN es un flag que habilita (1) o deshabilita (0) la compilación de las funciones y estructuras de datos relacionadas con semáforos. 16. OS MAX EVENTS especifica el número total de estructuras OS EVENT que va a asignar µc/os-ii. Como mínimo tiene que valer 2. Esto afecta pues al número total de semáforos, mailboxes y colas de mensajes que va a utilizar la aplicación. 17. OS MEM EN es un flag que habilita (1) o deshabilita (0) la compilación de las funciones y estructuras de datos relacionadas con el gestor de memoria dinámica. 18. OS MAX MEM PART determina el número de particiones de memoria que va a utilizar la aplicación. Como mínimo tiene que valer 2. Como se puede observar, la mayor parte de los flags están orientados a proporcionar a µc/os-ii la configurabilidad de la arquitectura microkernel.

18 Bibliografía [Lab99] Jean J. Labrosse. µc/os - II. The Real-Time Kernel. R&D publications,

S i s t e m a s e n t i e m p o r e a l. Autores: Pisana, Pablo Picca, Ezequiel Díaz Vélez, Agustín Saavedra, Walter Elías

S i s t e m a s e n t i e m p o r e a l. Autores: Pisana, Pablo Picca, Ezequiel Díaz Vélez, Agustín Saavedra, Walter Elías S i s t e m a s e n t i e m p o r e a l IMPLEMENTACION DE UN CONTROL DE SEMAFOROS Autores: Pisana, Pablo Picca, Ezequiel Díaz Vélez, Agustín Saavedra, Walter Elías INTRODUCCION: En este trabajo se presentará

Más detalles

Aplicaciones multihebra bajo el

Aplicaciones multihebra bajo el Laboratorio 12: Aplicaciones multihebra bajo el RTOS uc/os II Programación de sistemas y dispositivos José Manuel Mendías Cuadros Dpto. Arquitectura de Computadores y Automática Universidad Complutense

Más detalles

Otros servicios de los RTOS. Sistemas embebidos para tiempo real

Otros servicios de los RTOS. Sistemas embebidos para tiempo real Otros servicios de los RTOS Sistemas embebidos para tiempo real Índice Introducción Comunicación entre tareas: mail box, queues, pipes. Gestión del tiempo Eventos Gestión dinámica de memoria Interrupciones

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Procesos Definición y Estados

Procesos Definición y Estados Procesos Definición y Estados Profesorado de Informática CeRP del Suroeste, Uruguay Contenidos Qué es un proceso Estructuras de datos para gestionar procesos API para trabajar con procesos Hilos (threads).

Más detalles

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones

Más detalles

Convivencia Gestión de Procesos

Convivencia Gestión de Procesos Convivencia Gestión de Procesos Dra. Carolina Mañoso Dpto. Informática y Automática.UNED Índice: Procesos Introducción a los procesos Estados de los procesos Listas de procesos El planificador de procesos

Más detalles

Estructura de los sistemas de cómputo

Estructura de los sistemas de cómputo Estructura de los sistemas de cómputo Introducción Elementos básicos de un computador Registro del procesador Ejecución de las instrucciones Interrupciones Hardware de protección Introducción Qué es un

Más detalles

Introducción a los Sistemas Operativos S.O.

Introducción a los Sistemas Operativos S.O. Introducción a los Sistemas Operativos S.O. Contenido 1. Conceptos 2. Evolución de los Sistemas Operativos 3. Administración del Entorno de Hardware 1. CONCEPTOS 1.1. Definición de Sistema Operativo Es

Más detalles

Universidad Autónoma de Sinaloa Facultad de Informática Culiacán Maestría en Ciencias de la Información

Universidad Autónoma de Sinaloa Facultad de Informática Culiacán Maestría en Ciencias de la Información Universidad Autónoma de Sinaloa Facultad de Informática Culiacán Maestría en Ciencias de la Información Curso Propedéutico Introducción al Lenguaje C MC. Diego Alonso Gastélum Chavira Junio-2011 Historia

Más detalles

Sistemas Operativos. Procesos

Sistemas Operativos. Procesos Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso

Más detalles

Hilos Secciones Stallings:

Hilos Secciones Stallings: Capítulo 4 Hilos Secciones Stallings: 4.1 4.3 Contenido Procesos e hilos. Hilos a nivel de núcleo y a nivel de usuario. Multiprocesador simétrico (SMP). Micronúcleos. 1 Proceso Unidad de propiedad de los

Más detalles

Sistemas Operativos. Daniel Rúa Madrid

Sistemas Operativos. Daniel Rúa Madrid Sistemas Operativos Daniel Rúa Madrid Qué es? Es un programa que administra el hardware de una computadora. También proporciona las bases para los programas de aplicación y actúa como intermediario entre

Más detalles

Tema 6: Memoria dinámica

Tema 6: Memoria dinámica : Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0

Más detalles

Apuntadores en C y C++

Apuntadores en C y C++ Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta

Más detalles

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía Tema 3 SUBRUTINAS ÍNDICE Definición e instrucciones básicas Soporte para el tratamiento de subrutinas (ejecución de la subrutina y gestión del bloque de activación) Interrupciones vs llamadas a procedimiento

Más detalles

SISTEMAS OPERATIVOS Arquitectura de computadores

SISTEMAS OPERATIVOS Arquitectura de computadores SISTEMAS OPERATIVOS Arquitectura de computadores Erwin Meza Vega emezav@unicauca.edu.co Esta presentación tiene por objetivo mostrar los conceptos generales de la arquitectura de los computadores, necesarios

Más detalles

Programación Orientada a Objetos en C++

Programación Orientada a Objetos en C++ Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

Tema 12: El sistema operativo y los procesos

Tema 12: El sistema operativo y los procesos Tema 12: El sistema operativo y los procesos Solicitado: Tarea 06 Arquitecturas de una computadora y el funcionamiento del software M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx

Más detalles

Programación Concurrente

Programación Concurrente Master en Computación Programación Concurrente Bloque II: Programación concurrente en POSIX Tema 1. Introducción al estándar POSIX Tema 2. Sistema Operativo MaRTE OS Tema 3. Gestión de Threads Tema 5.

Más detalles

Microprocesadores. Procesadores IA-32 e Intel R 64 Tareas. Alejandro Furfaro

Microprocesadores. Procesadores IA-32 e Intel R 64 Tareas. Alejandro Furfaro Microprocesadores Procesadores IA-32 e Intel R 64 Tareas Alejandro Furfaro Junio de 2012 Temario 1 Introducción 2 Recursos para manejo de tareas en IA-32 Task State Segment Descriptor de TSS Descriptor

Más detalles

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO Definición y objetivos de un S.O Definición y objetivos del sistema operativo Estructura, componentes y servicios de un S.O Llamadas al sistema

Más detalles

Curso de Java Introducción a la Programación II

Curso de Java Introducción a la Programación II Curso de Java Introducción a la Programación II Jaime Fernández Martín Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Tipos Java 2 Decalaración de variables 3 Operadores aritméticos Índice

Más detalles

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. 1 TAREA 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. 1- Cuáles son las principales funciones de un sistema operativo? Los Sistemas Operativos tienen como objetivos o funciones principales lo siguiente; Comodidad;

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución

Más detalles

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Unidad V. Ya veremos qué poner en algunas_palabras y algo_más, por ahora sigamos un poco más. Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está

Más detalles

Funciones Definición de función

Funciones Definición de función Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas

Más detalles

SISTEMAS OPERATIVOS, 10 de septiembre de 2009 Examen Convocatoria Extraordinaria

SISTEMAS OPERATIVOS, 10 de septiembre de 2009 Examen Convocatoria Extraordinaria Calificación 1 2 3 SISTEMAS OPERATIVOS, 10 de septiembre de 2009 Examen Convocatoria Extraordinaria Nombre Titulación Dispone de dos horas para realizar el examen 1 (6 puntos) Test. En cada uno de los

Más detalles

Conmutación de Tareas

Conmutación de Tareas Conmutación de Tareas Conmutación de tareas Expira el tiempo de ejecución asignado por el procesador a la tarea N El procesador almacena en memoria el estado de máquina (contexto) de la tarea N. El procesador

Más detalles

Plataformas de Tiempo Real

Plataformas de Tiempo Real Master en Computación Plataformas de Tiempo Real POSIX Avanzado y Extensiones Tema 1. Ficheros y entrada/salida Tema 2. Gestión de Interrupciones en MaRTE OS Tema 3. Monitorización y control avanzado del

Más detalles

Práctica de Arquitectura de Computadores Sistemas de Entrada/Salida: Entrada/Salida Programada Curso 2016/2017

Práctica de Arquitectura de Computadores Sistemas de Entrada/Salida: Entrada/Salida Programada Curso 2016/2017 Práctica de Arquitectura de Computadores Sistemas de Entrada/Salida: Entrada/Salida Programada Curso 2016/2017 Antonio Pérez Ambite Santiago Rodríguez de la Fuente Departamento de Arquitectura y Tecnología

Más detalles

El operador contenido ( ) permite acceder al contenido de

El operador contenido ( ) permite acceder al contenido de 3. Memoria Dinámica y Punteros Objetivos: Distinguir los conceptos de memoria estática y memoria dinámica Comprender el concepto de puntero como herramienta de programación Conocer cómo se definen y cómo

Más detalles

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

Facultad de Ingeniería Industrial y de Sistemas v1.1 MA781U CONCEPTOS INICIALES CASOS DE USO

Facultad de Ingeniería Industrial y de Sistemas v1.1 MA781U CONCEPTOS INICIALES CASOS DE USO CONCEPTOS INICIALES CASOS DE USO Preparado por: Angel Chata Tintaya (angelchata@hotmail.com) Resumen Se presenta el analisis funcional basico del sistema operativo desarrollado en RationalRose. I. PAQUETES

Más detalles

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado

Más detalles

Programación Básica Estructuras de Datos y Funciones en C

Programación Básica Estructuras de Datos y Funciones en C Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 8 Universidad de Guanajuato, DCI, Campus León 1 / 33 Contenido 1 Estructuras de Datos

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales

05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 05 Funciones en lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 1 Temario Programación funcional Declaración (prototipos) y definición de funciones

Más detalles

PUNTEROS (APUNTADORES)

PUNTEROS (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)

Más detalles

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos

Más detalles

Construyendo Programas más Complejos

Construyendo Programas más Complejos Arquitectura de Ordenadores Construcciones de Alto Nivel en Ensamblador Abelardo Pardo abel@it.uc3m.es Universidad Carlos III de Madrid Departamento de Ingeniería Telemática Construyendo Programas más

Más detalles

Facultad de Informática Universidad Euskal Herriko del País Vasco Unibertsitatea Arquitectura de Computadores I Guión de los laboratorios de E/S 1

Facultad de Informática Universidad Euskal Herriko del País Vasco Unibertsitatea Arquitectura de Computadores I Guión de los laboratorios de E/S 1 Arquitectura de Computadores I Guión de los laboratorios de E/S 1 Con el objetivo de afianzar los conceptos sobre entrada/salida estudiados en este tema, se proponen una serie de prácticas de laboratorio

Más detalles

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;) Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

Acceso coordinado a recursos compartidos

Acceso coordinado a recursos compartidos Programación Concurrente en Linux Acceso coordinado a recursos compartidos Alberto Lafuente, Dep. KAT/ATC de la UPV/EHU, bajo Licencia Creative Commons 1 Contenido 1. Recursos compartidos 2. Mecanismos

Más detalles

Cómo implementar tus propias funciones en Lenguaje C?

Cómo implementar tus propias funciones en Lenguaje C? Cómo implementar tus propias funciones en Lenguaje C? por Iván Cruz Cuando se realiza un programa, es importante siempre manejar una buena organización del código fuente, debido a que se puede desear incrementar

Más detalles

Tema 6: Clases. Índice

Tema 6: Clases. Índice Tema 6: Clases Antonio J. Sierra Índice 1. Fundamentos. 2. Declaración de objetos. 3. Asignación de objetos a variables referencia. 4. Métodos. 5. Constructores. 6. this. 7. Recogida de basura. 8. Modelado

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. Palabras reservadas de C++ y C Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. A continuación se muestra el link del listado de palabras

Más detalles

Necesidad de Protección

Necesidad de Protección Necesidad de Protección Por qué necesitamos protección? Para mejorar la utilización del sistema, el Sistema de Operación empezó a compartir recursos del sistema entre varios programas de manera simultánea.

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?

Más detalles

Unidad 1: Gestión de Procesos

Unidad 1: Gestión de Procesos Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de

Más detalles

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria Sistemas operativos UPCO ICAI Departamento de Electrónica y Automática 1 Hasta ahora hemos visto Relación programa-sistema operativo Gestión de memoria Reserva para la ejecución Pilas, heap, memoria de

Más detalles

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos

Más detalles

Comunicación y sincronización

Comunicación y sincronización Comunicación y sincronización Son conceptos relacionados con la interacción entre los procesos La comunicación se refiere al paso de información de un proceso a otro La sincronización corresponde al cumplimiento

Más detalles

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos Sistema Operativo Repaso de Estructura de Computadores Capítulo 1 Explota los recursos hardware de uno o más procesadores Proporciona un conjunto de servicios a los usuarios del sistema Gestiona la memoria

Más detalles

Clases y Objetos en C++

Clases y Objetos en C++ Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar

Más detalles

Concurrencia Monitores. Guillermo Román Díez

Concurrencia Monitores. Guillermo Román Díez Concurrencia Monitores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de

Más detalles

GESTION DE LA MEMORIA

GESTION DE LA MEMORIA GESTION DE LA MEMORIA SISTEMAS OPERATIVOS Generalidades La memoria es una amplia tabla de datos, cada uno de los cuales con su propia dirección Tanto el tamaño de la tabla (memoria), como el de los datos

Más detalles

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 ) FUNCIONES Las funciones son el medio básico de que se vale C para construir programas. Un Programa es, básicamente, una colección de funciones entre las que se incluye una especial llamada main(), la función

Más detalles

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

9. Lenguaje ensamblador

9. Lenguaje ensamblador 9. Lenguaje ensamblador Lenguaje máquina: un programa o secuencia de instrucciones viene dado por una secuencia de códigos binarios. Lenguaje ensamblador: secuencia lógica de sentencias pertenecientes

Más detalles

Tema 1: Introducción a los Sistemas Operativos

Tema 1: Introducción a los Sistemas Operativos Tema 1: Introducción a los Sistemas Operativos Yolanda Blanco Fernández yolanda@det.uvigo.es Qué es un Sistema Operativo (SO)? Un programa que actúa como intermediario entre el usuario y el hardware del

Más detalles

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS A.- ASPECTOS FUNDAMENTALES DEL CÓDIGO ORIENTADO A OBJETOS MÓDULOS DE CÓDIGO: El código en Visual Basic se almacena en módulos. Hay tres tipos de módulos: de formulario,

Más detalles

Tema 2: Programación basada en Objetos

Tema 2: Programación basada en Objetos Tema 2: Programación basada en Objetos Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Índice Objetivos Introducción Vista Pública Clases Objetos

Más detalles

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Unidad III Punteros Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Ejemplo: Paso de Punteros a una Función Arreglos (Arrays) Unidimensionales Los Arreglos son una colección de variables

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

CUESTIONARIO. Instituto Tecnológico de Iztapalapa Ingeniería en Sistemas computacionales. LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4

CUESTIONARIO. Instituto Tecnológico de Iztapalapa Ingeniería en Sistemas computacionales. LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4 CUESTIONARIO LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4 Gomez Cruz Alberto Abraham 11 1. Cuál es el concepto de Interruptores? Es una operación que suspende la ejecución de un programa de modo que el sistema

Más detalles

Tipos Recursivos de Datos

Tipos Recursivos de Datos 1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),

Más detalles

Introducción a la Programación en C Funciones

Introducción a la Programación en C Funciones Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Velocidades Típicas de transferencia en Dispositivos I/O

Velocidades Típicas de transferencia en Dispositivos I/O Entradas Salidas Velocidades Típicas de transferencia en Dispositivos I/O Entradas/Salidas: Problemas Amplia variedad de periféricos Entrega de diferentes cantidades de datos Diferentes velocidades Variedad

Más detalles

ADMINISTRACION DE LA MEMORIA. En memoria 1 solo proceso Desventajas:

ADMINISTRACION DE LA MEMORIA. En memoria 1 solo proceso Desventajas: ADMINISTRACION DE LA MEMORIA Función del Administrador de Memoria Registra qué parte de memoria está libre y ocupada Asigna y libera espacio en memoria a los procesos Administra el intercambio entre la

Más detalles

Introducción a los Sistemas Operativos

Introducción a los Sistemas Operativos Introducción a los Sistemas Operativos Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es 1 Índice General Conceptos sobre ordenadores Concepto

Más detalles

Laboratorio de Arquitectura de Redes. Introducción al lenguaje C

Laboratorio de Arquitectura de Redes. Introducción al lenguaje C Laboratorio de Arquitectura de Redes Introducción al lenguaje C Introducción al lenguaje C Introducción Características del lenguaje C Funciones en C Identificadores o etiquetas Las librerías y el linkado

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

Sistemas Operativos Tema 2: Estructura del computador José Miguel Santos Alexis Quesada Francisco Santana

Sistemas Operativos Tema 2: Estructura del computador José Miguel Santos Alexis Quesada Francisco Santana Sistemas Operativos Tema 2: Estructura del computador 1998-2008 José Miguel Santos Alexis Quesada Francisco Santana 1 Contenidos Estructura de la E/S Sistema de Interrupciones DMA Jerarquía de memorias

Más detalles

2. Variables dinámicas

2. Variables dinámicas 2. Variables dinámicas 1. Introducción 2. Gestión de memoria dinámica 3. Punteros y variables dinámicas en lenguaje algorítmico 4. Gestión de memoria dinámica y punteros en C Bibliografía Biondi y Clavel.

Más detalles

Tema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1)

Tema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1) Tema VII POO y lenguajes de programación no Orientados a Objetos (R-1.1) Programación en Entornos Interactivos. 14 de marzo de 2011 Dpto. Lenguajes y Sistemas Informáticos Universidad de Alicante 1 / 28

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

Manual de referencia de C++ Parte IV Variables Punteros. Preparado por Prof. Luis A. Ortiz Ortiz

Manual de referencia de C++ Parte IV Variables Punteros. Preparado por Prof. Luis A. Ortiz Ortiz Manual de referencia de C++ Parte IV Variables Punteros Preparado por Prof. Luis A. Ortiz Ortiz TABLA DE CONTENIDO Memoria de la computadora... 1 Representación de la memoria de la computadora... 1 Declaración

Más detalles

Introducción a la Programación

Introducción a la Programación Introducción a la Programación Fundamentos de Programación Ingeniería Informática en Sistemas de Información Alicia Troncoso 1 Contenido l Introducción l Mi primer programa l Etapas a seguir en la programación

Más detalles

RESEÑA DE LENGUAJE C

RESEÑA DE LENGUAJE C RESEÑA DE LENGUAJE C VARIABLES La función main. Es el punto de entrada al programa. void main(void) Aquí escribo mi programa Tipos de datos. Char. El char es una variable de 1 byte. Almacena números enteros.

Más detalles

PROCEDIMIENTOS ALMACENADOS

PROCEDIMIENTOS ALMACENADOS Modelado de Base de Datos PROCEDIMIENTOS ALMACENADOS Universidad Politecnica de los Llanos Procedimiento Almacenado Un Procedimiento almacenado es un Objeto de Base de Datos que puede encapsular logica

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

Más detalles

Tema 6 Organización y gestión de la memoria

Tema 6 Organización y gestión de la memoria Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución

Más detalles

Mensajes. Interbloqueo

Mensajes. Interbloqueo CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya (angelchata@hotmail.com) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose

Más detalles

Control Digital en PC con MS-DOS

Control Digital en PC con MS-DOS Control Digital en PC con MS-DOS Abel Alberto Cuadrado Vega 19 de abril de 2006 1. Introducción Un PC puede ser utilizado para realizar un sistema de control digital. Para ello necesita lo siguiente: tarjeta

Más detalles

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual. Manual de Dev-C++ 4.9.9.2 Página 1 de 11 Introducción Dev-C++ es un IDE (entorno de desarrollo integrado) que facilita herramientas para la creación y depuración de programas en C y en C++. Además, la

Más detalles

Punteros y aritmética de punteros. se almacena el operando

Punteros y aritmética de punteros. se almacena el operando 1. Introducción Punteros y aritmética de punteros Una de las características más poderosas del C, es el puntero o apuntador. Los punteros permiten simular las llamadas por referencia y crear y manipular

Más detalles

Examen Teórico (1/3 de la nota final)

Examen Teórico (1/3 de la nota final) Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad

Más detalles

Conceptos de Planificación

Conceptos de Planificación Conceptos de Planificación Conceptos de Planificación Planificación Planificación de Procesos de Procesos Algoritmos Algoritmos Estructura Estructura Propiedades Propiedades Tipos Tipos Evaluación Evaluación

Más detalles

INTRODUCCIÓN A LA POO EN C++

INTRODUCCIÓN A LA POO EN C++ INTRODUCCIÓN A LA POO EN C++ ÍNDICE DEL TEMA 1.- Introducción 2.- Diferencias C/C++ 3.- Programación orientada a objetos 4.- Aspectos avanzados C++ 1 1. Introducción Lenguaje C Lenguaje de propósito general

Más detalles

Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART.

Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART. Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART. 1. Objetivo El objetivo de la siguiente práctica es el de implementar el software de control (driver) de

Más detalles

ANÁLISIS SEMÁNTICO LA TABLA DE SÍMBOLOS

ANÁLISIS SEMÁNTICO LA TABLA DE SÍMBOLOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Informática PRÀCTICA 3 Curs Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida.

Informática PRÀCTICA 3 Curs Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida. Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida. Objetivos de la práctica: - Mostrar la sintaxis de los diferentes tipos de datos presentes en C/C++.

Más detalles