Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
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.