Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semaforizacion
Semaforizacion
CONCEPTOS BASICOS
Un semáforo es una estructura diseñada para sincronizar dos o más threads o procesos,
de modo que su ejecución se realice de forma ordenada y sin conflictos entre ellos.
El por qué no se pueden usar directamente otras estructuras mas clásicas, como por
ejemplo usar una variable común para decidir si se puede o no acceder a un recurso, se
debe a que estamos en un sistema multitarea: hacer esto implicaría realizar una espera
activa (un bucle, comprobando constantemente si la variable está o no a 0, y así saber si
podemos seguir ejecutando o no). Por otro lado, puede ocurrir algo mucho peor:
supongamos que un proceso comprueba la variable, y ve que el recurso está libre, por lo
que procedería a cambiar dicha variable de valor y seguir. Pues bien, si justo después de
la comprobacion pero antes de que cambie el valor se conmuta de tarea (puede pasar,
pues el sistema operativo puede hacerlo en cualquier momento), y el nuevo proceso
comprueba la variable, como todavía no se ha actualizado, creerá que el recurso está
libre, e intentará tomarlo, haciendo que ambos programas fallen. Lo peor del caso es
que se tratará de un error aleatorio: unas veces fallará (cuando se produzca cambio de
tarea en ese punto) y otras no.
Para evitarlo, se idearon los semáforos. Un semáforo básico es una estructura formada
por una posición de memoria y dos instrucciones, una para reservarlo y otra para
liberarlo. A esto se le puede añadir una cola de threads para recordar el orden en que se
hicieron las peticiones.
A continuación, cada vez que un thread o un proceso quiera acceder a dicho recurso (por
ejemplo, un fichero), hará primero una petición con la primera de las llamadas
disponibles. Cuando el S.O. ejecuta esa llamada, comprueba el valor que hay en la
posición de memoria del semáforo, y si es distinta de cero, se limita a restarle 1 y
devolver el control al programa; sin embargo, si ya es cero, duerme al proceso que hizo
la petición y lo mete en la cola de procesos, en espera de que el semáforo se ponga a un
valor distinto de cero.
Por último, cuando el proceso ha terminado el acceso al recurso, usa la segunda llamada
para liberar el semáforo. Cuando el S.O. la ejecuta, comprueba si la cola del semáforo
está vacia, en cuyo caso se limita a incrementar el valor del semáforo, mientras que si
tiene algún proceso, lo despierta, de modo que vuelve a recibir ciclos de CPU y sigue su
ejecución. Si había varios procesos en espera, se irán poniendo en marcha uno tras otro
a medida que el anterior va liberando el semáforo. Cuando termina el último, el
semáforo se vuelve a poner a 1. Se trata, por tanto, del mismo proceso que seguiríamos
con la variable, pero con la ventaja de que es un mecanismo estandar para todos los
procesos, y como es una operacion atómica (esto es, que durante su ejecución no se
admiten cambios de tarea), no surje el problema de que una conmutación pueda
producir errores aleatorios.
Vemos que la primera vez que un proceso usa el semáforo, este tiene valor 1, por lo que
pasa a cero y el proceso puede acceder al recurso. Si durante ese tiempo otro proceso
quiere acceder también, al usar el semáforo, este tiene valor cero, por lo que el S.O. deja
de darle ciclos de CPU. Cuando el primer proceso ha terminado, libera el recurso, con lo
que el S.O. puede comprobar que el segundo proceso está esperando, por lo que le
vuelve a dar ciclos. En este punto, el proceso sigue como si nunca hubiese sido
detenido. Este tipo de semáforos son los de Exclusión mútua, o Mutex.
Otra utilización de los semáforos es cuando uno o más procesos tienen que esperar a
que otro halla terminado una tarea. Para ello, el primer proceso borra el semáforo y
con una primitiva adecuada se pone a esperar a que el semáforo se active (posted).
Mientras, el segundo proceso va trabajando, y cuando termina lo que tiene que hacer,
activa el semáforo, con lo que el primer proceso vuelve a ponerse en marcha, sin haber
desperdiciado ciclos de CPU. Son semáforos evento. Vemos que puede haber varios
procesos esperando por el mismo semáforo, y el thread que lo activa no tiene por qué
saber cuantos son. Cobran su importáncia cuando el evento no es producido por otro
thread, sino por otras funciones del S.O., como las de sincronización, que veremos más
adelante.
Los semáforos se usarán para desempeñar, entre otras, las siguientes funciones:
El Manual de Dispositivos de control del tránsito automotor para calles y carreteras del
MTC tiene la información básica para semaforizar de una manera correcta una
intersección. Muchas de las intersecciones semaforizadas en Lima y otras ciudades del
país no cumplen lo que indica el Manual. Por ejemplo, el colocar por lo menos dos caras
por cada acceso de la intersección, ya ayudaría bastante en cuanto a la visibilidad de
estos elementos por parte de los conductores. Se aprecia que en la mayoría de las
ciudades del país, las intersecciones semaforizadas apenas tienen un semáforo (cara) por
cada acceso o calle que llega a la intersección.
Cada acceso a una intersección semaforizada debe contar por lo menos con dos
semáforos para una adecuada visibilidad.
En primer, lugar, se debe realizar una breve auditoría o informes técnicos de las
intersecciones actualmente semaforizadas en las ciudades, para verificar que cumplan lo
estipulado en el Manual del MTC. Con este primer paso, y su consecuente subsanación,
ya se daría un gran avance en cuanto a la seguridad vial y la mejora de la circulación
vehicular en las urbes.
Por otra parte, se deberá cambiar los controladores semafóricos muy antiguos para que
puedan soportar varias fases en los ciclos de los semáforos, que permitan una
circulación de los vehículos más fluida al atravesar la intersección.
En las zonas centrales de las ciudades y en aquellos ejes viales importantes, se deben
instalar sensores de tráfico que permitan identificar las fluctuaciones en la demandas de
tráfico a lo largo del día e ir ajustando los tiempos de los semáforos.
Por último en las ciudades de porte medio implementar centrales de control de tráfico.
Además, estos contadores de cuenta regresiva, muchas veces no permiten que los
sensores de tráfico de las intersecciones cumplan sus funciones a cabalidad.
También es muy importante verificar que las intersecciones tengan un adecuado diseño
geométrico como radios de giro, rampas para peatones, carriles de volteo a la izquierda
o derecha. También es importante que no se permita elementos de publicidad que
limiten la visibilidad de conductores y peatones en las intersecciones.
Por último, es, indispensable que las autoridades locales cumplan con su obligación
normativa de controlar y fiscalizar la circulación de vehículos y peatones de manera que
se cumplan las normas de tránsito. Amén de realizar permanentemente campañas de
educación vial.
Semáforos sincronizados
Una de las primeras intersecciones de Lima y del país, en que se emplearon métodos de
ingeniería de tránsito de manera adecuada es la intersección de la Av. 28 de julio con la
Av. Reducto, en Miraflores, hace más de 10 años. En esta intersección se construyeron
carriles de volteo a la izquierda y se programó los ciclos de los semáforos para que
permita este giro a la izquierda de manera simultánea. Fue la primera intersección con
este modo de circulación en intersecciones.
En el Perú, por lo general los ciclos semafóricos sólo cuentan con dos fases, cuando se
podrían implementar 3 o más fases, de manera de desbloquear los atracos y nudos de
tráfico que se producen en las intersecciones cuando se voltea a la izquierda.
CONCEPTOS BÁSICOS PARA EL DISEÑO E IMPLEMENTACIÓN DE UN
SISTEMA DE SEMAFORIZACIÓN
Los controles semaforizados son usados desde hace más de 80 años. Su principal
objetivo de uso es la seguridad, evitando los accidentes y alternando los derechos de
cruzar en una intersección, tanto vehicular como peatonal. Su uso genera
necesariamente la presencia de filas y tiempos de espera. El buen diseño debe buscar
que estos dos factores sean menores.
En 1914 apareció el primer equipo mecánico para facilitar el trabajo del policía de
tráfico. Este equipo contaba con brazos mecánicos accionados por el mismo agente.
Luego surge un sistema de control de tráfico regulado por computadores que tiene como
meta la conformación de corredores de tráfico coordinados, en sí, un centro de control
de tráfico
CONCLUCIONES