20.04.2013 Views

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

12 de 22<br />

código <strong>en</strong> ese tiempo. Sin embargo esas v<strong>en</strong>tajas no son nada comparado con dos herrami<strong>en</strong>tas<br />

fundam<strong>en</strong>tales que nos ofrec<strong>en</strong> los SO: la coordinación y la sincronización, de ellas hoy vamos a ver solam<strong>en</strong>te<br />

una de ellas: la coordinación.<br />

La coordinación es un término <strong>en</strong> la programación para SO, que se basa <strong>en</strong> la protección de recursos<br />

compartidos, es un concepto ori<strong>en</strong>tado a evitar que difer<strong>en</strong>tes tareas puedan acceder a los datos o recursos y<br />

poner al sistema <strong>en</strong> un estado inestable o inseguro.<br />

Ejemplos que pon<strong>en</strong> de manifiesto el problema de la coordinación hay muchísimos pero <strong>en</strong> aras de mant<strong>en</strong>er el<br />

curso lo más s<strong>en</strong>cillo posible y adecuarlo un poco más a las aplicaciones que normalm<strong>en</strong>te se nos pres<strong>en</strong>tan yo<br />

utilizaré un problema más cercano a nuestro <strong>en</strong>torno.<br />

El problemas de la coordinación también se conoce como el problema de la concurr<strong>en</strong>cia o acceso concurr<strong>en</strong>te<br />

a recursos, a mi me gusta llamarlo “coordinación” para establecer una mejor difer<strong>en</strong>cia con respecto al otro<br />

mecanismo; el de la “sincronización” que veremos <strong>en</strong> la próxima <strong>en</strong>trega.<br />

Destripando un poco más a la coordinación diremos que: "la coordinación es el mecanismo que debe<br />

implem<strong>en</strong>tar un SO para asegurar el acceso seguro a recursos compartidos del sistema, y que no ti<strong>en</strong>e <strong>en</strong><br />

cu<strong>en</strong>ta restricciones temporales". Con esto queda claro que proteger a los recursos de un acceso no seguro es<br />

lo más importante <strong>en</strong> la coordinación, no importa durante que tiempo algui<strong>en</strong> (una tarea) esté utilizando el<br />

recurso, hasta que no lo libere nadie más podrá utilizarlo.<br />

Hay mecanismos de coordinación que implem<strong>en</strong>tan también el problema de la sincronización, que si ti<strong>en</strong>e <strong>en</strong><br />

cu<strong>en</strong>ta el factor tiempo, pero el RTOS de CCS no los implem<strong>en</strong>ta. Esto puede considerarse una limitante o una<br />

v<strong>en</strong>taja, según el tipo de aplicación <strong>en</strong> que se vaya a utilizar.<br />

Un RTOS que implem<strong>en</strong>ta un mecanismo de coordinación con sincronización es el LMOS de Darukur, que<br />

veremos d<strong>en</strong>tro de algún tiempo <strong>en</strong> <strong>este</strong> foro, debidam<strong>en</strong>te docum<strong>en</strong>tado gracias a un proyecto que Darukur y<br />

un servidor, llevaremos a ustedes. Por el mom<strong>en</strong>to <strong>este</strong> simple cursillo es un bu<strong>en</strong> método (no el único) para<br />

acercarse al mundo de los RTOS.<br />

Veamos la coordinación con un ejemplo s<strong>en</strong>cillo pero bi<strong>en</strong> claro:<br />

"Supongamos que una madre ha comprado una camisa muy bonita, ella quería comprar dos, pero <strong>en</strong> la ti<strong>en</strong>da<br />

solo había una así que decidió comprarla de todas formas. Cuando llegó a casa llama a sus hijos (ambos usan<br />

la misma talla de camisa), y les dice: “he comprado esta camisa, pero <strong>en</strong> la ti<strong>en</strong>da solam<strong>en</strong>te había una, así<br />

que deb<strong>en</strong> compartirla como bu<strong>en</strong>os hermanos”.<br />

Las palabras de la madre no son al<strong>en</strong>tadoras porque a ambos les gusta mucho la camisa y sin embargo deb<strong>en</strong><br />

compartirla, <strong>en</strong>tonces la decisión de ambos es colocar la camisa <strong>en</strong> una percha, y cada vez que uno de los dos<br />

decida utilizarla se la ponga (dejando el perchero vacío). Pero hay una regla adicional, si cuando uno de los dos<br />

va a utilizar la camisa el otro ya se la llevó dejará una marca para indicarle al otro hermano que no podrá<br />

utilizar la camisa hasta que el que la marcó haya hecho uso de ella."<br />

Este es un mecanismo <strong>en</strong> que los hermanos se han puesto de acuerdo para utilizar un recurso (la camisa), de<br />

manera compartida (porque es la única), de forma coordinada (para eso se pusieron de acuerdo e hicieron<br />

unas reglas simples).<br />

Para implem<strong>en</strong>tar las reglas mostradas <strong>en</strong> el ejemplo anterior, el RTOS de CCS ti<strong>en</strong>e dos funciones<br />

rtos_wait() y rtos_signal().<br />

Para utilizar estas funciones primero hay que crear una variable <strong>en</strong>tera que hará las funciones de percha y, que<br />

hablando con propiedad, se llama semáforo. El semáforo es el elem<strong>en</strong>to que le permite a la tarea reclamar el<br />

recurso compartido o esperar por él si ya está <strong>en</strong> uso. Las funciones rtos_wait() y rtos_signal() se utilizan<br />

para marcar el mom<strong>en</strong>to de inicio y fin del código que utiliza el recurso compartido. A la sección de código que<br />

utiliza el recurso compartido se le conoce como sección crítica.<br />

Veamos como funciona esto <strong>en</strong> términos de programación:<br />

Usted crea una variable <strong>en</strong>tera que será su semáforo o marcador de uso del recurso compartido.<br />

El recurso compartido puede ser una o varias variables del sistema, <strong>en</strong> <strong>este</strong> caso el recurso compartido es un<br />

recurso de memoria. O puede ser un periférico del sistema, como es el caso del puerto serie o la memoria<br />

EEPROM, o cualquier otro.<br />

rtos_wait() y rtos_signal() son los marcadores de inicio y fin del código que hace uso de nuestro recurso<br />

compartido.<br />

Cuando se inicia el programa usted inicializa el semáforo <strong>en</strong> algún valor positivo que determina la cantidad de<br />

tareas que pued<strong>en</strong> utilizar el recurso al mismo tiempo, normalm<strong>en</strong>te es uno para las tareas que modificarán el<br />

recurso compartido, mi<strong>en</strong>tras que para tareas que solam<strong>en</strong>te le<strong>en</strong> datos puede que no se us<strong>en</strong> secciones<br />

críticas o se permita más de una tarea que acceda simultáneam<strong>en</strong>te al recurso compartido.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!