Está en la página 1de 13

Sistemas Operativos I

2 de Ingeniera Informtica

Soluciones a los ejercicios propuestos


A continuacin se recogen las soluciones de algunos de los ejercicios propuestos m s significativos. Los ejercicios sin solucionar o han sido vistos en caso, o su solucin es mecnica. En cualquier caso, quien necesite ver si sus soluciones son correctas, no tengo inconveniente en revisarlas.

?? Temas 1 y 2: Introduccin a los sistemas operativos, y Procesos y hebras


1. Diga cuales de las siguientes operaciones pueden realizarse nicamente en modo supervisor, o modo kernel: a) Consultar la hora del sistema. Modo usuario y modo kernel b) Cambiar la fecha del sistema. Modo kernel c) Leer una pista/sector de un disco magntico. Modo kernel d) Generar una interrupcin software. Modo usuario y modo kernel e) Generar una interrupcin. Modo Kernel f) Modificar la direccin de un vector de la tabla de vectores de interrupcin. Kernel g) Deshabilitar las interrupciones. Modo kernel En el caso de un ordenador que se vaya a usar nicamente para un nico usuario, qu inters puede tener la existencia de los modos de funcionamiento supervisor/usuario? Los modos de funcionamiento en sistemas monousuario protegen al sistema operativo de errores en los programas de usuario. P. ej. si MS-DOS funcionara con dos modos de funcionamiento sera ms robusto frente a errores en los programas. 2. Cuestiones sobre procesos, y asignacin de CPU: a) Es necesario que lo ltimo que haga todo proceso antes de finalizar sea una llamada al sistema para finalizar. Sigue siendo esto cierto en sistemas monoprogramados? Siempre es necesario, pues debemos liberar los recursos utilizados y dejarlos bajo el control del SO (p. ej. memoria, PCB, etc.). Si no hacemos esto explcitamente mediante la llamada al sistema correspondiente (por ejemplo, exit), el enlazador la inserta por nosotros. b) Cuando el controlador de un dispositivo produce una interrupcin se produce necesariamente un cambio de contexto?, y cuando se produce una llamada al sistema?

1.

Segn la definicin vista en teora, utilizamos el trmino cambio de contexto para referirnos a un relevo en el proceso actual. Otros autores, utilizan "cambio de contexto" para referirse a un cambio del contexto de ejecucin, o de otra forma, lo que nosotros llamamos cambio de modo. Esta confusin terminolgica proviene del echo de que cuando pasamos de modo usuario a modo supervisor, debemos guardar el contexto de ejecucin de modo usuario para reponerlo al volver de nuevo a el. En concreto, cuando se produce una interrupcin o se realiza una llamada al sistema, debemos salvar el contexto de ejecucin si estamos en modo usuario, antes de pasar a modo kernel, pero no hay cambio de contexto segn nuestra definicin. Si se produce una interrupcin y estamos en modo kernel, tambin debemos salvar el modo de ejecucin antes de ejecutar el manejador de interrupciones. Dnde se guarda la informacin asociada al cambio de contexto de ejecucin? Lo veris en SOII c) Cuando un proceso se bloquea, deber encargarse l directamente de cambiar el valor de su estado en el descriptor de proceso? Sea un proceso que cambia de Ejecutndose a Bloqueado, puede este cambio provocar un cambio de estado en otros procesos? Si es as, en qu casos? Idem para el cambio de estado Bloqueado a Ejecutable.

d)

e) 4.

(*) Qu debera hacer el planificador a corto plazo cuando es invocado pero no hay ningn proceso en la cola de ejecutables? Inicialmente podramos pensar en incluir en el cdigo de planificador algunas lneas de cdigo que comprueben la existencia de procesos disponibles para ejecutarse y si no los hubiese podramos iniciar una espera ocupada o bien parar en procesador. El coste de ejecucin de este fragmento de cdigo es elevado por el nmero de veces que hay que realizarlo. Para optimizar la ejecucin, se encontr otra solucin ms elegante, no tocar el cdigo de planificador y evitar la situacin descrita en el enunciado previendo siempre un proceso preparado para ejecutarse. Por tanto este proceso no debe bloquearse nunca y debe tener la prioridad ms baja del sistema para no interferir con la planificacin del resto de los proceso. Afortunadamente, no tenemos que disear este proceso, que recibe el nombre genrico de proceso nulo, pues en la mayora de sistemas hay proceso de sistema que son utilizables para esta labor, por ejemplo el swapper en el caso de UNIX/Linux y la hebra Balance Set Manager en el caso de Windows 2000. Qu algoritmos de planificacin quedan descartados para ser utilizados en sistemas de tiempo compartido?

