semáforos

11
Semáforos Editar 5 2 Semáforo Es una variable numérica entera de tipo protegida (sólo la maneja el sistema operativo), que se manipula a través de operaciones atómicas bien definidas. Los semáforos se emplean para permitir el acceso a diferentes partes de programas (llamados secciones críticas ) donde se manipulan variables o recursos que deben ser accedidos de forma especial. Según el valor con que son inicializados se permiten a más o menos procesos utilizar el recurso de forma simultánea. Caracteristicas Sólo pueden tomar valores numéricos. Reside en el Kernell del sistema operativo. Son funciones atómicas no interrumpidas. Son funciones ya diseñadas. Un semáforo positivo representa un número de recursos disponibles. Un semáforo negativo representa a los procesos en espera. Debe ser binario (0,1) e inicializarse en 1. Tipos Binarios: Toma solamente los valores 0 ó 1. Contadores: su contenido puede ser mayor de 1. Operaciones Básicas WAIT Pregunta a los procesos si su contador es > ó = que cero, en caso de no ser así, los decrementa. El proceso que cambia en este caso a negativo (−1) desde la cola de procesos Listos a ser ejecutados es el que automáticamente toma el control del procesador. WAIT = DOWN = P(S): while S < = 0 do; S:=S-1 SIGNAL A partir de un tiempo t definido por el despachador se ejecuta, y pregunta a los procesos si su contador es < que cero en caso de que sea afirmativa la respuesta, saca a este proceso de su ejecución y depende de su estado. SIGNAL = UP = V(S): S:=S+1 Uso del semáforo para el manejo de secciones criticas Procedure proceso_dos; begin

Upload: karen-giannella-apaza

Post on 24-Sep-2015

214 views

Category:

Documents


1 download

DESCRIPTION

SO - semaforos

TRANSCRIPT

SemforosEditar52SemforoEs una variable numrica entera de tipo protegida (slo la maneja el sistema operativo), que se manipula a travs de operaciones atmicas bien definidas.Los semforos se emplean para permitir el acceso a diferentes partes de programas (llamadossecciones crticas) donde se manipulan variables o recursos que deben ser accedidos de forma especial. Segn el valor con que son inicializados se permiten a ms o menos procesos utilizar el recurso de forma simultnea.

Caracteristicas Slo pueden tomar valores numricos. Reside en el Kernell del sistema operativo. Son funciones atmicas no interrumpidas. Son funciones ya diseadas. Un semforo positivo representa un nmero de recursos disponibles. Un semforo negativo representa a los procesos en espera. Debe ser binario (0,1) e inicializarse en 1.Tipos Binarios: Toma solamente los valores 0 1. Contadores: su contenido puede ser mayor de 1.Operaciones Bsicas WAITPregunta a los procesos si su contador es > = que cero, en caso de no ser as, los decrementa. El proceso que cambia en este caso a negativo (1) desde la cola de procesos Listos a ser ejecutados es el que automticamente toma el control del procesador.WAIT = DOWN = P(S): while S < = 0 do;S:=S-1 SIGNALA partir de un tiempo t definido por el despachador se ejecuta, y pregunta a los procesos si su contador es < que cero en caso de que sea afirmativa la respuesta, saca a este proceso de su ejecucin y depende de su estado.SIGNAL = UP = V(S): S:=S+1Uso del semforo para el manejo de secciones criticasProcedure proceso_dos;beginwhile Ejecucion dobeginActividades_preliminares_dos;P(Activo);Seccion_critica_dos;V(Activo);otras_actividades_dos;endend;BEGINIniciaSemaforo(Activo,1);COBEGINProceso_uno;Proceso_dos;COENDEND.

Problema del Barbero Dormiln En una barbera se atienden n-clientes y se tienen los siguientes recursos: espejo, tijeras y clientes. Cada cliente puede ser atendido por cualquiera de los barberos que existen, siempre y cuando est sentado; o est en la cola cuya capacidad es siete (7) Si la silla est vaca; el barbero duerme Si la silla est llena, el barbero trabajaSolucin

