Está en la página 1de 5

Problemas Resueltos del Capítulo 2

1.-En la figura 2-2 se muestran tres estados de procesos. En teoría, si


hay tres estados, podría haber seis transiciones, dos por cada estado.
No obstante solo se muestran cuatro transiciones. ¿Hay circunstancias
en las que podría darse alguna de las transiciones faltantes, o ambas?

Rpta: La transición de bloqueado en ejecución, es posible. Suponga que un


proceso está bloqueado en la Entrada/Salida y el E/S finaliza. Si el CPU está
inactivo el proceso podría ir directamente de bloqueado a en ejecución. La otra
transición faltante de Listo hacia Bloqueado es imposible. El proceso Listo no
puede hacer E/S o hacia cualquier otra cosa que pudiera bloquearlo. Solo un
proceso en ejecución puede bloquearlo.

3.- En todas las computadoras actuales, al menos una parte de los


manejadores de interrupciones se escribe en lenguaje ensamblador.
¿Por qué?

Rpta: Generalmente, los lenguajes de alto nivel no permiten un tipo de acceso


hacia el hardware que es requerido del CPU. Por Ejemplo un manejador de
interrupciones podría ser requerido para activar y desactivar la interrupción
sirviendo a un dispositivo particular, o para manipular datos sin la necesidad del
proceso de un área de la pila. Además, las rutinas del servicio de interrupciones
deben ser ejecutadas tan rápidamente como sea posible.

4.-Cuando una interrupción o una llamada al Sistema transfieren el


control al Sistema Operativo, por lo general se usa un área de la pila
del Kernel distinta de la pila del proceso interrumpido. ¿Por qué?

Rpta: Existen varias razones para usar una pila separada para el Kernel.

Dos de ellas son las siguientes:

- Primero: Para evitar que el Sistema Operativo colapse debido a un usuario


escribió mal un programa y no reservo suficiente espacio en la pila.
-Segundo: Si el kernel deja datos de la pila en el espacio libre de la memoria de un
programa de un usuario en el retorno desde una llamada del sistema, un usuario
malintencionado podría usar estos datos para hallar información acerca de los
otros procesos.

10.- ¿Un subproceso puede ser expropiado por una interrupción de


reloj? En tal caso, ¿en qué circunstancias? Si no puede ser expropiado,
explique la razón.

Rpta: A nivel de usuario los subprocesos no pueden ser adelantados por el reloj, a
menos que todo el proceso cuántico Se haya agotado.

A nivel del kernel los subprocesos pueden ser anulados por separado.

En este último caso, si un subproceso es demasiado largo, el reloj interrumpirá el


proceso actual y por lo tanto el subproceso actual. El kernel es libre de elegir un
diferente subproceso del mismo proceso para ejecutar el siguiente si así lo desea.

11.-En este problema se tiene que comparar la lectura de un archivo,


empleando un servidor de archivos de un solo subproceso y uno de
múltiples subprocesos. Se requieren 15 milisegundos para obtener
una determinada solicitud de trabajo, despacharla y realizar el demás
procesamiento necesario, suponiendo que los datos pedidos están en
la caché de bloques. Si se requiere una operación de disco, como
sucede la tercera parte del tiempo, se necesitaran 75 milisegundos
más, tiempo durante el cual el subproceso estará inactivo. ¿Cuántas
solicitudes puede manejar el servidor cada segundo si solo tiene un
subproceso? ¿Y si es de múltiples subprocesos?

Rpta: En el caso de un único subproceso, los accesos a la caché toman 15 mseg y


fallos de memoria caché toman 90 mseg. El promedio ponderado es de 2/3 × 15 +
1/3 × 90. Así, la Solicitud media tarda 40 milisegundos y el servidor puede hacer el
25 por segundo.
Para un Servidor multiproceso, toda la espera para el disco es superpuesta por lo
que cada solicitud tarda 15 ms, y el servidor puede manejar 66 2/3 solicitudes por
segundo.

16.- ¿Puede presentarse el problema de inversión de prioridad que


vimos en la sección 2.3.4 con subprocesos en el nivel de usuario? ¿Por
qué sí o por qué no?

Rpta: El problema de la inversión de prioridades ocurre cuando un subproceso de


baja prioridad se encuentra en una región crítica y repentinamente un proceso de
alta prioridad pasa a estar listo y es programado. Si se utiliza espera ocupada, se
ejecutará por siempre. Con los subprocesos del nivel de usuario, no puede suceder
que un subproceso de baja prioridad sea adelantado para permitir la ejecución de
un subproceso de alta prioridad. Con los subprocesos del nivel del kernel (núcleo
del S.O.) este problema también puede llegar a surgir.

18.- ¿Qué es una condición de competencia?

Rpta: Una condición de competencia es una situación en la que dos o más


procesos están a punto de realizar alguna acción. Dependiendo del ritmo
establecido, uno o el otro ira primero. Si uno de los procesos va primero según el
ritmo, todo funcionara bien, pero si el otro va primero, un fatal error ocurrirá.

23.-Bosqueje la forma en que un sistema operativo capaz de


inhabilitar interrupciones podría implementar semáforos.

Rpta: Para hacer una operación de Semáforo, el SO primero desactiva las