5.

6.

La representacin grfica del cociente [(tiempo_en_cola_ejecutables + tiempo_de_CPU) / tiempo_de_CPU ] frente a tiempo_de_CPU suele mostrar valores muy altos para rfagas muy cortas en casi todos los algoritmos de asignacin de CPU. Por qu? Para cada una de las llamadas al sistema siguientes, especificar y explicar si su procesamiento por el sistema operativo requiere la invocacin del planificador a corto plazo: a) Crear un proceso. b) Abortar un proceso, es decir, terminarlo forzosamente. c) Suspender o bloquear un proceso. d) Reanudar un proceso (inversa al caso anterior). e) Modificar la prioridad de un proceso. (*) Por qu no es el interprete de ordenes (shell) parte del propio sistema operativo ? El modelo cliente-servidor es muy utilizado en sistemas distribuidos. Puede utilizarse este modelo en sistemas de un nico computador?

7.

8. 9.

10. En los primeros ordenadores, cada byte de datos ledo o escrito, era manejado directamente por la CPU ( es decir, no exista DMA - Acceso Directo a Memoria). Qu implicaciones tena esta organizacin para la multiprogramacin? El DMA libera en gran medida a la CPU de controlar la transferencia de informacin de memoria a los dispositivos o de los dispositivos a memoria, por tanto se puede dedicar mayor tiempo a realizar trabajo til, lo que permite un mayor grado de multiprogramacin del sistema.

11. Considere un sistema operativo (p. ej. Solaris o Windows NT) que tiene implementados tanto procesos como hebras. a) Cul es la diferencia entre un proceso y una hebra en tal sistema? b) Cul es la ventaja de tener procesos y hebras en un sistema operativo? Simplemente repaso de teora. 12. Sea un sistema multiprogramado que utiliza el algoritmo Round-Robin. Sea S el tiempo que tarda el despachador en cada cambio de contexto. Cul debe ser el valor de quantum Q para que el porcentaje de uso de la CPU por los procesos de usuario sea del 80%? 13. Sea un sistema m ultiprogramado que utiliza el algoritmo Round-Robin. Sea S el tiempo que tarda el despachador en cada cambio de contexto, y N el nmero de procesos existente. Cul debe ser el valor de quantum Q para que se asegure que cada proceso ve la CPU al menos cada T segundos?

14. Tiene sentido mantener ordenada por prioridades la cola de procesos bloqueados? Si lo tuviera, en qu casos sera til hacerlo? Inicialmente, no tiene sentido la ordenacin de esta cola pues no puede asegurar que los eventos por los que esperan los procesos de diferente prioridad ocurran temporalmente ordenados en funcin de la prioridad de los mismos. Por ejemplo, un

proceso de baja prioridad espera una lectura de disco y uno de mayor prioridad espera una entrada de teclado. Si tendra sentido, para aquellos casos en que hay una cola de procesos bloqueados por posibles causas de bloqueo, de forma que todos los procesos de la cola esperan por lo mismo, por ejemplo, procesos bloqueados que espera por un bffer de memoria.

15. Puede el procesador manejar una interrupcin mientras esta ejecutando un proceso si la poltica de planificacin que utilizamos es no apropiativa? Las implementaciones tradicionales de SOs esconden las interrupciones, es decir, los procesos y gran parte de los mdulos del SO no conocen nada del estado de las interrupciones que es conocido slo por las capas ms bajas el SO. En especial el planificador no debe saber nada sobre las interrupciones. As cuando hablamos de sistema no apropiativo debemos entender que lo que se quiere decir es que no podemos invocar al planificador hasta que el proceso voluntariamente ceda el control de la CPU. Por tanto, aunque el sistema sea no apropiativo podemos atender interrupciones. Eso s, cuando la interrupcin sea atendida, debemos ceder el control de la CPU slo al proceso que lo tena antes de la ocurrencia de la interrupcin.