Program Barbero_Dormilon;var barbero,cliente,critica:semaforoEsperando:IntegerEjecucion:Boolean;Procedure Barbero;beginwhile ejecucion dobeginP(clientes);P(critica);Esperando=Esperando-1;V(Barberos);V(critica);Cortar_el_pelo;endend;procedure cliente;beginP(critica);If esperando0) s = s-1; else wait();}La cual mantendr en espera activa al regido por el semforo si ste tiene un valor inferior o igual al nulo.V(Semforo s){ if(!procesos_bloqueados) s = s+1; else signal(); }Estas instrucciones pueden modificarse para evitar la espera activa, haciendo que la operacin P duerma al mismo proceso que la ejecuta si no puede decrementar el valor, mientras que la operacin V despierta a un proceso que no es quien la ejecuta. En un pseudolenguaje ms entendible, la operacin P suele denominarse "wait" o "espera" y la operacin V "signal" o "seal".El porqu de los nombres de estas funciones, V y P, tiene su origen en el idiomaholands. "Verhogen" significa incrementar y "Proberen" probar, aunque Dijkstra us la palabra inventadaprolaag[1], que es una combinacin deprobeer te verlagen(intentar decrementar). El valor del semforo es el nmero deunidadesdel recurso que estn disponibles (si slo hay un recurso, se utiliza un "semforobinario" cuyo valor inicial es 1).La verificacin y modificacin del valor, as como la posibilidad de irse a dormir (bloquerse) se realiza en conjunto, como una sola e indivisibleaccin atmica. Elsistema operativogarantiza que al iniciar una operacin con un semforo, ningn otro proceso puede tener acceso al semforo hasta que la operacin termine o se bloquee. Esta atomicidad es absolutamente esencial para resolver los problemas de sincronizacin y evitar condiciones de competencia.Si hay n recursos, se inicializar el semforo al nmero n. As, cada proceso, al ir solicitando un recurso, verificar que el valor del semforo sea mayor de 0; si es as es que existen recursoslibres, seguidamente acaparar el recurso y decrementar el valor del semforo.Cuando el semforo alcance el valor 0, significar quetodos losrecursos estn siendo utilizados, y los procesos que quieran solicitar un recurso debern esperar a que el semforo sea positivo, esto es: alguno de los procesos que estn usando los recursos habr terminado con l e incrementar el semforo con un signal o V(s).

Iniciase utiliza para inicializar el semforo antes de que se hagan peticiones sobre l, y toma por argumento a un entero. La operacinPcuando no hay un recurso disponible, detiene la ejecucin quedando enespera activa(o durmiendo) hasta que el valor del semforo sea positivo, en cuyo caso lo reclama inmediatamente decrementndolo.Ves la operacin inversa: hace disponible un recurso despus de que el proceso ha terminado de usarlo. Las operacionesPyVhan de ser indivisibles (oatmicas), lo que quiere decir que cada una de las operaciones no debe ser interrumpida en medio de su ejecucin.La operacinVes denominada a vecessubirel semforo (up) y la operacinPse conoce tambin comobajarel semforo (down), y tambin son llamadassignalywaitosoltarytomar.Para evitar la espera activa, un semforo puede tener asociada unacolade procesos (normalmente una colaFIFO). Si un proceso efecta una operacinPen un semforo que tiene valor cero, el proceso es detenido y aadido a la cola del semforo. Cuando otro proceso incrementa el semforo mediante la operacinVy hay procesos en la cola asociada, se extrae uno de ellos (el primero que entr en una cola FIFO) y se reanuda su ejecucin.Usos[editareditar cdigo]Los semforos se emplean para permitir el acceso a diferentes partes de programas (llamadossecciones crticas) donde se manipulan variables o recursos que deben ser accedidos de forma especial. Segn el valor con que son inicializados se permiten a ms o menos procesos utilizar el recurso de forma simultnea.Un tipo simple de semforo es elbinario, que puede tomar solamente los valores 0 y 1. Se inicializan en 1 y son usados cuando slo un proceso puede acceder a un recurso a la vez. Son esencialmente lo mismo que losmutex. Cuando el recurso est disponible, un proceso accede y decrementa el valor del semforo con la operacin P. El valor queda entonces en 0, lo que hace que si otro proceso intenta decrementarlo tenga que esperar. Cuando el proceso que decrement el semforo realiza una operacinV, algn proceso que estaba esperando comienza a utilizar el recurso.Para hacer que dos procesos se ejecuten en una secuencia predeterminada puede usarse un semforo inicializado en 0. El proceso que debe ejecutar primero en la secuencia realiza la operacinVsobre el semforo antes del cdigo que debe ser ejecutado despus del otro proceso. ste ejecuta la operacinP. Si el segundo proceso en la secuencia es programado para ejecutar antes que el otro, al hacerPdormir hasta que el primer proceso de la secuencia pase por su operacinV. Este modo de uso se denomina sealacin (signaling), y se usa para que un proceso o hilo de ejecucin le haga saber a otro que algo ha sucedido.Ejemplo de uso[editareditar cdigo]Los semforos pueden ser usados para diferentes propsitos, entre ellos: Implementarcierres de exclusin mutuao locks Barreras Permitir a un mximo de N threads (hilos) acceder a un recurso, inicializando el semforo en N Notificacin. Inicializando el semforo en 0 puede usarse para comunicacin entre threads sobre la disponibilidad de un recursoEn el siguiente ejemplo se crean y ejecutan n procesos que intentarn entrar en su seccin crtica cada vez que puedan, y lo lograrn siempre de a uno por vez, gracias al uso del semforo s inicializado en 1. El mismo tiene la misma funcin que unlock. const int n /* nmero de procesos */ variable semaforo s; /* declaracin de la variable semforo de valor entero*/ Inicia (s,1) /* Inicializa un semforo de nombre s con valor 1 */ void P (int i) { while (cierto) { P(s) /* En semforos binarios, lo correcto es poner un P(s) antes de entrar en la seccin crtica, para restringir el uso de esta regin del cdigo*/

/* SECCIN CRTICA */

V(s) /* Tras la seccin crtica, volvemos a poner el semforo a 1 para que otro proceso pueda usarla */

/* RESTO DEL CDIGO */ } } int main() { Comenzar-procesos(P(1), P(2),...,P(n)); }

