You are on page 1of 4
220 Sistemas operatives Si no se puede, se han propuesto varios esquemas. La esencia del problema es la exclusién mutua: S6lo un proceso puede manipular un seméforo a la vez, tanto con una operacién wait como con una signal. Asi pues, se puede usar cualquier esquema de software, como los algoritmos de Dekker 0 Peterson, lo que supone una sobrecarga de proceso sustancial. Otra alternativa es usar uno de los esquemas de soporte del hardware para la exclusién mutua. Por ejemplo, la Figura 5.17a muestra el uso de la instruccién Comparar y Fijar. En esta implementacién, el seméforo esta definido de nue- Yo como una estructura, como en Ja Figura 5.9, pero ahora incluye un nuevo componente entero, s.seftal. Aunque es verdad que esto implica un tipo de espera activa, las operaciones signal y wait son relativamente cortas, por lo que la cantidad de espera activa que se obtiene sera menor. En sistemas monoprocesador, se puede inhibir simplemente las interrupciones durante una ope- raci6n wait © signal, como se propone en la Figura 5.17b. De nuevo, la duracién relativamente corta de estas operaciones hace que esta solucién sea razonable. PROBLEMA DE LA BARBERIA Como otro ejemplo del uso de seméforos en la concurrent una barberfa*. Este ejemplo es instructivo porque los problemas cia, se considera el simple problema de encontrados cuando se intenta ofrecer un acceso a medida a los recursos de una barberfa son similares a los que se enguentran en un sistema operativo real La barberia tiene tres sill wait(s) while (TS(s.sefial)) ** no hacer nada */; s.contador: if (s.contador <0) { poner este proceso en s.cola; bloquear este proceso (debe poner s.sefial a 0); else s.sefial signal(s) while (TS(s.sefal)) no hacer nada */; s.contador+ +; ) if (s.contador < quitar un proceso P de s.cola; Poner P en cola de listos; s.sefial = 0; (a) Instruccién TS . tres barberos, una zona de espera en la que se pueden acomodar atro clientes en un sof y una sala de espera de pie para el resto de los clientes (Figura 5.18), wait(s) inhabiltar interrupciones; s.contador--; if (s.contador <0) poner este proceso en s.cola: bloquear este proceso y habilitar interrupciones; else habiltar interrupciones; signal(s) inhabilitar interrupciones; s.contador + +; if (s.contador < =0) quitar un proceso P de s.cola; Poner P en cola de listos; habilitar interrupciones; (b)_ Interrupciones Figura 5.17. Dos posibles implementaciones de los seméforos. oy en deuda con el profesor Ralph Hilzer de la Universidad Estatal de California en Chico por proporcionarme este probe Concurrencia: exclusién mutua y sincronizacién 221 Sillas de barbero L] Caja Entrada Sala de ‘espera de pie Salida Sofa Figura 5.18. La barberi La plo, medidas contra incendios limitan el nimero total de clientes en la tienda a 20. En este ejem- se supondré que la barberfa procesara 50 clientes. Un cliente no entraré en la tienda si su capacidad est al completo con otros clientes. Una vez dentro, el cliente toma asiento en el sofa o permanece de pie si el sofa esta Ileno. Cuando un barbe- ro estd libre, se atiende al cliente que ha estado més tiempo en el sofé y, si hay clientes de pie, el que ha entrado en la tienda hace més tiempo toma asiento. Cuando finaliza el corte de pelo de un cliente, cualquier barbero puede aceptar el pago, pero, debido a que slo hay una caja registradora, sGlo se acepta el pago de un cliente cada vez. Los barberos dividen su tiempo entre cortar el pelo, aceptar pagos y dormir en su silla esperando clientes. Una barberia no equitativa La Figura 5.19 muestra una implementacién en la que se emplean seméforos: se enumeran los tres procedimientos, uno junto a otro para ahorrar. espacio. Se supone que las colas de todos los semé- foros se gestionan con una politica FIFO. El cuerpo principal del programa activa 50 clientes, tres barberos y el proceso cajero. Considé- ese el propésito y la posicién de los distintos operadores de sineronizacién: Capacidad de la tienda y del sofa: la capacidad de la tienda y la capacidad del sofa estin gobernadas por los seméforos max_capacidad y sofa, respectivamente. Cada vez que un cliente intenta entrar en la tienda, disminuye en uno el semaforo max_capacidad; cada vez que un cliente sale, se incrementa el seméforo. Si un cliente encuentra la tienda Ilena, el pro- ceso de ese cliente se suspende en max_capacidad a través de la funcién wait. Del mismo modo, las operaciones wait y signal rodean a las acciones de sentarse y levantarse del sofa. ¢ Capacidad de las sillas de barbero: hay tres sillas de barbero y se debe tener cuidado de usarlas adecuadamente. El seméforo silla_barbero asegura que no mas de tres clientes inten- tan ser atendidos al mismo tiempo, tratando de evitar la indecorosa situacién de un cliente sentado en las rodillas de otro. Un cliente no se levantara del sofa hasta que esté libre al menos una silla [wait(silla_barbero)| y cada barbero indicaré cuando un cliente deja una “eaneunbe evequeq eun “92's eanbiy *Yorsfeo‘orequed'cvaqied’o1equeg’ejusy9™'sooen 0¢™aiualio)ulBequed ‘0 = s0pejuoo (urew pron ‘(pepioedeo™xew)jeubis . sQepuan ayes Y(oquoes}iem ‘(0Bed)jeubis ‘QueBed (qeIssefep)yeubs \(Joxequeq” eis esie|uena| ({e1uey}ownujopeuuuey)em (ginwxe)jeubis HoIsI| eluayjo)/eUBIS (e1ueyowinu) je}00~sou0d ‘ s(zinuxe)rem (o1eqieq~enis)/eubis ‘Qo1eqreq” eis" esieiuas (q” es sefop)em ‘(ej05)reubis +((q~ @que!|9Jopeurue))jeuBis :Qejos” esse]Uengy ‘(p1009}feubis + (o1oqieq”ejis)yem ( :QojedseU09 :0B}08~esueques Mp1o09)irem ‘(ejos}em (oq1901)reu6)s ‘(zinwxe)reubis ‘(1inuixe)jeub)s '(p1000)jeuBis Mq" equa) 12j09-Je0es uopewwos = ejuayjownu {QoBed~1edeoe “(einusxa)irem E+ +s0peuco (paooo)iem {018i etuoyo)em, (uinwxe)rem NoBed)yem. } ‘Qepuen”senue } (ou810) onum (pepjoedes”xew)em (ousi9) any 'qetuoyo yu ‘ejueHiounu yup } i b (lorefeo pion (oseqed pion (aiusii pion uopeiuco yu ‘lo) = [oslopeuue; oxoyewas: {0=0q1981' = oBed'9 ~ ges sefep'o = o9s1/-a]USI9 OuOJeUIOS ’ 'L-=zinuxe" | = [ynuxe orojewes {= p000'p = o1oqueg Els o1ojeWIES op = BIOs ores. 02 = pepioedeo”xew o1ojewies J, Zeuaqieq wesBoud or2iduto9 gisa ojad ap a1109 ns anbune omuatse ns xeuopuege apiduny af a8 ox10 v anb Serustul “Teoued ofad ap ayo un sod wrajdwoo eyLin v] seid v opedtygo £ onaise ns 2p aluouean, jhuyeP opesindxo so amayjo un anb yj ua uoIoenns un v asseBaH{ vLIpod “eILIS v] a aIuars os anh bard aiuol]9 un @ oq aS IS goat atuNaseg So SoMtArTD So] ap oun o pide! Amu Sa sozaqiba sof ap Trae aime anb? foBzequra mg “esaqneg ap seIHS se] Ua oHUAS as anb Ue Wepuo [a Ua sopeaeal, WEBS 109 PI OP UoLoezIUPaIO e| v opiqeD ‘K (opmunUca})siom ua SopeanboqG UeRASe sMot>}GvaOd Guo [et Hal “oFoarE op SeIES son se] ua sopemas somuor}a san Avy anb aseuodng “saiuoH}9 so} E Sanmunbo ou oyna un seU!8}10 apand anb GI's wINBLY YI Ud UpIoeeuOdwial ap utoqqosd un AH “GI's PuIa|qorg sp 2a) ZoHAL 1 Bred sot>tox9F9 Owoo uepanb sono so] topexrede ap masa1 anb of ua aayaniou 26 S01 %P ot) saatosar tod seuto}gord soundye urpanb une osad “eamtauar puang wun so 61° vant Uy eanevnbs evequeq eun sonneiedo sewarsig vez Concurrencia: exclusion mutua y sincronizacion 225 El problema se resuelve con mas seméforos, como se muestra en la Figura 5.20. Se asigna un niimero tinico de cliente a cada uno; esto equivale a hacer que cada cliente tome un nimero al entrar a la tienda. El seméforo exmutl protege el acceso a la variable global contador, de forma que cada cliente reciba un nico niimero. Se vuelve a definir el seméforo terminado para que sea un vector de 50 seméforos. Una vez que el cliente esta sentado en una silla de barbero, ejecuta “ wait(terminado|numcliente}) para esperar en su propio semaforo; cuando el barbero termina con este cliente, ejecuta signal(terminado|eliente_b}) para liberar al cliente apropiado. Queda por especificar cémo los barberos conocen los niimeros de clientes. Un cliente pone su niimero en la cola! justo antes de avisar al barbero con el seméforo cliente_listo. Cuando un bar- bero esti listo para cortar el pelo, sacar_colal(cliente_b) retira el nimero mas alto de cliente de ta colal y lo pone en la variable local del barbero cliente_b 5.5. MONITORES Los seméforos son una herramienta basica, pero potente y flexible, para hacer cumplir la exclusién mutua y coordinar procesos. Sin embargo, como propone la Figura 5.12, puede resultar dificil { construir un programa correcto por medio de seméforos. La dificultad esta en que las operaciones wait y signal deben distribuirse por todo el programa y no es facil advertir el efecto global de estas operaciones sobre los seméforos a los que afectan. Los monitores son estructuras de un lenguaje de programacién que ofrecen una funcionalidad equivalente a la de los semaforos y que son més faciles de controlar, El concepto fue definido formalmente por primera vez en [HOAR74]. La estructura de monitor se ha implementado en v: rios lenguajes de programacién, incluido Pascal Concurrente, Pascal-Plus, Modula-2, Modula~ | | : | | | | y Java. También se han implementado como una biblioteca de programas. Esto permite poner blo- queos de monitor a objetos cualesquiera, En concreto, para algo parecido a una lista enlazada, se puede querer bloquear todas las listas enlazadas con un solo cierre o bien tener un cierre para cada elemento de cada lista. Se comenzara estudiando la versién de Hoare para después examinar una leve modificacién. MONITORES CON SENALES Un monitor es un médulo de software que consta de uno o més procedimientos, una secuencia de inicio y unos datos locales. Las caracterfsticas basicas de un monitor son las siguientes: 1. Las variables de datos locales estén sélo accesibles para los procedimientos del monitor y no para procedimientos externos 2. Un proceso entra en el monitor invocando a uno de sus procedimientos. 3. Sélo un proceso puede estar ejecutando en el monitor en un instante dado; cualquier otro proceso que haya invocado al monitor quedara suspendido mientras espera a que el moni- tor esté disponible. Las dos primeras caracteristicas recuerdan a las de los objetos del software orientado a objetos. En realidad, un sistema operativo 0 lenguaje de programacién orientado a objetos puede imple- mentar un monitor fécilmente como un objeto con caracteristicas especiales, Si se cumple la norma de un proceso cada vez, el monitor puede ofrecer un servicio de ex- clusién mutua facilmente. A las variables de datos del monitor sélo puede accerder un proceso cada vez. Asi pues, una estructura de datos compartida puede protegerse situéndola dentro de un

You might also like