16. Suponga que es responsable de disear e implementar un sistema operativo que va a utilizar una poltica de planificacin apropiativa. Suponiendo que tenemos desarrollado el algoritmo de planificacin a tal efecto, qu otras partes del sistema operativo habra que modificar para implementar tal sistema? y cuales seran tales modificaciones? Evidentemente es un importante el mdulo que implementa el algoritmo de planificacin, pero no menos importante el mecanismo de activacin o disparo del mismo, es decir, cuando invoco al mdulo que realiza la planificacin. Una de las razones por las que apropiar a la tarea en curso es que haya finalizado su cuantum o que hay una tarea preparada (por ejemplo, finalizo una e/s pendiente) de mayor prioridad. En ambos casos, (fin de plazo o de e/s) la notificacin se conoce como resultado de una interrupcin y por tanto el lugar natural para invocar al planificador es desde el propio manejador de interrupciones, que debe modificarse para invocar al planificador.

17. Suponga que es el propietario de un kiosco de helados denominado Bola de Nieve. El kiosco es atendido por un solo dependiente. La persona que desea un helado se dirige al kiosco, solicita un nico helado que cuesta 3 Ptas., espera que lo despache, paga y se marcha. Cuando hay ms de un cliente, se forma una cola, que la experiencia nos dice que nunca esta compuesta por ms de tres personas (cuando alguien se acerca y ve ms de tres personas en la cola se marcha a un competidor prximo). Un estudio de mercado indica que en media se acercan al mostrador una persona por minuto. Supn que realizas una prueba para contratar un dependiente y se presentan dos candidatos presentados, Pepe y Juan. Tras la prueba,
4

descubres que Pepe atiende a un cliente en 20 segundos de media, mientras que Juan lo hace en 30 segundos, pero mientras que Pepe te pide un sueldo de 12 Ptas. hora Juan lo har por 6 Ptas. hora. Teniendo todos estos factores en cuenta, qu persona te trae ms cuenta contratar teniendo en cuenta que te interesa obtener los mejores beneficios? Comentado en clase.

18. Sean los cinco procesos descritos es la tabla siguiente Proceso A B C D E Tiempo de creacin 4 0 1 8 12 Tiempo de CPU 1 5 4 3 2

Si suponemos que tenemos un algoritmo de planificacin que utiliza una poltica: a) FIFO (Primero en llegar, primero en ser servido), Calcular: b) Tiempo medio de respuesta c) Tiempo medio de espera d) La penalizacin, es decir, el cociente entre el tiempo de finalizacin y el tiempo de CPU. 4. Utilizando los valores de la tabla del problema anterior, calcular los tiempos medios de espera y respuesta para los siguientes algoritmos: a) Round-robin con quantum q=1 b) Round-robin con quantum q=4 c) El ms corto primero (SJF) Calcular el tiempo de espera medio para los procesos de la tabla utilizando el algoritmo Primero el de tiempo restante menor (SRTF). Proceso A B C D E Tiempo de creacin 0 1 3 9 12 Tiempo de CPU 3 1 12 5 5

4.

21. Utilizando la tabla del ejercicio anterior, dibujar el diagrama Gantt para el caso de un sistema que utiliza un algoritmo de colas mltiples con realimentacin con las siguientes colas Cola Prioridad Quantum

1 2 3

1 2 3

4 2 1

y suponiendo que : (a) los procesos entran e n la cola de mayor prioridad (mayor valor numrico), y (b) un proceso en la cola i pasa a la cola i+1 si consumen un quantum completo. 21. Consideremos los procesos cuyo comportamiento se recoge en la tabla siguiente Proceso A B C D Tiempo Comportamiento creacin CPU Bloqueo CPU Bloqueo CPU Bloqueo 0 1 2 1 2 1 1 1 1 1 2 1 2 2 1 2 1 1 1 4 4 -

CPU 1 -