interrupciones, luego leerá el valor del semáforo. Si hace una Down (bajada) y el
semáforo es igual a cero, el SO pondrá el proceso de llamada en una lista de
procesos bloqueados que estén asociados con el semáforo. Si hace un Up (subida),
el SO deberá revisar si hay algún proceso que se haya bloqueado en el semáforo, si
uno o más procesos están bloqueados uno de ellos será removido de la lista de
procesos bloqueados y se hace ejecutable. Cuando aquellas operaciones se hayan
completado, las interrupciones serán activadas de nuevo.

24.-Muestre como deben implementarse semáforos contadores (que


pueden contener un valor arbitrario), empleando sólo semáforos
binarios e instrucciones de máquinas ordinarias.

Rpta: Asociado con cada semáforo de cuenta hay dos semáforos binarios, M,
utilizado para la exclusión mutua, y B, que se utiliza para el bloqueo. Además
asociado con cada semáforo de cuenta existe contador que mantiene el número de
UPS menos el número de DOWNS, y una lista de procesos bloqueados en el
semáforo.

Para implementar un DOWN, un proceso primero debe ganar acceso exclusivo


hacia los semáforos, contadores, y una lista haciéndole un DOWN en M, A
continuación se disminuye el contador. Si es cero o más, solo hará un UP en M y
Finaliza. Si M es negativo, el proceso será puesto en la lista de procesos
bloqueados. A continuación, un UP se realiza en M y un DOWN se realiza en B para
bloquear el proceso. Para implementar un UP, primero M es degradado para tener
una exclusión mutua, en ese momento el contador es incrementado. Si es mayor
que cero entonces nadie fue bloqueado. Entonces todo lo que necesitamos hacer
es un UP en M. Entonces, sin embargo, el contador ahora es negativo o cero,
entonces algún proceso debe ser removido de la lista. Finalmente, Se hace un UP
en B y M en ese orden.

25.-Si un sistema solo tiene dos procesos, ¿tiene sentido usar una
barrera para sincronizarlos? ¿Por qué sí o por qué no?
Rpta: Si el programa opera en faces y ningún proceso puede entrar a la siguiente
fase hasta que ambos hayan finalizado la actual fase, sería ideal utilizar una
barrera.

26.- En la sección 2.3.4 describimos una situación con un proceso de


alta prioridad, A, y uno de baja prioridad, B, en la que A entraba en un
ciclo infinito. ¿Se presenta el mismo problema si se usa
calendarización de por turno circular en vez de por prioridad?
Explique.

Rpta: Con una programación de ronda de turnos funciona. Antes o después de L se


ejecutara, y eventualmente dejara la región crítica. El punto es que con la
programación de prioridad, L nunca se llagara a ejecutar; con una ronda de turnos,
obtiene un intervalo de tiempo normal, entonces tendría la ocasión para dejar la
región crítica.

27.- ¿Pueden sincronizarse dos subprocesos del mismo proceso con un


semáforo de kernel si dicho kernel implementa los subprocesos? ¿Y si
se implementan en espacio de usuario? Suponga que ningún
subproceso de otro proceso tiene acceso al semáforo. Explique sus
respuestas.

Rpta: Con los subprocesos del kernel, un subprocesos puede ser bloqueado en un
semáforo y el kernel puede ejecutar algún otro subproceso en el mismo proceso.
Consecuentemente, no hay problema en el uso de semáforos. Con subprocesos de
nivel de usuario, cuando un subprocesos se bloquea en un semáforo, el kernel cree
que el proceso entero está bloqueado y entonces no lo vuelve a ejecutar otra vez.
Consecuentemente, el proceso falla.

28.- La sincronización dentro de monitores se vale de variables de


condición y dos operaciones especiales, wait y signal. Una forma más
general de sincronización tendría una sola primitiva, waituntil con un
predicado booleano arbitrario como parámetro. Así, se podría escribir,
por ejemplo,

Waituntil x < 0 or y+z < n

La primitiva signal ya no será necesaria. Es obvio que este esquema


es más general que el de Hoare o Brinch Hansen, pero no se usa. ¿Por
qué no? Sugerencia: Piense en la implementación

Rpta: Es muy costoso de implementar. Cada vez que cualquier variable que
aparece en un predicado sobre la que algún proceso está esperando cambios, el
sistema de ejecución debe volver a evaluar el predicado para ver si el proceso se
puede desbloquear. Con el Hoare and Brinch Hansen Monitors, los procesos sólo
puede ser despertado por una señal primitiva.
29.- Un restaurante de comida rápida tiene cuatro clase de empleados: 1)
Tomadores de órdenes de los clientes; 2) Cocineros, preparan la comida; 3)
Especialistas en envasado, que meten la comida en bolsas, y 4) Cajeros, que
entregan las bolsas a los clientes y les cobran. Cada empleado puede verse
como un proceso secuencial comunicante. ¿Qué forma de comunicación entre
procesos usan? Relacione este modelo con los procesos de UNIX

Rpta: Los empleados se comunican mediante paso de mensajes: órdenes,


alimentos y bolsas en este caso. En términos de UNIX, los cuatro procesos están
conectados por tuberías.

También podría gustarte