Problema de la cena de los filsofos(Redirigido desde El problema de los filsofos)

Ilustracin delproblemade los filsofos cenando.Elproblema de los filsofos cenandoes un problema clsico de lasciencias de la computacinpropuesto porEdsger Dijkstraen1965para representar el problema de la sincronizacin deprocesosen unsistema operativo. Cabe aclarar que la interpretacin est basada en pensadores chinos, quienes coman con dospalillos, donde es ms lgico que se necesite el del comensal que se siente al lado para poder comer.

ndice[ocultar] 1Enunciado del problema 2Algunas posibles soluciones 3Vase tambin 4Enlaces externosEnunciado del problema[editareditar cdigo]Cincofilsofosse sientan alrededor de una mesa y pasan su vida cenando y pensando. Cada filsofo tiene un plato de fideos y un tenedor a la izquierda de su plato. Para comer los fideos son necesarios dos tenedores y cada filsofo slo puede tomarlos queestn a su izquierda y derecha. Si cualquier filsofo toma un tenedor y el otro est ocupado, se quedar esperando, con el tenedor en la mano, hasta que pueda tomar el otro tenedor, para luego empezar a comer.Si dos filsofos adyacentes intentan tomar el mismo tenedor a una vez, se produce unacondicin de carrera: ambos compiten por tomar el mismo tenedor, y uno de ellos se queda sin comer.Sitodos losfilsofos toman el tenedor que est a su derecha al mismo tiempo, entonces todos se quedarn esperando eternamente, porque alguien debe liberar el tenedor que les falta. Nadie lo har porque todos se encuentran en la misma situacin (esperando que alguno deje sus tenedores). Entonces los filsofos se morirn de hambre. Este bloqueo mutuo se denomina interbloqueo odeadlock.El problema consiste en encontrar unalgoritmoque permita que los filsofos nunca se mueran de hambre.Algunas posibles soluciones[editareditar cdigo] Por turno cclicoSe empieza por un filsofo, que si quiere puede comer y despus pasa su turno al de la derecha. Cada filsofo slo puede comer en su turno. Problema: si el nmero de filsofos es muy alto, uno puede morir de hambre antes de su turno. Varios turnosSe establecen varios turnos. Para hacerlo ms claro supongamos que cada filsofo que puede comer (es su turno) tiene una ficha que despus pasa a la derecha. Si por ejemplo hay 7 comensales podemos poner 3 fichas en posiciones alternas (entre dosde las fichas quedaran dos filsofos).Se establecen turnos de tiempo fijo. Por ejemplo cada 5 minutos se pasan las fichas (y los turnos) a la derecha.En base al tiempo que suelen tardar los filsofos en comer y en volver a tener hambre, el tiempo de turno establecido puedehacer quesea peor solucin que la anterior. Si el tiempo de turno se aproxima al tiempo medio que tarda un filsofo en comer esta variante da muy buenos resultados. Si adems el tiempo medio de comer es similar al tiempo medio en volver a tener hambre la solucin se aproxima al ptimo. Colas de tenedoresCuando un filsofo quiere comer se pone en la cola de los dos tenedores que necesita. Cuando un tenedor est libre lo toma. Cuando toma los dos tenedores, come y deja libre los tenedores.Visto desde el otro lado, cada tenedor slo puede tener dos filsofos en cola, siempre los mismos.Esto crea el problema comentado de que si todos quieren comer a la vez y todos empiezan tomando el tenedor de su derecha se bloquea el sistema (deadlock). Resolucin de conflictos en colas de tenedoresCada vez que un filsofo tiene un tenedor espera un tiempoaleatoriopara conseguir el segundo tenedor. Si en ese tiempo no queda libre el segundo tenedor, suelta el que tiene y vuelve a ponerseen colapara sus dos tenedores.Si un filsofo A suelta un tenedor (porque ha comido o porque ha esperado demasiado tiempo con el tenedor en la mano) pero todava desea comer, vuelve a ponerseen colapara ese tenedor. Si el filsofo adyacente B est ya en esa cola de tenedor (tiene hambre) lo toma y si no vuelve a cogerlo A.Es importante que el tiempo de espera sea aleatorio o se mantendr el bloqueo del sistema. El portero del comedorSe indica a los filsofos que abandonen la mesa cuando no tengan hambre y que no regresen a ella hasta que vuelvan a estar hambrientos (cada filsofo siempre se sienta en la misma silla). La misin del portero es controlar el nmero de filsofos en la sala, limitando su nmero a n-1, pues si hay n-1 comensales seguro que al menos uno puede comer con los dos tenedores.