Dibujar el diagrama de ocupacin para los siguientes algoritmos: a) FIFO b) Round-robin, con q=1 c) Prioridades, suponiendo que las prioridades son 3 para A y B, 2 para C, y 1 para D. d) Primero el ms corto, suponiendo que la estimacin de cada rfaga coincide con la duracin de la rfaga anterior. 21. Suponga que debe maximizar la eficiencia de un sistema multiusuario y que est recibiendo quejas de muchos usuarios sobre los pobres tiempos de respuesta (o tiempos de vuelta) de sus procesos. Los resultados obtenidos con una herramienta de monitorizacin del sistema nos muestran que la CPU se utiliza al 99'9% de su tiempo y que los procesadores de E/S estn activos solo un 10% de su tiempo. Cuales pueden ser las razones de estos tiempos de respuesta pobres y por qu? a) el quantum en la planificacin Round-Robin es muy pequeo. b) la memoria principal es insuficiente. c) el sistema operativo tiene que manejar mucha memoria principal por lo que las rutinas de gestin de memoria estn consumiendo todos los ciclos de CPU. d) la CPU es muy lenta. e) el quantum en la planificacin Round-Robin es muy grande. Un cuantum pequeo genera sobrecarga pero no malos tiempos de respuesta. Si la memoria principal fuese insuficiente los procesadores de dispositivos estaran ms ocupados por ejemplo accediendo a disco si utilizamos intercambio o paginacin por demanda. La complejidad de la gestin de memoria no tiene que ver el tamao de la misma. Si la CPU fuese muy lenta, hubisemos obtenido un 100% de ocupacin. Por ltimo, un cuantum grande si nos da unos tiempo de respuesta malos y es compatible con los valores mostrados por la herramienta de vigilancia.

21. Cinco trabajos esperan para ejecutarse en un sistema de computacin. Sus tiempos de ejecucin esperados son 9,6,3,5 y X. En qu orden debern ejecutarse si se desea minimizar el tiempo medio de espera? (Su respuesta depender de X).

?? Tema 3: Sincronizacin y comunicacin entre procesos


1. Cuando ocurre el evento por el cual un proceso est bloqueado, se invoca a un procedimiento, que denominaremos Desbloquear, para colocar el proceso en la cola de planificacin correcta. Antes de realizar ninguna otra accin este procedimiento deshabilitar (desactivar) las interrupciones. Explique por qu. La cola de bloqueado es una seccin crtica que debemos proteger del acceso simultneo de los procesos (procesos que se bloquean) y los manejadores de interrupciones (desbloquean a procesos para los cuales a tenido lugar el evento que esperaban). El mecanismo que sincronizacin que utilizamos en este caso es deshabilitar/habilitar las interrupciones ya que uno de los flujos de control implicados son los manejadores de interrupciones. Para calcular el nmero combinatorio (n k) = n(n-1)(n-2)...(n-k+1)/k!, desarrollamos un programa con dos procesos. El proceso P1 calcula el numerador y deposita el resultado en una variable compartida, denominada x, mientras que P2 calcula el factorial y deposita el valor en la variable y. Sincronizar los procesos P1 y P2, utilizando semforos, para que el proceso P2 realice la divisin, es decir x/y. Declaracin-inicializacin de variables globales y semforos n, k, x=1, i=1: enteros s:=0 : semforos P1 P2 For i = n-k+1 to n do y:=1 Begin for j=2 to k do x:=x+i; begin end y:=y*j; signal (s) end wait(s) escribir (x/y); Nota: En los primeros problemas propuestos, vamos a dibujar una caja en la que aparece: (a) el recuadro superior contiene la declaracin-inicializacin de variables globales y semforos necesarias para el ejercicio, (b) dos o ms recuadros verticales que contiene fragmentos del cdigo de los procesos. Se deja al lector el completar tanto las declaraciones-inicializaciones necesarias as como el cdigo necesario para resolver el ejercicio.

2.

1.

Sean los procesos P1, P2 y P3, cuyas secuencias de instrucciones son las que se muestran en el cuadro. Sincronizar los procesos de forma que las secuencias b en P1, f en P2, y h en P3, sean ejecutadas como mucho por dos procesos simultneamente. Declaracin-inicializacin de variables y semforos S:= 2: semforo P1 P2 while true do while true do begin begin a d wait(s) wait(s) b e signal(s) signal(s) c f end end

P3 while true do begin g wait(s) h signal(s) i end

1.

Dos procesos P1 y P2 se pasan informacin a travs de una estructura de datos, ED. Sea un entero, n, que indica en todo momento el nmero de elementos tiles en ED y cuyo valor inicial es 0. El proceso P2 retira de ED en cada ejecucin el ltimo elemento depositado por P1, y espera si no hay elementos a que P 2 ponga ms. Supn que ED tiene un tamao ilimitado, es decir, es lo suficientemente grande para que nunca se llene. Declaracin-inicializacin de variablesy semforos ex:=1, algo:=0: semforos P1 P2 While true do while true do dato_calculado:= calcular_dato(); wait(algo); wait(ex) wait(ex); n:=n+1; dato:=DE[n]; DE[n]:=dato_calculado; n:=n-1 signal(ex); signal(ex); signal(algo) operar_dato(dato); end end

1.

El cuadro que sigue nos muestra dos procesos concurrentes que comparten una variable global x (las restantes variables son locales a los procesos) Declaracin-inicializacin de variables y semforos var x: entero s:=0, s1:=1:semforos P1 P2 While true do while true do begin begin wait(s); wait(s1); wait(s);/*apartado b*/ leer_teclado (d);

m:=2*x-n; signal(s1); signal(s1); /*apartado b*/ imprimir (m); End end

x:=d-c*5 signal(s);

a) Sincronizar los procesos para que P1 use todos los valores x suministrados por P2. b) Sincronizar los procesos para que P1 utilice un valor s y otro no de la variable x, es decir, utilice los valores primero, tercero, quinto, etc. 1. En la fbrica de bicicletas MountanenBike, tenemos tres operarios que denominaremos OP1, OP2 y OP3. OP1 monta ruedas, OP2 monta el cuadro de las bicicletas, y OP3, el manillar. Un cuarto operario, el Montador, se encarga de tomar dos ruedas, un cuadro y un manillar, y monta la bicicleta. Sincronizar las acciones de los tres operarios y el Montador en los siguientes casos: a) Los operarios no tienen ningn espacio para almacenar los componentes producidos, y el Montador no podr coger ninguna pieza si esta no ha sido fabricada previamente por el correspondiente operario. b) Los operarios OP2 y OP3 slo tienen espacio para almacenar 10 piezas de las que producen, por tanto, deben esperar si habiendo producido 10 piezas no es retirada ninguna por el Montador. El operador OP1 tiene espacio para 20 piezas. Declaracin-inicializacin de variablesy semforos espacio1:=20, espacio2:=10, espacio3:=10:semforos. /*apartado (b) */ R:=0,m:=0, f:= 0: semforos OP1 OP2 OP3 Montador while true do While true do while true do While true do begin begin begin Begin wait(r ); Coge_rueda(); signal(espacio1); wait(espacio1); wait(espacio2); wait(espacio3); wait(r ); Coge_rueda(); Hacer_rueda(); Hacer_cuadro(); hacer_manillar(); signal(espacio1); wait(m); signal(r); signal(m); signal(f); Coge_cuadro(); signal(espacio2); wait(f); Coge_manillar(); End End End signal(espacio3); Montar_bici(); End 1. Sentados en una mesa del Restaurante Atreveteacomer, estn dos personas, cada una de las cuales esta tomando un plato de sopa, y entre las dos comparten una fuente de ensalada.
9

Estas dos personas no tienen mucha confianza y no pueden comer las dos simultneamente del plato de ensalada. Se pide: a) Disear un programa que resuelva el problema. b) Ahora, supn que existe un camarero encargado de retirar los platos de sopa cuando estos estn vacos, es decir, cuando cada una de las personas ha tomado diez cucharadas. Solucionar esta variante teniendo en cuenta que el camarero debe cambiar los platos a las dos personas a la vez. Declaracin-inicializacin de variables y semforos Ex:=1, s, s1,s2:=0: semforos /* apartado b*/ Contador1,contador2:=0: enteros Comensal-1 Comensal-2 while true { while true { if contador1=10 then if contador2=10 then {signal(s); {signal(s); wait(s1); wait(s1); contador1:=0;} contador2:=0;} tomar_una_cucharada; tomar_una_cucharada; contador1=contador1+1 contador2=contador2+1 wait(ex); wait(ex); comer_ensalada(); comer_ensalada(); signal(ex); signal(ex); } } 1.

Camarero (Apartado b) while true { wait(s); wait(s); quitar_sopa(); poner_sopa(); signal (s); signal(s); }

(**) En clase, hemos visto el problema de sincronizacin conocido como los filsofoscomensales. La solucin comentada en clase reduce la concurrencia de la aplicacin. Disear una solucin mejor, de entre las propuestas en clase, para solucionar este problema. (**) En clase hemos enunciado el problema de los lectores-escritores, y hemos dado una solucin que favorece a los lectores frente a los escritores. De una solucin al problema que trate ms equitativamente a ambos tipos de procesos. Protocolo en seudocdigo
-- Escritor -Adquirir recurso para escritura: -- Lector -Declarse escritor activo. Adquirir recurso para lectura: Declararse Si no hay lectores ejecutndo-se, podemos lector activo. ser un escritor que escribe (cuando nos Si no hay escritores activos, toca). puede ser un lector que lee. Esperar por cerrojo escritura. LeerLiberar recurso tras lectura: Un lector Escribir activo menos. Liberar recurso tras escribir: Solucin: Si no hay lectores ejecutn-dose y hay Liberar cerrojo escritura. algn escritor -- Variables -- esperando, despertarlo. Un escritor activo menos. Si para no hay mscuando escritoresun activos y R:semforo:=O cuenta solicitudes pendientess leer escritor espera algn lector, despertarlo.

2.

est escribiendo y los lectores bloqueados en R. W:semforo:=0 cuenta solicitudes pendientes para escribir cuando los lectores leen y los escritores estn bloqueados en W.

10

Wguarda:semforo:=1 asegura exclusin mutua para escritura. Cguarda: semforo:=1 asegura exclusin mutua a varios contadores que mantienen la pista de cuantos lectores y escritores estan activos. ar cuenta los lectores activos rr lectores activos que estan leyendo aw nmero de escritores activos ww escritores activos que han procedido a la fase de escritura. -- Cdigo
Lector wait(cguarda) ar:=ar+1 if ( aw == 0 ) { rr:=rr+1 signal(R) } signal(cguarda ) wait(R) leer wait(cguarda) rr:=rr-1 ar:=ar-1 if ( rr==0 ) { while ww<aw ww:=ww+1 signal(W) } signal(cguarda )
?

Escitor

wait(cguarda) aw:=aw +1 if ( rr==0 ) { ww :=ww+1 signal(W) } signal(cguarda) wait(W) wait(wguarda ) escribe signal(wguarda) wait(cguarda) ww :=ww -1 aw:=aw -1 if ( a w==0 ) { while rr <ar rr:=rr+1 signal(R) } signal(cguarda)

3. 4.

Esboce una solucin de como un sistema operativo puede implementar semforos con el mecanismo de habilitar/deshabilitar interrupciones. No es infrecuente encontrar un computador que utiliza tanto la instruccin TestAndSet como otra primitiva de sincronizacin, tal como los semforos. Estos dos tipos juegan dos papeles diferentes que no compiten entre s. Explicar por qu ocurre esto.

5.

(**) La vida real esta llena de problemas de sincronizacin. Uno de estos casos se da en las barberas. Suponga una barbera con un barbero, una silla para cortar el pelo y 4 sillas para que los clientes esperen sentados a que les toque su turno. Si no hay clientes, el barbero, que es bastante vago, duerme en su silla. Cuando llega un cliente debe despertar al barbero. Si llegan ms clientes mientras que el barbero esta pelando y hay sillas libres, se sientan y esperan su turno. Si no hay sillas libres se van. Programar una solucin para el Barbero y los Clientes que este libre de condiciones de carrera. Solucin: */ Variables y semforos */ sillas=n: var ; nmero de sillas para los clientes que esperan espera=0: var ; nmero de clientes en espera (nos permite conocer el valor del semforo clientes)

11

clientes=0: semforo; nmero de clientes barbero=0; semforos ; a 0 indica que el barbero esta ocupado, a 1 esta libre mutex=1. semforo; para exclusin mutua /* cdigo del barbero */ while (true) { wait(clientes); wait(mutex); espera= espera 1; signal(barbero); signal(mutex); cortar_pelo(); } /* cdigo de un cliente */ wait(mutex) if (espera < sillas) { espera=espera-1; signal(cliente); signal(mutex); wait(barbero); pelarse();} else signal(mutex); }}

6.

A partir de un mecanismo de semforos deseamos construir las rutinas enviar(buzon, mensaje) y recibir(buzon, mensaje) para implementar un mecanismo de paso de mensajes con buzones. Para ello, disponemos de una matriz BUZON de 10 elementos, cada elemento es una cadena de m caracteres, donde se almacenan los mensajes. Tenemos una variable compartida, n, que indica el nmero de mensajes que hay en cada momento en el buzn. Implementar: a) Un mecanismo de designacin indirecta sncrona. b) Idem del anterior, obligando al emisor a bloquearse hasta que un receptor tome el mensaje. Declaraciones-inicializaciones

Funcion enviar(buzon, mensaje) {

funcion recibr(buzon, mensaje) {

n:=n+1; mensaje:= buzon(n); buzon(n):= mensaje; n:=n-1; } }

Solucin idntica a la del problema productor-consumidor 1. Discute la viabilidad de utilizar la instruccin TestAndSet suministrada por el repertorio de instrucciones de un multiprocesador para obtener exclusin mutua en los siguientes casos:

12

a) Como mecanismo para ser utilizado en programas de usuario. b) En las rutinas de tratamiento de interrupcin como mtodo alternativo a deshabilitar/habilitar las interrupciones total o parcialmente. c) Para implementar las operaciones wait() y signal() de los semforos. 2. (*) Considere un ordenador que no posee la instruccin Test-and-Set, pero s tiene una instruccin Swap(a,b) que intercambia el contenido de dos palabras de memoria (a y b) en una sola accin individual. Mostrar cmo se puede utilizar esta instruccin para resolver el problema de la exclusin mutua, es decir, disear el protocolo de entrada y el protocolo de salida a la seccin crtica.
procedure var temp: begin temp a := b := end Swap (var a,b: boolean) boolean := a; b; temp

Silberschatz apartado 6.3 de la 4 edicin. 3. Utilizando la instruccin test_and_set , hemos desarrollado el siguiente fragmento de cdigo para resolver el problema de la seccin crtica: (inicialmente cerrojo = false)
repeat while TestAndSet(cerrojo) do no-op; SeccinCrtica; cerrojo:= false; RestoSeccin; until false;

Cul(es) de la(s) propiedad(es) que debe satisfacer una solucin de la seccin crticas no se satisface(n) con el cdigo anterior? Justifique la respuesta. 4. La exclusin mutua utilizando semforos se logra inicializando un semforo a 1 (llammoslo mutex), comenzando todas las secciones crticas con una operacin wait(mutex) y finalizando todas las secciones crticas con una operacin signal(mutex). Qu ocurre si un proceso que est dentro de una seccin crtica realiza una operacin wait(mutex) ? (*) En un sistema electrnico de transferencia de fondos, existen miles de procesos idnticos que funcionan como sigue. Cada proceso lee en una lnea la cantidad de dinero a transferir, el nmero de cuenta destinataria y el nmero de cuenta de origen de la transferencia. Entonces, bloquea las dos cuentas, transfiere el dinero, y libera las cuentas. Con muchos procesos as, existe un peligro real de interbloqueo (un proceso puede bloquear la cuenta x pero no puede bloquear la cuenta y porque otro proceso la tiene bloqueada y ese proceso esta directa o indirectamente esperando la cuenta x). Describa un esquema que evite el peligro de interbloqueo. No esta permitido desbloquear una cuenta una vez que se ha bloqueado hasta que la transaccin se complete.

5.

13