Preguntas Teoricas.
Preguntas Teoricas.
Diciembre de 2009
O eso intentaré…
Preguntas y Respuestas Teóricas de Exámenes de Sistemas operativos. Hasta Diciembre 2009
Índice
1995 – FEBRERO ...................................................... 3 2004 – FEBRERO ....................................................51
1995 – Febrero
Se desea construir un sistema operativo multiusuario “robusto”, tal que garantice que no sean
posibles interferencias indeseadas entre los diferentes usuarios.
1) Describir que elementos de seguridad será imprescindible considerar tanto en la arquitectura del
procesador, la memoria y la E/S, como en el diseño del sistema operativo.
Operación en modo dual: Se requiere protección para cualquier recurso compartido. Para ello el
hardware debe distinguir como mínimo entre dos modos de ejecución modo de usuario y modo
privilegiado. Se le agrega al hardware del computador un BIT, llamado BIT de modo para indicar en que
modo se está usando. Hay algunas intrucciones que podrían causar daño, y por ello solo se pueden
usar en modo privilegiado. Si se intenta ejecutar una en modo usuario, el hardware la detecta, efectúa
una interrupción y pasa el control al SO.
Debemos impedir que un programa de usuario se atasque en un loop y nunca devuelva el control al
sistema operativo. Para ello, existe un timer, que interrumpe al computador después de un período
determinado, y cede el control al SO, que puede cerrar el programa o cederle más tiempo. Las
intrucciones que modifican el funcionamiento del timer, son privilegiadas.
Memoria.
Debemos impedir que el vector de interrupción sea modificado por un programa de usuario, al igual
que las rutinas de servicio de interrupciones del SO. Esta protección debe correr por cuenta del
hardware.
Podemos separar el espacio de memoria de cada programa, determinando el espacio de
direcciones, al cual el programa puede acceder, y proteger el resto de la memoria que no está en ese
espacio. Se almacena en registros el rango de memoria privilegiada, y se efectúa una interrupción si
cualquier programa en modo usuario, intenta acceder a esa zona de memoria.
Los registros de control son:
- Registro Base: Contiene la dirección de memoria física válida más pequeña
- Registro Límite: Contiene el tamaño del intervalo.
El hardware de la CPU, compara todas las direcciones generadas por el usuario, con estos
registros, pasando el control al SO, si se produce algún error. El SO tiene acceso irrestricto a la
memoria, pudiendo cargar los programas usuario en cualquier lado, y pudiendo expulsar dichos
programas en caso de error
E/S
Para evitar que un usuario realice E/S no válida, todas las intrucciones de E/S son privilegiadas, los
usuarios deben ceder el control al sistema operativo. Si puedo acceder a la memoria, al vector de
interrupciones, y alterar la dirección de la interrupción que genera el hardware, puedo asumir el control
del computador en modo privilegiado, para que esto no ocurra, también debo proteger la memoria.
Dado que las instrucciones de E/S son privilegiadas, y solo el SO puede ejecutarlas, los programas
de usuario, deben hacer un pedido al SO, para que realice la E/S en su nombre. Esta solicitud se llama
llamada al sistema. El hardware trata esta interrupción como una interrupción de software y pasa al
modo privilegiado, entregándole el control al SO. Si la solicitud es válida, el SO efectúa la E/S solicitada
y devuelve el control al usuario, pasando nuevamente a modo usuario.
Otra instrucción como halt (parar), es privilegiada, ya que un programa de usuario no debe parar el
computador. Las intrucciones para activar y desactivar el sistema de interrupciones también son
privilegiadas, al igual que la instrucción que cambia del modo usuario a monitor (supervisor). Como son
privilegiadas, solamente las realiza el SO.
2) Como se puede asegurar que aún en la presencia de usuarios expertos no puedan burlarse los
elementos propuestos anteriormente.
1995 – Marzo
1) Describir brevemente el proceso de linkedición de módulos así como el formato de los archivos
de módulos objeto.
- Describir algún ambiente donde sea necesario contar con un cargador reubicable y
comentar su implementación.
- Comentar si existe alguna diferencia entre el diseño de un linker para un sistema sin
memoria virtual con aquel diseñado para un sistema con memoria virtual de páginas de
largo fijo.
Justificar.
Esta ni idea, pero creo que no se da en el curso… o por lo menos no encontré nada parecido.
- Describir cual es la máxima performance teórica del sistema y porque no se llega a este
límite.
- Para que la ejecución del código del sistema operativo degrade lo menos posible la
performance del sistema comentar que se debe hacer y cual considera es la forma de
hacerlo.
Esta ni idea, pero creo que no se da en el curso… o por lo menos no encontré nada parecido.
1995 – Julio
1) ¿Como se puede implementar el núcleo de un sistema operativo cuyas operaciones primitivas
sean reentrantes?
Para que el conjunto de rutinas que conforman el kernel sean reentrantes, estas rutinas deben cumplir
las siguientes condiciones :
Para lograr que una rutina no modifique sus datos locales, estos se deben encontrar en el espacio
de direcciones del usuario que invoco a la rutina, por lo tanto en su propio stack.
Por lo tanto asociando a cada proceso una maquina virtual, logramos que el procedimiento al hacer
una llamada a una rutina del kernel sus variables locales se copien en el stack de la maquina virtual de su
proceso.
2) Comentar porque los procesos huérfanos pueden comprometer la integridad del sistema.
Los procesos huérfanos comprometen la integridad del sistema por las siguiente razones :
- Al perder el puntero al PCB este proceso se vuelve inalcanzable de la estructura de procesos.
- El proceso puede tener asignados recursos que no existen mas.
- Si el estado del proceso del que llamo al sheduler es running, este proceso seguirá corriendo.
1995 – Agosto
1) Para un sistema de memoria virtual, comentar aquellas técnicas de reemplazo que considere
mejor y justificar la elección.
- Algoritmo óptimo:
Un algoritmo óptimo de sustitución de páginas es aquel que tenga la tasa más baja de fallos
de página de entre todos los algoritmos y que nonca esté sujeto a la anomalía de Belady.
Consiste básicamente en sustituir la página que no vaya a ser utilizada durante el período de
tiempo más largo. La utilización de este algoritmo de sustitución de página garantiza la tasa de
fallos de página más baja posible para un número fijo de marcos.
Desafortunadamente, el algoritmo óptimo de sustitución de páginas resutla difícil de
implemetar porque requiere un conocimiento futuro de la cadena de referencia. Como resultado,
el algoritmo óptimo se utiliza principalmente con propósitos comparativos.
el campo de tiempo de uso en la tabla de páginas) para cada acceso a memoria. Los
tiempos deben también mantenerse apropiadamente cuando se modifiquen las tablas de
páginas (debido a la sactividades de planificación de la CPU). También hay que tener en
cuenta el desbordamiento del reloj.
ii) Pila
Consiste en mantener una pila de números de página. Cada vez que se hace referencia
a una página, se extrae la misma de la pila y se coloca en la parte superior; de esta forma,
la página más recientemente utilizada se encontrará siempre en la parte superior de la pila y
menos recientemente utilizada en la inferior.
Puesto que es necesario eliminar entradas de la parte intermedia de la pila, lo mejor
para implementar este mecanismo es utilizar una lista doblemente enlazada con un puntero
a la cabecera y otro a la cola. Entonces, eliminar una página y colocarla en la parte superior
de la pila requiere modificar seis punteros en el peor caso.
Cada actualización es un poco más cara que con el otro método, pero no hay
necesidad de buscar la página que hay que sustituir: el puntero de la cola siempre apuntará
a la parte inferior de la pila, que será la página menos recientemente utilizada.
Esta técnica resulta particularmente apropiada para las implementaciones de algoritmos
de sustitución LRU realizadas mediante software o microcódigo.
Al igual que el algoritmo óptimo de sustitución, el algoritmo LRU no sufre la anomalía de Belady.
También es importante mencionar que ninguna de las dos implementaciones del algoritmo LRU
sería concebible sin disponer de una asistencia de hardware más compleja que la que proporcionan los
registros TLB estándar
Si interpretamos estos 8 bits como enteros sin signo, la página con el número más bajo será
la menos recientemente utilizada y podremos sustituirla. Sin embargo no se garantiza la
unicidad de esos números, por lo que tendremos que decidir de alguna forma la página a
eliminar dentro de todo el conjunto con el menor registro.
El número de bits del historial, puede ser variable y se selecciona para que hacer la
actualización sea lo más rápida posible. En el caso extremo, ese número puede reducirse a 0
dejando sólo el propio bit de referencia, convirtiéndose en el algoritmo de segunda
oportunidad.
Si una página se utiliza de forma lo suficientemente frecuente como para que su bit de
referencia permanezca activado, nunca será sustituída.
Una forma de implementar el algoritmo de segunda oportunidad es una cola circular. Con
este método se utiliza un puntero para indicar cuál es la siguietne página que hay que sustituir.
Cuando hace falta un marco, el puntero avanza hasta que encuentra una página con un bit de
referencia en 0. Al ir avanzando, va poniendo los bits de referencia a 0. Una vez encontrada una
página víctima, se sustituye la página y la nueva se inserta en la cola circular en dicha posición.
El problema con este algoritmo es que si todos los bits están prendidos, se degenera en un
FIFO común.
Cada página pertenece a una de estas 4 clases, cuando hay que sustituir una de ellas se
utiliza el mismo esquema que en el algoritmo de segunda oportunidad; pero examinamos la
clase a la que dicha página perteneces. Entonces sustituímos la primera página que
encontremos en la clase no vacía más baja. Una desventaja que tiene este sistema es que
deberemos recorrer la cola circular varias veces antes de encontrar una página para sustituir.
La principal diferencia entre el algoritmo antes mencionado (2da oportunidiad) es que aquí
damos preferencia a aquellas páginas que no hayan sido modificadas, con el fin de reducir el
número de operaciones de E/S requeridas.
Una posible ampliación de este concepto consiste en mantener una lista de páginas
modificadas. Cada vez que el dispositivo de paginación está inactivo, se selecciona una página
modificada y se la escribe en el disco, desactivando a continuación su bit de modificación. Este
esquema incrementa la probabilidad de que una página esté limpia en el momento de
seleccionarla para sustitución, con lo que no será necesario descargarla.
2) Comentar el procedimiento Stop del Scheduler propuesto por Bic-Shaw, comentando eventuales
implementaciones alternativas.
El procedimiento Stop lo que hace es quitarle al proceso P el procesador en el que estaba ejecutando.
La primera instrucción obtiene el numero de procesador en que estaba ejecutando P, este valor se
obtiene del PCB de P.
Luego interrumpe al procesador que esta ejecutando a P y guarda el estado del procesador en el campo
CPU_STATE del PCB de P, así poder seguir ejecutándolo mas adelante.
Por ultimo se le asigna al a Process (que lleva que proceso está ejecutando cada procesador) el valor
Nil.
Dado que generalmente no existe instrucciones de un procesador que permitan acceder a los registros
de otro procesador se debería programar una interrupción que generada por un procesador haga a
otroprocesador que escriba sus registros en un área de memoria prefijada de modo que otros procesadores
la puedan acceder.
3) Dado un sistema de memoria virtual, cuyo espacio real es de P marcos y su espacio virtual de V
páginas, proponer la mejor implementación para la función Mapeo (p, w) en los siguientes casos:
i) V próximo a P
ii) V > P
La función Map traduce direcciones de memoria de las paginas virtuales a las paginas reales de
memoria.
ii) Si V >> P la función anterior no es útil debido a que la mayor cantidad de paginas de memoria
virtual no se corresponderán con una posición de memoria física, ya que existe alta probabilidad que
dicha página se encuentre en el disco. Por lo tanto para almacenar dicha función se desperdicia
gran cantidad de memoria.
En el caso de que la memoria buscada no pertenezca al vector entonces ocurre un Page Fault.
Dado que generalmente lo que se quiere es dada una dirección virtual conocer la dirección física
podemos implementarlo utilizando memoria asociativa que dado
1995 – Diciembre
1) Que consideramos un recurso serialmente reusable. Poner ejemplos.
Los recursos serialmente reusables son aquellos que son compartidos por los procesos en forma serial,
o sea los utiliza un proceso a la vez. Para los recursos serialmente reusables se cumple que la cantidad de
recurso disponible mas la cantidad de recurso asignada es constante e igual a la disponibilidad inicial.
Desde el punto de vista de la comunicación entre procesos y la comunicación entre threads esta
también es mucho mas eficiente (siempre que la comunicación entre threads sea entre los threads del
mismo proceso) ya que tampoco involucra llamadas al sistema operativo.
Es importante tener en cuenta que los threads no se protegen entre si sus áreas de memoria, por lo
tanto un thread puede escribir el área de código y/o datos a otro thread.
3) Comentar las diferentes ocasiones donde puede ser reubicado un módulo (incluyendo desde
compilación hasta ejecución inclusive), describiendo el procedimiento utilizado en cada caso.
Reubicacion estatica:
Momento de compilación: Si utilizamos direcciones relativas, todas las direcciones internas del
programa estarán referidas suponiendo que el modulo se encuentra a partir de la dirección cero de la
memoria.
En el momento de compilación se resuelven las referencias internas del modulo y las referencias
externas son almacenadas en una tabla (en general al comienzo del modulo objeto) para que el linker la
tome como entrada.
El linker toma como entrada la salida del compilador (tablas de referencias externas y los módulos
objeto) y los une resolviendo todas las referencias externas en base a una dirección de comienzo del
programa igual a cero. El linker genera un programa y una tabla de símbolos a reubicar en el momento de
carga (loading).
El loader toma el programa, la tabla de símbolos y una dirección real de memoria (provista por el
Sistema Operativo) llamémosle a esta dirección RR y copia el programa a partir de la dirección RR.
Antes de comenzar a ejecutar se deben resolver las direcciones de los símbolos, o sea sumarle al contenido
de cada uno el valor RR.
Una vez que se resolvieron estas direcciones el programa esta listo para ejecutar.
Reubicacion dinamica:
En este caso se traduce la dirección de un símbolo a una dirección física en tiempo de referencia.
Esta reubicación es hecha por hardware por razones de eficiencia y es transparente para el usuario.
Para este caso se utiliza una función que le llamaremos NL_map que dada una dirección de
memoria virtual devuelve una dirección física de memoria.
En este caso los programas pueden ser reubicados en tiempo de ejecución y para ello lo único que
se debe cambiar es la función NL_map.
En este caso no es necesario cargar y linkeditar los programas antes de la ejecución sino que pueden ser
cargados dinámicamente cuando se referencian.
1996 – Marzo
1) Para un sistema de memoria virtual explicar la diferencia entre fragmentación interna y externa.
Justificar y describir brevemente los ambientes donde pueden manifestarse cada una de ellas.
Se dice que ocurre fragmentación (en la memoria) cuando tenemos espacios libres, típicamente
pequeños con escasa probabilidad de ser utilizados hasta que algún proceso libere otra región de memoria.
Sea un sistema de memoria virtual organizado mediante segmentos. Cada segmento corresponde
naturalmente a una unidad de un lenguaje de programación como puede ser procedimientos, arrays o tipos
abstractos de datos. Debido a esto y si nuestro sistema trabaja con un esquema de segmentación “on
demand”, existe la posibilidad de fragmentación externa al liberar bloques pequeños, los cuales dejan
huecos que difícilmente puedan ser llenados con pedidos subsiguientes.
2) Comentar como se puede lograr la mutua exclusión entre las primitivas de B. Shaw. ¿Por que no
se utilizan las operaciones P y V habituales para el cometido anterior?
En las primitivas propuestas por Bic-Shaw se trabaja sobre estructuras del núcleo del sistema operativo.
La ejecución concurrente de 2 o más primitivas podría corromper la integridad del sistema. En su
formalización, Bic-Shaw supone que la ejecución concurrente de varias rutinas del núcleo del S.O. no se da
nunca. Para este cometido propone un mecanismo de “busy wait lock” (pagina 112).
No se pueden utilizar las primitivas P y V de semáforos porque ellas están implementadas (según
propuesta de B.S.) a partir de las primitivas que deseamos mutuo-excluir.
1998 – Febrero
1) Describir el diseño de un sistema operativo estructurado en base a un kernel o núcleo.
Este método estructura el sistema operativo eliminando todos los componentes no escenciales del
kernel e implementándolos como programas del sistema y de nivel de usuario; el resultado es un kernel más
pequeño. No hay concenso en lo que se refiere a que servicios deberían permanecer en el kernel y cuáles
deberían implementarse en el espacio de usuario. Sin embargo, normalmente los microkerneles
proporcionan una gestión de la memoria y de los procesos mínima, además de un mecanismo de
comunicaciones.
Otra ventaja del MK es la facilidad para ampliar el sistema operativo. Todos los servicios nuevos se
añaden al espacio de usuario y, en consecuencia, no requieren que se modificque el kernel. Cuando surge
la necesidad de modificar el kernel, los cambios tieneden a ser pocos, porque el MK es un kernel muy
pequeño. El sistema operativo resultante es más fácil de portar de un diseño de hardware a otro.
El MK también proporciona más seguridad y fiabilidad, dado que la mayor parte de los servicios se
ejecutan como procesos de usuario, en lugar de como procesos del kernel. Si un servicio falla, el resto del
sistema operativo no se ve afectado.
Lamentablemente, los MK pueden tener un rendimiento peor que otras soluciones, debido a la carga de
procesamiento adicional impuesta por las funciones del sistema.
La integridad del sistema se garantiza por la independencia del núcleo del sistema, de los servicios
que provee ya que como estos últimos, ejecutan en espacio de usuario, su caída no afecta al núcleo del
sistema.
3) Describa los posibles estados de un proceso, su significado y mencione todas las transiciones
validas incluyendo el detalle de los motivos que pueden desencadenarla.
Estados:
- Nuevo: Es el estado que tiene el proceso recién creado, antes de ingresar a la fila (cola o lo
que sea) de procesos listos.
- Pronto: Es un proceso al cual solamente le falta el recurso CPU para ejecutar.
- Ejecutando: Proceso que tiene asignado el recurso CPU, por lo que está ejecutando.
- Bloqueado: Estado al cual pasa un proceso que necesita completar un evento de bloqueo
(esperar otro proceso por ejemplo) o a la espera de que se complete una operación de E/S.
- Finalizado: El proceso terminó de ejecutar.
Transiciones:
- Admitido: Luego de creado el proceso, ocurre la transición Admitido que es en la cual se
ingresa al proceso a la fila de procesos para ejecutar.
- Planificado: El planificador de la CPU, elige a nuestro proceso para ejecutar (le asigna el
recurso CPU).
- Interrupción: El proceso que está ejecutando es enviado a la cola de procesos listos ya que
ocurrió una interrupción de algún tipo (page fault por ejemplo) y debe ser atendida antes de
poder continuar con la ejecución de nuestro proceso.
- E/S o evento de bloqueo: Esta transisción ocurre cuando nuestro proceso necesita obtener
alguna información, la cual no dispone y debe solicitarla al Sistema Operativo, por lo que el
proceso se bloquea y libera la CPU.
- E/S o evento completado: Luego de que han sido satisfechas las solicitudes de datos del
proceso (datos de algún archivo por ejemplo) con esta transición, el proceso pasa nuevamente
a competir por el recurso CPU en la cola de procesos Listos.
1998 – Diciembre
2) Comente las diferentes etapas u oportunidades en que un módulo puede ser reubicado y el
motivo para ello. Se debe considerar desde que el módulo se compila en adelante.
1999 – Diciembre
1) Para un sistema operativo implementado en base a un Kernel o Núcleo, indique y justifique que
servicios incluiría en su interior.
Un PCB (Process Control Block) es una estructura de datos del sistema que representa un proceso,
almacenando información del mismo. Incluye
iii. Los registros, que son guardados junto con el PC por cada interrupción.
Registros con valores de operaciones realizadas por el proceso, los cuales son vitales para poder
continuar la ejecución del mismo y obtener resultados correctos.
iv. Información adicional para la planificación (prioridades, punteros a las colas donde se pudiera
encontrar el proceso, según su estado, etc.)
Que mas decir…
vi. Información contable: número de proceso, utilización de CPU, tiempo de creación, etc.
Información administrativa, que puede servir para análisis de dicho proceso.
3) Describa el propósito y contenido de la Ready List (lista de proceso activos) y discuta según
contenga o no procesos con estado Suspendido.
La Ready List es la lista de espera de procesos activos que están esperando únicamente por el recurso
procesador. El contenido de la misma es una referencia a todos los procesos que están, como se dijo antes
solamente esperando el recurso CPU.
En caso que también contenga procesos suspendidos, generaría una baja en la performance en caso
que uno de estos sea seleccionado para ejecutar, se deberán cargar sus páginas a memoria, por lo que no
será ejecutado de inmediato.
2000 – Febrero
1) Describa un procedimiento de atención de interrupciones adecuado para un multiprocesador.
3) Durante la ejecución de un proceso, ante una excepción, indique Ud. que protocolo entiende
debe seguir el sistema operativo. Describa un esbozo de un procedimiento para lograr ese
propósito.
Una excepción es primero interceptada por código del núcleo, que implementará la administración de la
misma según el diseño del sistema operativo. En general, se determina la existencia o no de manejadores
para esa excepción examinando el contexto del stack interrumpido.
Durante la ejecución del proceso, cada vez que se elabora un bloque que declara un manejador se
inserta en el stack una traza de ello, indicando dirección del código a ejecutar, etc. En ocasión de la
excepción, analizando el stack se podrá determinar la existencia o no de un manejador apropiado. De no
haber, la propia rutina realiza el ‘unwind’ del stack hasta llegar al contexto del siguiente procedimiento
anidado, donde re-eleva la excepción original repitiéndose el procedimiento una vez más.
2001 – Febrero
-- INTRO --
Una alternativa al diseño de un sistema basado en un kernel monolítico, o en un microkernel y un
conjunto de procesos de usuario, es el diseño de un kernel con
soporte de carga dinámica de módulos.
Dichos módulos implementan ciertas funcionalidades del sistema operativo (drivers, soporte para
filesystems, extensión o modificación de system calls, etcétera), y son cargados dentro el espacio de
direccionamiento del kernel, ejecutando con los mismos privilegios que el resto del kernel.
La carga de estos módulos es sobre demanda (en tiempo de ejecución), y pueden ser removidos
manualmente, o si no son utilizados por un cierto período de tiempo, de forma de minimizar el consumo de
memoria del sistema.
Hay varios sistemas de amplia difusión (Linux y varios derivativos de BSD entre otros) que aplican
este enfoque. Para ello, se debe definir en el kernel un mecanismo de "enganche" para poder incorporar (y
remover) los módulos al kernel en tiempo de ejecución.
El hecho de contar con esta facilidad brinda una gran flexibilidad al sistema, permitiendo el
agregado de nuevas funcionalidades sin necesidad de recompilar el kernel, ni rebootear.
Considerando lo expuesto anteriormente, y lo visto en el curso con referencia a las diferencias entre
kernels monolíticos y microkernels, se pide:
Mencionar y justificar al menos 2 (dos) puntos en los que el enfoque de carga dinámica de
módulos es mejor que el de microkernels, y viceversa.
- Es más eficiente (no hay pasaje de mensajes, sino que se accede directamente a las
estructuras de datos, se disminuye la cantidad de system calls utilizadas, y por lo tanto también
la de context switches, etcétera).
- Libera al código de la carga extra que implica el pasaje de mensajes, permitiendo un desarrollo
más fácil y más rápido, y disminuyendo los requerimientos de memoria.
- El código del kernel es más pequeño y sencillo (se evitan mecanismos de carga / descarga,
etcétera).
- Es más estable en caso de falla de un driver, etcétera, ya que los mismos corren como
procesos de usuario.
- Probablemente sea más fácil de portar un driver basado en el API del kernel que un módulo que
trabaje directamente sobre el hardware.
2001 – Marzo
1) En un sistema con multiuprogramación. Es imprescindible contar con las primitivas Obtener y
Liberar Recurso (por ejemplo P y V)?
Efectivamente, la necesidad de tener primitivas para obtener y liberar un recurso se debe a que al
tener un sistema multiprogramado, tenemos varios procesos ejecutando en el sistema (alternandose la
CPU y demás elementos) y los cuales tendrán intenciones de acceder a ciertos dispositivos para
trabajar con ellos. Si cada uno de los procesos se ejecutara por separado, no tendría que compartir sus
recursos con otros, pero al estar todos ejecutando “a la vez” deben competir por ellos. Por lo tanto, si
tenemos el recurso compartido impresora, y dos procesos quieren imprimir, deberán realizarlo en orden,
ya que si alternan en el uso, obtendremos impresiones ilegibles. Para solucionar esto, cuando un
proceso quiere imprimir, solicita el recurso al SO, y cuando queda libre, realiza la impresión y no es
liberado hasta que la misma termine. De forma similar, se pueden considerar el uso de un disco o una
conexión de red.
Si bien el recurso es compartido y todos lo pueden usar, deberán tener un cierto orden y
exclusividad para su uso.
2) Tanto para un sistema de paginado o segmentación, describa como el uso de un mismo objeto
almacenado en el espacio real de memoria puede ser compartido por varios procesos.
- Sistema paginado: En un sistema paginado, para que el código sea compartible, el mismo
debe ser reentrante, o sea que no se puede modificar a sí mismo.
La tabla de páginas de cada usuario, establece una correspondencia con la misma copia física
del objeto, manteniendo las páginas de datos deben corresponder a marcos “privados”.
La compartición de memoria entre procesos dentro de un sistema es similar a la compartición
del espacio de direcciones de una tarea por parte de las hebras de ejecución. Además, algunos
sistemas operativos implementan la memoria compartida utilizando páginas compartidas.
2001 – Agosto
En cada una de las siguientes preguntas señale cuál opción es la correta. En caso que existan
varias opciones correctas, se considerará como correcta la más completa o precisa
Fork L1;
A := A+1;
…
L1: B := B+1
a- No se ejecuta.
b- Se ejecuta 2 veces.
c- Se ejecuta al finalizar la ejecución del programa llamado.
d- Se ejecuta 1 vez.
3) ¿Cuál de las siguientes condiciones debe cumplirse para poder utilizar el algoritmo del
banquero?
4) ¿Cuál de las siguientes técnicas produce obligatoriamente espera activa (bussy waiting) si se
utilizan para la exclusión mutua?
6) El algoritmo de Dekker
a- SJF.
b- Round Robin.
c- FIFO.
d- Dos de las anteriores.
e- Ninguna de las anteriores.
8) Un sistema utiliza una pila (stack) en vez de una lista o cola (FIFO) para almacenar los procesos
bloqueados después de un wait (a un semáforo). Decidir cuál de las siguientes afirmaciones es
verdadera:
a- No cambia nada.
b- Aumenta la probabilidad de deadlocks (interbloqueos).
c- Existen procesos desfavorecidos por lo que se puede presentar posposición indefinida.
d- El resultado es el mismo pero un poco más eficiente.
e- Ninguna de las anteriores.
11) En un sistema que utiliza gestión de memoria real con particiones dinámicas, en un momento
determinado la lista de huecos está compuesta por huecos de tamaño 10KB, 15KB, 17KB y
12KB. ¿Que política de asignación utiliza el sistema, si ante una solicitud de un bloque de 13KB
elige el bloque de 17KB?
a- Peor ajuste.
b- Mejor ajuste.
c- Primer ajuste.
d- Ninguna de las anteriores.
13) Sea un sistema con paginación, con una memoria principal de 16KB, con un tamaño de página
de 1024bytes. Un proceso que ocupa 5 páginas las tiene cargadas en un momento dado, en
orden a partir del marco de página 10. ¿Que dirección real corresponde con la virtual 1235?
a- 5331.
b- Esa dirección no pertenece al espacio de direcciones del proceso.
c- 10451.
d- 11475.
e- Ninguna de las anteriores.
14) Sea un sistema con 6 unidades de cinta, 4 impresoras y 2 unidades de DAT. Hay tres procesos
en el sistema (P1, P2, P3) cuyas necesidades máximas son, respectivamente (5,1,1), (2,4,2) y
(1,1,0). Se supone que la asignación de recursos se basa en el algoritmo del banquero.
17) ¿Que política de planificación de procesos logra un reparto más equitativo del tiempo del
procesador?
a- FCFS.
b- SJF.
c- Métodos basados en prioridades.
d- Round Robin.
e- Ninguna de las anteriores.
18) En un sistema con memoria virtual, el tamaño del espacio lógico de un proceso:
19) ¿Cuál de estas transiciones de estados de un proceso jamás se produce en un sistema normal?
a- de “bloqueado” a “listo”.
b- de “listo” a “bloqueado”.
c- de “en ejecución” a “listo”.
d- de “en ejecución” a “bloqueado”.
e- Todas son posibles.
23) Un semáforo tiene actualmente el valor 2. Si se ejecuta una operación wait o P sobre él, ¿que
sucederá?
a- El proceso que ejecuta la operación se bloquea hasta que otro ejecute una operación signal o V.
b- Tras hacer la operación, el proceso continuará adelante sin bloquearse.
c- El proceso continuará adelante sin bloquearse, y si previamente existían procesos bloqueados a causa
del semáforo, se desbloqueará uno de ellos.
d- Un semáforo jamás podrá tener el valor 2, si su valor inicial era 0 (cero) y se ha operado correctamente
con él.
e- Dos de las anteriores.
24) ¿Cuál de estas herramientas elimina por sí misma el riesgo de interbloqueo (deadlock)?
a- Instrucciones atómicas.
b- Monitores.
c- Semáforos.
d- Ada.
e- Ninguna de las anteriores.
a- Del hardware.
b- Del sistema operativo.
c- Del compilador.
d- Del programa de usuario.
26) En el tratamiento de interbloqueo (deadlock), el método que pide en orden los recursos actúa
sobre la condición de:
a- No apropiación.
b- Retención y espera.
c- Espera circular.
d- Exclusión mutua.
e- Ninguna de las anteriores.
29) Un proceso hace referencia a las siguientes páginas: c a d b e b a b c d (en ese orden). La
memoria principal aloja 4 marcos. Inicialmente en la memoria no hay cargada ninguna página.
30) Si se realizaron las siguientes solicitudes para un disco: 100 58 70 89 125 12 36 (en ese orden).
La cabeza del disco se encuentra en el cilindro 96 moviéndose hacia el cilindro 0.
a- Si el sistema utiliza el algoritmo SCAN las solicitudes serán atendidas en este orden: 100 58 70 89 125
12 36.
b- Si el sistema utiliza el algoritmo SCAN las solicitudes serán atendidas en este orden: 89 70 58 36
12 100 125.
c- Si el sistema utiliza el algoritmo SCAN-C las solicitudes serán atendidas en este orden: 100 125 89 70
58 36 12.
d- Si el sistema utiliza el algoritmo FIFO las solicitudes serán atendidas en este orden: 89 125 12 36 100
58 70.
e- Dos de las anteriores.
2002 – Enero
1) Indique que función de las señaladas no realiza siempre la operación Open o Abrir archivo:
3) Indique cual no es una ventaja resultado de que el sistema operativo tenga la posibilidad de
realizar la asignación o alocación dinámica de sus tablas internas:
5) Para un multiprocesador diseñado en torno a memoria común, indique cuál de las siguientes no
es una ventaja derivada del uso de procesadores con chache interna:
7) En un sistema con paginación donde la memoria tiene un ciclo de acceso de 200ns y hay una
probabilidad del 50% de hallar en el cache del procesador la entrada correspondiente en la tabla
de traducción de páginas, indique la velocidad promedio de acceso a memoria:
a- 200ns
b- 300ns
c- 400ns
d- Ninguna de las anteriores.
Monitor RegionCritica;
Var sincRegion: condition;
Procedure entrar();
Begin
SincRegion.wait();
End;
Procedure salir();
Begin
SincRegion.signal();
End
Begin
SincRegion.signal();
End;
a- Deadlock.
b- Posposición indefinida.
c- La no resolución del problema de mutuoexclusión.
d- Dos de las anteriores.
e- Todas las anteriores.
12) ¿Cual de las siguientespolíticas se adecúa mejor a los sistemas de tiempo compartido?
a- FIFO.
b- LIFO.
c- Preemptivo.
d- Round Robin.
e- SJF.
a- Bloqueado suspendido.
b- Pronto activo.
c- Ejecutando.
d- Todas las anteriores.
15) ¿Cuál de los siguientes algoritmos de planificación asegura que en todo momento se ejecute
aquel de mayor prioridad?
a- FIFO.
b- Round Robin.
c- Prioridad.
d- Prioridad “preemptive” o apropiativo.
e- Dos de los anteriores.
17) Un proceso hace referencia a las siguientes páginas c a d b e b a b c d (en ese orden). La
memoria principal aloja 4 marcos. Inicialmente en la memoria no hay cargada ninguna página.
18) si se realizaron las siguientes solicitudes para un disco: 100 58 70 89 125 12 36 (en ese orden).
La cabeza del disco se encuentra en el cilindro 96 moviendose hacia el cilindro 0.
a- Si el sistema utilza el algoritmo SCAN las solicitudes serán atendidas en este orden: 200 69 70 89 125
12 36.
b- Si el sistema utiliza el algoritmo SCAN las solicitudes serán atendidas en este orden: 89 70 58 36 12
100 125.
c- Si el sistema utiliza el algoritmo SCAN-C las solicitudes serán atendidas en este orden: 89 70 58 36 12
125 100.
d- Si el sistema utiliza el algoritmo FIFO las solicitudes serán atendidas en este orden: 89 125 12 36 100
58 70.
e- Dos de las anteriores.
19) En un sistema que utiliza gestión de memoria real con particiones dinámicas, en un momento
determinado la lista de huecos está compuesta por huecos de tamaño 10KB, 15Kb, 17Kb y 12KB.
¿Que política de asignación utiliza el sistema, si ante una solicitud de un bloque de 13KB, elige
el bloque de 15KB?
a- Peor ajuste.
b- Mejor ajuste.
c- Primer ajuste.
d- Mejor o primer ajuste.
e- Ninguna de las anteriores.
20) En cuanto a las operaciones “borrar archivo” y “cerrar archivo” sobre un archivo no vacío, es
cierto que:
a- ambas eliminan solo la información de ese archivo de la tabla de archivos abiertos del proceso que ha
invocado la operación.
b- Ambas eliminan la información de ese archivo, tanto de la tabla de archivos abiertos del proceso, como
de la tabla general del sistema.
c- Ambas no modifican el continido del directorio que contiene a ese archivo.
d- Ambas no tienen por que modificar el contenido de los bloques de datos del archivo en disco.
21) Sea un sistema de memoria virtual paginada con páginas de 4KB. La memoria principal es de
64MB. La Tabla de Páginas, que ocupa 2MB cuenta con descriptores de 2 bytes. ¿Cuál es el
espacio de memoria virtual máximo posible?
a- 30MB.
b- 64MB.
c- 4GB.
d- Un valor distinto a los anteriores.
23) Si tenemos un sistema con paginado y 16 marcos, que está ejecutando un único proceso que
ocupa 17 páginas, es cierto que:
24) Una forma de reubicar estáticamente un archivo ejecutable consiste en sumar a todas las
referencias relativas a memoria que se encuentren la dirección de comienzo de memoria en
donde se va a cargar dicho ejecutable. Para saber cuáles son estas referencias:
a- El loader o cargador genera una lista de las direcciones relativas que hacen referencia a memoria para
que el linker pueda reubicarlas en el momento de linkedición.
b- El linker genera dentro del archivo ejecutable una lista de direcciones a reubicar y el cargador,
que conoce de antemano la estructura de todos los ejecutables, sabe donde encontrar dicha
lista.
c- En el momento de la carga del programa en memoria, el compilador deja en la pila del proceso la lista
de las direcciones a reubicar por el cargador.
d- Es necesario contar con un registro de reubicación que contenga la direcci´n de memoria del comienzo
de la lista de direcciones a reubicar.
a- El entorno de ejecución de un proceso ligero (thread) es mucho más reducido que el de un proceso
tradicional ya que no incluye al proceso.
b- Un proceso ligero puede planificarse con las mismas políticas que los procesos tradicionales.
c- Dos procesos ligeros pueden comunicarse pasándose información en la pila o “Stack”.
d- Dos procesos ligeros pueden comunicarse pasándose información en los registros del procesador.
a- El programador.
b- El compilador.
c- El cargador del sistema operativo.
d- La MMU (unidad de gestión de memoria).
2002 – Febrero
1) Los semáforos…
2) En un sistema multihilo
a- Más veloz.
b- Más fácil de usar.
c- Más seguro.
d- Ninguna de las anteriores.
5) en UNIX, ¿que ocurre con los ficheros abiertos por un proceso cuando éste crea un proceso
hijo?
6) Suponiendo que inicialmente los marcos disponibles están vacíos, la cadena de referencias a
memoria (1,2,3,4,1,3,4,2,3,1,3,4):
a- Provoca al menos dos fallos de página. Creo que está mal, debería ser (c) ya que todos están
vacíos
b- Provoca como mucho tres fallos de página.
c- Provoca exactamente cuatro fallos de página, independientemente de la política de reemplazo.
d- Según la política de reemplazo, podría no provocar fallos de página.
7) Se analiza un sistema de paginación por demanda y se obtiene que, con cierta carga de trabajo
la CPU se emplea un 15% y el disco intercambio (swap) está ocupado un 92% del tiempo. ¿Cuál
de estas acciones aumentaría más la utilización de la CPU?
8) Se tiene una cadena de referencias a memoria, que dan 10 fallos de página si se gestionan con
una política FIFO. ¿Cuántos fallos de página se obtendrían con la política óptima?
9) La característica distintiva del enlace dinámico es que resuelve referencias a memoria en:
a- Tiempo de carga.
b- Tiempo de compilación.
c- Tiempo de ejecución.
d- Tiempo de respuesta.
a- C1.
b- C2.
c- Depende de la política de sustitución empleada.
d- Las dos dan los mismo fallos.
11) Para procesar simultaneamente operaciones de CPU con operaciones de E/S se requieren:
12) En el interbloqueo, la estrategia que puede dar lugar a una muy baja utilización de recursos es:
a- Estrategia liberal.
b- Estrategia de prevención.
c- Estrategia de detección y recuperación.
d- Estrategia de mutuaexclusión.
a- Detección.
b- Sustitución.
c- Traducción.
d- Ubicación.
a- Sistema multiprogramado.
b- Sistema monousuario.
c- Sistema de procesamiento por lotes.
d- Sistema monotarea.
a- El i-node.
b- La U-area.
c- El x-file.
d- El z-buffer.
e- Ninguna de las anteriores.
a- No apropiación.
b- Retención y espera.
c- Espera circular.
d- Exclusión mutua.
17) La interfase entre los procesos de usuario y el sistema operativo está definido por:
a- Memoria compartida.
b- Llamadas de sistema.
c- El shell.
d- Librerías de alto nivel.
20) Un proceso A escribe una serie de datos (por ejemplo, un array de enteros) en un área de
memoria y n procesos deben imprimir con una determinada frecuencia (por ejemplo, cada
segundo) la última serie de datos escrita por el proceso A. ¿Como se puede asegurar exclusión
mutua?
21) Si un proceso utiliza todo su quantum en la mayoría de los casos, podemos decir que él que:
a- Nada.
b- Es un proceso con mucha E/S.
c- Es un proceso orientado al cálculo.
d- Es una tarea del sistema.
e- Es una tarea con alta prioridad
22) Cuando un proceso en modo usuario intenta ejecutar una instrucción privilegiada, ocurre:
a- Una interrupción.
b- Una excepción.
c- Una llamada al sistema.
d- Una llamada al scheduler.
a- Se bloquean también el resto de los hilos de la misma tarea si la implementación de los hilos se
realizó a nivel de usuario.
b- Se bloquean todos los hilos de ese usuario si los hilos se implementaron a nivel de usuario.
c- Los demás hilos podrán seguir ejecutándose sin que importe la forma en que se llevó a cabo la
implementación de los mismos.
d- Los demás hilos seguirán o no ejecutándose sin que importe la forma en que se llevó a cabo la
implementación de los mismos.
25) De los servicios que se citan a continuación, ¿cuáles no deberían ser ofrecidos por un
microkernel?
a- Ocultamiento de interrupciones.
b- Llamadas al sistema para suministrar acceso básico al sistema de archivos.
c- Herramientas para la comunicación entre procesos.
d- Gestión básica de procesos.
27) De las diferentes técnicas de E/S, ¿cuál liebera de más trabajo de E/S a la CPU?
a- Polling.
b- Interrupciones.
c- DMA.
d- Las respuestas a y c.
29) Para favorecer a los trabajos con largas ráfagas de CPU se debe implementar un algoritmo de
planificación:
a- FCFS.
b- SJF.
c- Round Robin.
d- Basado en prioridades.
30) Sea un sistema de memoria virtual paginada con páginas de 64KB. La memoria principal es de
1GB. La tabla de páginas, que ocupa 512KB, cuenta con descriptores de 16bytes. ¿Cuál es el
espacio de memoria virtual máximo disponible?
a- 1GB.
b- 2GB.
c- 4GB.
d- Un valor distinto de los anteriores.
2002 – Julio
1) Anulada
2) Un sistema utiliza una pila y otro una cola para almacenar los procesos bloqueados después de
un P (semáforo ). Decidir cuál de las siguientes afirmaciones es verdadera:
3) Dado el siguiente trozo de programa, ejecutado sin errores. ¿Cuál es el resultado impreso en
UNIX?
…
int main (void) {
if ((pid = fork())==0) printf(“hijo, ”);
else { wait (NULL);
printf(“padre, “);
printf(“fork terminado”);
fflush(stdout);
}
5) ¿Cuál de las siguientes condiciones debe cumplirse para poder utilizar el algoritmo del
banquero?
Izq = i;
der = (i+1)%n
if (izq <=der){
P(sem[izq]);
P(sem[der]);
} else { P(sem[der]);
P(sem[izq]);
}
comer();
a- exclusión mutua.
b- retención y espera.
c- no apropiación.
d- espera circular.
8) ¿Cuál de las siguientes opciones no es una razón para que un proceso esté en estado
“bloqueado”?
10) Para lograr la exclusión mutua de una sección crítica donde se accede a un recurso compartido
por N tareas, donde el recurso está inicialmente disponible.
11) La comunicación entre procesos es asíncrona cuando el proceso que envía el mensaje:
a- Pueden existir problemas de integridad de los datos si dos procesos leen el mismo bloque de la FAT a
la vez.
b- La FAT se implementa con un vector indexado por 1..MAX_BLOQUES_DISCO, en el que cada lugar del
mismo se almacena el contenido de algún archivo.
c- Cada posición en el vector de la FAT, hace referencia a un bloque de disco.
d- La cantidad máxima de archivos del sistema de archivos es siempre de 2^MAX_BLOQUES_DISCO.
14) ANULADA.
15) ¿Por qué es conveniente implementar un sistema operativo utilizando una jerarquía de capas?
a- Un archivo en disco que ocupa N bloques de TAM_BYTES, y posee un tamaño real en disco de (N-
0.5)*TAM_BYTES.
b- Un proceso que contiene una región de memoria de 4 páginas de 16KB, en la cual se tiene un vector
almacenado en ellas de 15 elementos, donde cada uno ocupa 4KB.
c- Un esquema de 4 particiones fijas de 100KB, en donde se utilizan 3 bloques de 75KB, 89KB y 32KB.
d- Un esquema de segmentación donde existen 3 huecos de 75KB, 89KB y 32KB.
e- a, b y c.
a- Permite que un mismo binario pueda ser cargado sin alteraciones en distintas posiciones de
memoria.
b- Aumenta los tiempos de desarrollo, debido a la necesidad de considerar los posibles valores del registro
de reubicación.
c- Que no necesita ayudas del hardware para lograr la reubicación dinámica.
d- Disminuye los tiempos de acceso a la memoria por parte del programa.
e- No necesita utilizar las bibilotecas del sistema para realizar la carga.
a- los vectores de bits son la forma más eficiente de administración de espacio libre, aún si están
almacenados en el almacenamiento secundario.
b- Utilizando una lista enlazada ordenada de bloques libres, obtenemos máxima performance
cuando es necesario agrupar bloques libres de disco.
c- La estrategia de agrupamiento de espacio libre, no permite encontrar rápidamente las direcciones de un
gran grupo de bloques libres.
d- Utilizando la estrategia de conteo, la lista de bloques libres será más larga a medida que la cuenta sea
mayor que 1.
e- c y d.
22) Para implementar un sistema multiusuario seguro; en el diseño del procesador no se verifica que
23) Para un sistema operativo de un multiprocesador con soporte de hebras (threads) de ejecución
se verifica que:
a- Dos hebras de un mismo proceso comparten la mayoría del espacio de memoria del proceso.
b- Dos hebras de un mismo proceso utilizan el mismo stack o pila de ejecución.
c- Un proceso tiene al menos una hebra.
d- De un proceso, solo debe ejecutar una hebra a la vez.
e- a y c.
a- Es deseable que su imagen en memoria sea compartida por todos los usuarios que sea posible.
b- Debe existir un único intérprete de comandos.
c- Permitirá procesar series de comandos expresados en un lenguaje determinado.
d- Ejeuta en el contexto de seguridad de un usuario.
e- Habitualmente permite ejecutar comandos o programas en modo concurrente.
26) En relación con el “swap file” de la memoria virtual habitualmente se verifica que:
c- Sus características especiales se derivan del hecho que en la capa del sistema que implementa la
memoria virtual no necesariamente se dispone del file system.
d- a y c.
e- b y c.
2003 – Febrero
1) Si en un S.O. la implementación de los threads (hebras) se realizó a nivel de usuario, ¿qué
sucede con las restantes hebras de un proceso cuando una se bloquea como consecuencia de la
invocación de un servicio (system call) del S.O.?
Este es un modelo muchos-a-uno, el cual asigna múltiples hebras del nivel de usuario a una hebra del
kernel. La gestión de hebras se hace mediante la biblioteca de hebras en el espacio de usuario, por lo que
resulta eficiente, pero el proceso completo se bloquea si una hebra realiza una llamada bloqueante al
sistema. También, dado que sólo una hebra puede acceder al kernel cada vez, no podrán ejecutarse varias
hebras en paralelo sobre múltiples procesadores.
2) Se analiza un sistema de paginación por demanda y se observa que, con cierta carga de trabajo,
de la CPU se emplea un 15% y el disco de intercambio (swap) está ocupado un 92% del tiempo.
¿Qué acción tomaría para aumentar el rendimiento del sistema para esta misma carga de
trabajo?
3) Describa brevemente en que consiste la técnica de swapping así como su oportunidad de uso.
4) El semáforo es un buen mecanismo para obtener la exclusión mutua entre dos procesos.
Explique brevemente porque si las operaciones P y V no se ejecutan en forma atómica puede no
proporcionarse la exclusión mutua.
Semáforos no binarios:
Otra forma de verlo es haciendo el entrelazado de wait con wait, wait con signal o signal con signal.
5) Un proceso A recibe datos por la red y lo escribe en una zona de memoria. Un proceso B debe
imprimir por pantalla cada uno de los datos recibidos por A. Explique si el siguiente código
resuelve el problema.
No lo resuelve
Podría ocurrir que Copiar_datos se ejecutara a la vez e incluso antes que poner_datos
Por ejemplo la primera vez podría darse esta secuencia de ejecución:
V(go)
P(go)
Copiar_datos()
poner_datos
7) Dado un sistema con paginación, donde la memoria tiene un ciclo de acceso de 200ns y hay una
probabilidad del 50% de hallar en el cache del procesador la entrada correspondiente en la tabla
de traducción de páginas. Indique la velocidad promedio de acceso a memoria.
i) Las cuatro condiciones necesarias para el bloqueo mutuo son también suficientes si existe
solo un recurso de cada uno de los tipos implicados en la espera circular.
Verdadera
Dada la definición de grafo de asignación de recursos, puede mostrarse fácilmente que si el grafo
contiene un ciclo y cada tipo de recursos tiene exactamente una instancia, entonces un ciclo implica que se
ha producido un bloqueo mutuo.
En otras palabras, si todos tienen recursos asignados y están esperando por otros en una cola circular,
(no pudiendo ni compartir los recursos ni quitársele la asignación a ningún proceso), entonces no van a
poder liberar sus recursos hasta tanto no obtengan el recurso que esperan, que no será liberado hasta que
alguien de la cadena desista o libere su recurso. Como esto no sucederá (porque no puede quitársele el
recurso) entonces quedarán esperando eternamente.
ii) las cuatro condiciones necesarias para un bloqueo mutuo son también suficientes si existen
varios recursos de cada uno de los tipos implicados en la espera circular.
Falsa
Esto puede verse fácilmente con el siguiente contraejemplo:
Aunque aquí hay un ciclo y se cumplen las 4 condiciones necesarias, cuando P3 libere una de las
instancias de R1, dejará de existir el ciclo y allí se verá claramente que no hay bloqueo mutuo, pues ahora
se le puede asignar a P2 una instancia de R1.
Test&Set Semáforo
Requiere sólo soporte de hardware Requiere soporte del Sistema Operativo y Hardware
Se produce espera ocupada Procesos esperan en estado bloqueado
Mecanismo de bajo nivel Mecanismo de mayor nivel (llamada al(instrucción
No permite priorizar las esperas de máquina) sistema)
Dependiente de la arquitectura Procesos bloqueados pueden priorizarse
Dependiente del sistema operativo (más del
procesador portable)
10) Especifique los requerimientos de hardware para soportar eficientemente y en modo protegido
un esquema de segmentación de memoria.
- El direccionamiento del espacio de memoria deberá ser a través del uso de descriptores
protegidos. Los mismos deberán contar también con la indicación del largo del segmento,
debiéndose producir una excepción en ocasión de indexar un descriptor con un valor superior a
éste.
2003 – Marzo
1) Comente y explique diferencias entre las formas de planificación de disco siguientes: FCFS,
SSTF, SCAN y C-SCAN.
La primer solicitud que llega es la primera en ser atendida, por lo que al acumularse solicitudes, esta
implementación funciona como una cola común. Es el algoritmo más justo, pero no proporciona el
servicio más rápido. Es también la forma más sencilla de implementación.
Atiende las solicitudes cercanas a la posición actual de la cabeza antes de mover a la cabeza a la
posición más lejana para atender otras solicitudes. En un gran conjunto de solicitudes, la cabeza del
disco realiza menos movimientos, pero tiene el inconveniente que puede causar inanición de
algunas solicitudes, si bien mejora FCFS no es óptimo.
SCAN
- El brazo del disco parte de un extremo del disco, y se mueve hacia el otro, atendiendo las
solicitudes correspondientes a cada cilindro. Cuando llega al otro extremo del disco, invierte la
búsqueda.
- Desventaja: cuando la cabeza “da la vuelta” tiene pocas solicitudes para atender, pues sigue su
recorrida en los cilindros que visitó más recientemente. La mayoría de las solicitudes pendientes
estarán en los útimos cilindros a recorrer.
- Redunda en un tiempo de espera no uniforme.
También llamado el algoritmo del elevador. En este algoritmo, el brazo del disco va desde un
extremo al otro del disco atendiendo las solicitudes a medida que llega a cada cilindro, hasta llegar
al otro extremo, donde invierte la dirección de movimiento de la cabeza, continuando la atención.
C-SCAN
- Variante del anterior. Soluciona el problema de posicionamiento de éste, moviéndose siempre al
cilindro inicial luego de visitarlos a todos.
También llamado SCAN circular. Esta planificación está diseñada para dar un tiempo de espera
más uniforme. Al igual que SCAN se mueve la cabeza del disco de un extremo al otro, atendiendo
las solicitudes en el camino, solo que cuando llega al otro extremo, regresa de inmediato al
primcipio del disco sin atender solicitudes. Esto se hace ya que luego del cambio de dirección hay
pocas solicitudes inmediatamente después de la cabeza (ya que hace poco se atendieron esos
cilindros) y la mayor densidad de solicitudes se encuentra en el otro extremo del disco.
No, el acceso al i-ésimo bloque de un archivo puede requerir i lecturas de disco, siguiendo los punteros
hasta llegar al bloque destino.
Ventaja:
- Resulta sencillo y eficiente encontrar n bloques libres consecutivos en el disco, sobretodo en
computadoras que tienen instrucciones de manipulación de bits, que pueden usarse
eficazmente para este fin: por ejemplo una instrucción que dado un registro devuelva la posición
del primer bit que tenga 1.
Desventaja:
- no son eficientes si para la mayoría de los accesos no se conserva todo el mapa en memoria
principal. Esto es razonable sólo si el disco no es de gran tamaño.
4) ¿Que es y para que sirve la TLB y que optimización podría utilizarse a nivel de hardware para
optimizar su utilización?
Def 1. Wikipedia
Translation Lookaside Buffer (TLB) es una memoria caché administrada por la MMU, que contiene
partes de la tabla de paginación, es decir, relaciones entre direcciones virtuales y reales. Posee un número
fijo de entradas y se utiliza para obtener la traducción rápida de direcciones. Si no existe una entrada
buscada, se deberá revisar la tabla de paginación y tardará varios ciclos más, sobre todo si la página que
contiene la dirección buscada no está en memoria primaria (véase memoria virtual). Si en la tabla de
paginación no se encuentra la dirección buscada, saltará una interrupción conocida como fallo de página.
- Funcionamiento:
El TLB hace referencia a direcciones físicas en su tabla. Puede residir entre la CPU y la caché
de la misma o entre esta caché y la unidad de memoria primaria. Esto depende de si la caché utiliza
direccionamiento físico o virtual. Si la caché se direcciona de manera virtual, las peticiones se
envían directamente de la CPU a la caché, la cual accede al TLB cuando es necesario. Si la caché
se direcciona de manera física, la CPU realiza una búsqueda en el TLB con cada operación de
memoria, y la dirección física resultante es enviada a la caché. Existen pros y contras en ambas
implementaciones.
Una optimización común para las cachés direccionadas de manera física es realizar una
búsqueda en el TLB en paralelo con el acceso a caché. Los bits de orden más bajo de cualquier
dirección virtual (por ejemplo en un sistema de memoria virtual que tiene páginas de 4KB, los 12 bits
más bajos de la dirección virtual) no cambian en la traducción de dirección virtual a física. Durante
un acceso a caché se realizan dos acciones: Se utiliza un índice para encontrar una entrada en el
sistema de datos de la caché, y a continuación las etiquetas de la línea encontrada se comparan. Si
la caché está estructurada de tal manera que pueda ser indexada utilizando solo los bits que no
cambian en la traducción, la caché puede realizar su operación de "indexación" mientras el TLB
traduce la parte alta de la dirección. Entonces, la dirección traducida del TLB es enviada a la caché.
La caché realiza una comparación de etiquetas para determinar si este acceso ha sido un acierto o
un fallo.
- Fallo:
En las arquitecturas modernas se pueden observar dos métodos de tratar un fallo de TLB.
Con el manejo hardware del TLB, la propia CPU comprueba las tablas de paginación para ver si
hay alguna entrada válida para la dirección virtual especificada. Si la entrada existe, se lleva a la
TLB y se reintenta el acceso; esta vez el acceso será un acierto, y el programa podrá proceder con
normalidad. Si la CPU no encuentra una entrada válida para la dirección virtual en las tablas de
página, se genera una excepción de fallo de página, la cual deberá manejar el sistema operativo. El
manejo de los fallos de página normalmente implica llevar los datos pedidos a la memoria física,
generando una entrada en la tabla de paginación para mapear la dirección virtual que faltaba para
corregir la dirección física, y reiniciar el programa.
Con el manejo software de las TLB, un fallo genera una excepción "fallo de TLB", y el sistema
operativo debe acceder a las tablas de paginación y realizar la traducción por software. Entonces, el
sistema operativo carga la traducción en el TLB y reinicia el programa desde la instrucción que
causó el fallo. Como en el sistema de manejo hardware, si el SO no encuentra una traducción válida
en las tablas, ocurre un fallo de página y el SO deberá manejarlo de la manera correspondiente.
Def 2.
La TLB ( Translation Look-aside Buffer ) es un conjunto de registros construidos con memoria de alta
velocidad que, dado un número de página se compara simultáneamente con todas las entradas que
contiene y si se encuentra el número de marco correspondiente, entonces se devuelve.
Es usado a modo de caché para mantener algunas de las entradas de la tabla de páginas.
A diferencia de la tabla de páginas tradicional, en gral. se evita tener dos accesos a memoria ( el acceso
a la tabla y el acceso efectivo ) para acceder a una localidad.
A nivel de hardware se puede optimizar haciendo que la MMU cargue en la TLB una entrada, luego de
resolverla ( ej: SPARC, 80x86 ), en vez de delegarlo al sistema para que lo haga a nivel de software ( ej:
MIPS ).
Aunque el usuario puede ahora hacer referencia a los objetos de programa utilizando una dirección
bidimensional, la memoria física real continúa siendo, por supuesto, una secuencia unidimensional de bytes.
Por tanto, debemos definir una implementación para mapear las direcciones bidimensionales definidas por
el usuario sobre las direcciones físicas unidimensionales. Este mapeo se lleva a cabo mediante una Tabla
de segmentos. Cada entrada de la tabla de segmentos tiene una dirección base del segmento y un límite
del segmento. La dirección base del segmento contiene la dirección física inicial del lugar donde el
segmento reside dentro de la memoria, mientras que el límite del segmento especifica la longitud de éste.
Se requiere una tabla de segmentos o descriptores usada para mapear las direcciones virtuales (
segmento, offset ) en direcciones físicas. La tabla debe mapear en sí números de segmento en el límite y
base de cada uno. Si se mantiene en memoria, debe mantenerse registros base y límite de la tabla.
Debe verificarse que el offset esté entre ambos, o generar una trap.
Este mecanismo es bueno porque permite la protección de segmentos, si se utilizan bits de protección
asociados a cada entrada de la tabla. El hardware los consultará para evitar accesos ilegales a memoria (
ej: escribir en un segmento de sólo lectura ). Habitualmente en el segmento se agrega un puntero inverso
hacia la tabla. Además, esta forma de manejo de memoria, tiene similaridad con la forma que el usuario
imagina la distribución de la memoria (es más intuitiva).
6) ¿Cómo resolvería ud., utilizando el entorno de (5), la necesidad de compartir segmentos entre
procesos?
La segmentación permite el compartimiento de código o datos entre distintos procesos de manera más
natural que paginación. Para los segmentos de código se comparte el diccionario, para los segmentos de
datos las alternativas son:
i. Sólo un descriptor apunta la segmento y otros procesos cuentan con copias que apuntan al principal
(dando un nivel de indirección ).
ii. Que hayan descriptores adicionales que apunten al original.
Ante la necesidad de reorganizar memoria, con la alternativa (6.i), se debe bloquear el descriptor
original, se desplaza el segmento y luego se actualiza el descriptor, pues en el momento de hacerlo puede
haber otro proceso ejecutándose.
Con la alternativa (7.ii) se debe hacer lo mismo, pero para todo descriptor, debiendo realizar un scan de
los diccionarios que potencialmente lo referencien, buscando las copias.
8) ¿Por que es necesario contar con dos modos de ejecución distintos como ser modo supervisor
y modo usuario?. Explique en detalle los procedimientos que permiten garantizar la integridad
de un sistema operativo multiusuario.
La desventaja es que el sistema sólo gestiona a nivel de tareas o procesos, no de hilos dentro de
tareas, y por tanto no les asigna distintos procesadores a hilos distintos de una misma tarea.
Este modelo, asigna a todas los threads de un proceso de usuario, un único thread a nivel del núcleo;
el problema mayor que presenta este modelo es que como solamente tiene asignado un thread en el
núcleo, si un thread de usuario realiza una llamada bloqueante al sistema, el proceso completo se
bloqueará. Por otra parte, dado que solamente una hebra puede acceder al kernel cada vez, no podrán
ejecutarse varios threads en paralelo sobre múltiples procesadores.
Por otra parte, el cambio de contexto y la seguridad, se encargan librerías a nivel de usuario, lo que lo
hace más seguro, así como también ahorra en la información para un cambio de contexto.
10) Dé una desventaja de soportar threads a nivel de núcleo, en comparación a hacerlo a nivel de
usuario.
Para el cambio de contexto es necesario llamar al sistema, lo que la hace más lento que la conmutación
entre hilos a nivel de usuario.
11) Suponga que usted debe procesar una matriz de información, de N x N, donde N es muy grande.
Discuta la conveniencia de utilizar tareas multihiladas o procesos para realizar esta acción.
Es más conveniente el uso de threads colocando la matriz en el espacio común de direcciones, como
una variable global. Es razonable esperar que la aplicación que procesa la matriz no requiera proteger sus
hilos entre sí, y que en cambio cada thread deba acceder a toda la matriz.
Si se resuelve mediante procesos, debería emplearse un mecanismo de comunicación del sistema, con
la pérdida de desempeño que cada llamada implica.
Es un planificador que asegura que el proceso en ejecución es el de mayor prioridad en el sistema. Esto
implica que cuando un proceso A con prioridad p1 está listo para ejecutar, y un proceso B con prioridad p2 (
con p1 > p2 ) está siendo ejecutado, el planificador debe quitarle el procesador a B y despachar A.
- prevención
- detección con recuperación del mismo
La detección y recuperación no evita el deadlock, sino que examina el sistema para determinar si ha
ocurrido, para recuperarse del mismo, ya sea terminando uno o más procesos involucrados, o expropiando
recursos.
18) Que problemas presenta el algoritmo de Dekker para mutuo exclusión de procesos.
Satisface los requisitos para el problema de la sección crítica, pero presenta busy-waiting, pues espera
el cambio de una flag que indica qué proceso puede acceder a su sección crítica.
2003 – Abril
1) Describa brevemente las siguientes técnicas de asignación de memoria: First Fit, Best Fit, Worst
Fit. Indique las ventajas y desventajas de cada una de ellas
First Fit
Asigna el primer espacio que tenga tamaño suficiente. La búsqueda puede comenzar en el inicio de
la lista de espacios, o donde terminó la búsqueda anterior. La búsqueda termina al encontrar el primero de
tamaño suficiente. Es el más rápido de los 3, si bien en la utilización de almacenamiento es comparable a
Best Fit.
Best Fit
Asigna el menor espacio de tamaño suficiente. Hay un mayor costo en la búsqueda o en la inserción
según se mantenga o no una lista ordenada de espacios libres. Produce el fragmento sobrante más
pequeño, que tendrá una escasa probabilidad de volver a ser reusado.
Worst Fit
Asigna el hueco más grande, a fin de evitar el problema anterior. Sin embargo sigue siendo
ineficiente como Best Fit.
FIFO
Asocia (en forma explícita o no) a cada página el instante en que se trajo a memoria, eligiendo la
más antigua cuando hay que hacer un reemplazo. Es fácil de implementar, pero su rendimiento no siempre
es bueno. Un ejemplo es cuando se reemplaza una página traída hace mucho tiempo, pero de uso
intensivo. También presenta la anomalía de Belady: con ciertos patrones de referencias, la tasa de fallos de
página puede aumentar al incrementarse el número de marcos asignados, en contra de lo esperado.
OPTIMO
Busca reemplazar la página que no se usará durante el mayor período de tiempo, garantizando la
menor tasa de fallas de páginas posible, para un número fijo de marcos. Es difícil de implementar, pues se
requiere un conocimiento futuro de las referencias a páginas. Se utiliza (más precisamente sus resultados
esperados) para estudios comparativos con otros algoritmos no óptimos.
LRU
Reemplaza la página que no se ha usado durante el mayor periodo de tiempo, basándose en el
pasado reciente para suponer cuál será la página que no se usuará en el futuro cercano. Es utilizado con
frecuencia, y existen 2 implementaciones:
i. Con un contador, que es incrementado con cada referencia a alguna página de memoria. cada vez
que se referencia una página en particular, el contador se copia a un registro asociado a la misma.
- Debe tratarse el desbordamiento del contador.
- Este esquema requiere una búsqueda en toda la tabla de páginas, a fin de encontrar la que
tiene el menor valor.
- Observar que requiere apoyo de hardware.
ii. Mantener una lista doblemente encadenada, extrayendo la página más recientemente utilizada.
LRU no presenta la anomalía de Belady. (Pertenece a una clase llamada algoritmos de pila: las páginas
residentes en memoria para un sistema con N marcos son siempre un subconjunto de las que habría con N
+ 1)
SEGUNDA OPORTUNIDAD
Es una variante del algoritmo FIFO, que evita que una página muy utilizada sea eliminada por llevar
mucho tiempo en memoria. Se mantiene un bit por página, que es seteado en 1 con cada referencia, y
actualizado por el sistema a intervalos regulares. Se recorre la lista de páginas examinando estos bits de
referencia. Si el bit de una página está en 1 se le da una segunda oportunidad, poniéndolo en 0 y
enviándolo al final de la lista (como si recién hubiera llegado a memoria). La búsqueda termina cuando se
encuentra el primer bit en 0, en cuyo caso se reemplaza la página.
3) ¿Cuando ocurre un fallo de pagina?. Explique las acciones del sistema operativo frente a un
fallo.
i. determina si la referencia memoria fue válida o inválida (por ejemplo por indizar mal un vector)
ii. si fue una referencia válida, en vez de abortar el proceso, se debe localizar en disco la página
buscada
iii. buscar un marco libre
- si lo hay, lo selecciona
- sino, aplica algoritmo de reemplazo para seleccionar un página a quitar, la guarda en disco y
refleja el cambio en tabla de páginas.
iv. mover la página deseada al nuevo marco libre, reflejar cambio en tabla de páginas
v. reejecutar la instrucción que provocó el fallo (el proceso no necesariamente cambio de estado).
Obs: Se planifica (CPU) en las transferencias entre disco y memoria de la página seleccionada para
reemplazo y de la página entrante de acuerdo a las reglas habituales para E/S.
4) Describa las acciones del kernel de un sistema operativo cuando ocurre un cambio de contexto:
i. entre hilos
ii. entre procesos
Para el caso de un cambio de contexto entre hilos de un mismo proceso, el sistema operativo debe
salvar los registros, el contador de programa y el registro de pila del hilo en el PCB. Sin embargo no se
requiere ninguna otra gestión relativa al espacio de memoria u otros recursos, ya que el contexto es idéntico
para todos los hilos del proceso o tarea que contiene a los hilos. De acuerdo a lo expuesto, para un proceso
activo, el planificador podría priorizar el despacho de hebras del mismo en el procesador o CPU corriente.
Si los hilos pertenecen a tareas o procesos diferentes, obviamente se hace necesario conmutar el contexto
de acuerdo a la técnica habitual.
Para el caso de cambio de contexto entre procesos diferentes, el sistema operativo debe realizar las
mismas tareas que con lo hilos, pero además debe movilizar información relativa a los recursos asignados al
procesos, como ser bloques de memoria o disco asignado y procesos descendientes del proceso actual.
En ejecución
El proceso tiene asignado el procesador, y el flujo de instrucciones del proceso se está ejecutando.
Bloqueado
El proceso está en espera de que se le asigne algún recurso físico (como el fin de una E/S) o lógico.
Listo
El proceso no está bloqueado, sino compitiendo para que se le asigne un procesador y pasar a
estado de ejecución.
Suspendido
El proceso fue suspendido explícitamente, saliendo del estado listo o ejecutándose. Pasará al
estado listo (y será elegible para asignársele la CPU) cuando sea reanudado, también en forma explícita.
Bloqueado suspendido
Análogo al anterior, se da cuando se suspende un proceso que estaba bloqueado. Volverá al estado
bloqueado al ser reaunudado.
Un PCB (Process Control Block) es una estructura de datos del sistema que representa un proceso,
almacenando información del mismo. Incluye
i. Por lotes
Recibe un flujo de trabajos separados, los ejecuta y vuelca los resultados de los mismos, devolviéndolos
por una impresora, medio de almacenamiento o similar. Se caracterizan por la ausencia de interacción entre
el usuario y el trabajo en tanto que este se ejecuta. El término <<por lotes>> se refiere a un modelo en que
los trabajos similares se agrupaban en lotes, a fin de reducir el tiempo total dedicado a preparar el
computador entre distintos trabajos. Los sistemas modernos no presentan esta limitación.
ii. Interactivos
Provee una comunicación en línea entre el usuario y el sistema, donde el usuario da instrucciones al
sistema o a las aplicaciones, y recibe una respuesta a la misma.
v. Distribuidos
Son un conjunto de computadoras independientes (desacopladas en cuanto a hardware, no comparten
memoria ni reloj) comunicadas por una red, que se presentan al usuario en la mayor medida que sea
posible, como un único sistema. Su motivación son compartir recursos (mejorar la utilización) y aumentar
tanto la escalabilidad como la confiabilidad.
8) En el contexto de un sistema operativo diseñado en capas, ¿ Por que el soporte para la memoria
virtual no utiliza las primitivas de sistemas de archivos?
En algún escenario, el uso de las primitivas del filesystem podría implicar un mayor overhead. Si bien
esta razón como tal resulta invalida, ya que la corrección debería ser el hacer eficiente el filesystem.
9) Cual es la diferencia entre un sistema monolítico y uno basado en microkernel. Indique ventajas
y desventajas.
Un sistema monolítico no tiene una estructura bien integrada. Todas las funcionalidades del sistema se
ejecutan en modo monitor. Son difíciles de extender, mantener y depurar.
Los sistemas con microkernel son sistemas estructurados, donde la mayoría de los servicios y funciones
se implementan en módulos, dejándose sólo una pequeña parte del sistema (el microkernel) que ejecute en
modo monitor.
El algoritmo del banquero es aplicable a los sistemas de asignación de recursos con múltiples
instancias de cada tipo de recurso, pero es menos eficiente que el método basado en el grafo de
asignación de recursos.
Cuando entra en el sistema un proceso nuevo, debe declarar el número máximo de instancias de cada
tipo de recurso que puede necesitar. Este número no puede exceder el número total de recursos del
sistema. Cuando un usuario solicita un conjunto de recursos, el sistema debe determinar si la asignación de
dichos recursos dejará al sistema en un estado seguro. En caso afirmativo, los recursos se asignarán; en
caso contrario, el proceso tendrá que esperar hasta que los otros procesos actualmente trabajando en el
sistema liberen los suficientes recursos.
Deben utilizarse varias estructuras de datos para implementar el algoritmo del banquero. Estas
estructuras de datos codifican el estado del sistema de asignación de recursos. Sea n el número de
procesos en el sistema y m el número de tipos de recursos. Necesitamos las siguientes estructuras:
- Available (disponibles): un vector de longitud m que indica el número de recursos disponibles
de cada tipo. Si Available[j] es igual a k, existen k instancias del tipo de recurso Ri.
- Max: Una matriz nxm que indica la demanda máxima de cada proceso. Si Max[I][j] es igual a k,
entonces el proceso Pi puede solicitar como máximo k instancias del tipo de recurso Ri.
- Allocation (asignación): Una matriz nxm que define el número de recursos de cada tipo
actualmente asignados a cada proceso. Si Allocation[I][j] es igual a k, entonces el proceso i
tiene asignadas actualmente k instancias del tipo de recurso Rj.
- Need (necesidad): Una matriz nxm que indica la necesidad restante de recursos de cada
proceso. Si Need[I][j] es igual a k, entonces el proceso Pi puede necesitar k instancias más de
algún tipo de recurso Rj para completar sus tareas. Observar que Need[I][j] = Max[I][j] –
Allocation[I][j].
Estas estructuras de datos varían con el tiempo, tanto en tamaño como en valor.
Como Fin[i] = true para toda i, entonces el sistema esta en estado seguro. La secuencia obtenida es <P0,
P2, P3, P4, P1>
10.ii) Verificamos si el sistema esta en un estado seguro luego de hacer la asignación pedida para
P1, (0,4,2,0). En este caso la situación es:
Trabajo = (1,5,2,0)
Fin = (false, false, false, false, false)
Necesidad = Máximo – Asignado =
ABC D
P0 0 0 0 0
P1 0 7 5 0
P2 1 0 0 2
P3 0 0 2 0
P4 0 6 4 2
Basta repetir el algoritmo anterior, dejando P1 para el final nuevamente. En este caso también se
cumple que Necesidad1 <= Trabajo por lo que llegamos nuevamente a la misma secuencia valida. El
sistema por tanto también esta en estado seguro.
2003 – Agosto
1) Describa los principios y beneficios en que se sustenta la multiprogramación, mencionando que
soporte de hardware requiere.
- Interrupción: No es más que una señal eléctrica que provoca que el contador del programa y el
estado del proceso en ejecución se salven en un lugar seguro de memoria, para, que a
continuación se cargue el contador de programa con una dirección fija de memoria donde reside
un programa del sistema operativo que gestiona la interrupción. Este programa ejecutará cierto
código para indicar al programa que esperaba la finalización de la operación bloqueante. Una
vez que este programa acaba su trabajo, ejecuta una operación de retorno de interrupción, la
cual restaura el contador de programa y el estado del procesador del programa interrumpido,
prosiguiendo así su ejecución sin que éste último sea consciente de que ha sido interrumpido.
- DMA: Cuando un dispositivo realiza una operación de E/S, por ejemplo, la información leída
pasa al buffer del controlador. Después, el programa que inició la lectura ejecuta ciertas
instrucciones para copiar esta información desde el buffer hacia la memoria principa. La copia
se realiza mediante un ciclo, copiando en cada iteración del ciclo un byte o palabra desde el
buffer del controlador a la memoria principal. En un controlador que disponga de DMA (Direct
Memory Access) la copia del buffer a memoria la realiza el propio controlador; para ello, el
programa ha de indicarle al controlador la dirección de memoria de inicio de la copia y el
número de bytes a copiar, esto lo hace en el momento de darle la orden de E/S, poniendo esta
información en algunos registros del controlador. Luego de generada la solicitud y grabados los
datos en los registros de la controladora, el procesador no interviene hasta que dicha operación
es finallizada.
Este metodo sirve especialmente para aquellas situaciones en las que los procesos pueden
clasificarse fácilmente en gurpos diferentes (procesos de primer plano – interactivos o procesos de
segundo plano – por lotes). Estos dos tipos de procesos tienen requisitos diferentes de tiempo de
respuesta y, por tanto, pueden tener distintas necesidades de planificación. Además, los procesos de
primer plano pueden tener prioridad (definida externamente) sobre los procesos de segundo plano.
proceso. Cada cola tiene su propio algoritmo de planificación. Por ejemplo pueden emplearse colas
distintas para los procesos de primer plano y de segundo plano. La cola de primer plano puede
planificarse mediante un algoritmo por turnos, mientras que para la cola de segundo plano puede
emplearse un algoritmo FCFS.
Además, debe definirse una planificación entre las colas, la cual suele implementarse como una
planificaición apropiativa y prioridad fija. Por ejemplo, la cola de procesos de primer plano puede tener
prioridad absoluta sobre la cola de procesos de segundo plano. Otra posibilidad consiste en repartir el
tiempo entre las colas; en este caso, cada cola obtiene una cierta porción de tiempo de CPU, con la que
puede entonces planificar sus distintos procesos.
Hay básicamente tres implementaciones distintas para hilos o threads en un sistema operativo, las
cuales se detallan a continuación:
ejecución de una hebra cada vez. El modelo uno-a-uno permite crear mayor concurrencia, pero
el desarrollador debe tener cuidado de no crear demasiadas hebras dentro de una misma
aplicación. El modelo muchos-a-muchos no sufre ninguno de los inconvenientes de los modelos
anteriores. Los desarrolladores pueden crear tantas hebras de usuario como sean necesarias y
las correspondientes hebras del kernel pueden ejecutarse en paralelo en un multiprocesador.
Asismismo, cuando una hebra realiza una llamada bloqueante al sistema, el kernel puede
planificar otra hebra para su ejecución.
4) En sistemas con hilos implementadas en el núcleo, un proceso multihilado, ¿cuántas pilas debe
tener?
5) Describa los diferentes estados de un proceso, así como las principales colas asociadas al
planificador de los mismos.
6) Detalle y explique el cometido de los principales componentes del bloque descriptor de proceso
(PCB).
2003 – Diciembre
1) Explique muy brevemente las condiciones necesarias para la existencia del bloqueo mutuo
(Deadlock) en sistemas donde exista solo una instancia de cada tipo de recurso ¿Cuales
condiciones debería agregar para que además de necesarias sean suficientes?
- Exclusión mutua: al menos un recurso debe estar en modo no compartido; es decir, sólo un
proceso puede usarlo a la vez. Si otro proceso solicita el recurso, el proceso solicitante tendrá
que esperar hasta que el recurso sea liberado.
- Retención y espera: Un proceso debe estar reteniendo al menos un recurso y esperando para
adquirir otros recursos adicionales que actualmente estén retenidos por otros procesos.
- Espera circular: Debe existir un conjunto {P0, P1, … , Pn} de procesos en espera, tal que Pi
esté esperando por un recurso que tiene asignado Pi+1 y Pn espera por un recurso de P0.
Es importante mencionar que deben darse estas cuatro condiciones para que se produzca un
deadlock. La condición de espera circular implica la condición de retención y espera, por lo que las
cuatro condiciones no son completamente independientes.
Si hay una sola instancia de cada tipo de recurso estas condiciones son necesarias y suficientes.
2) Que puede decir de las siguientes situaciones viendo los estados de las variables durante la
ejecución del algoritmo del banquero. Justifique la respuesta muy brevemente.
Caso1:
Matriz Asignación
210
120
020
Solicitud proceso 2
011
Matriz Disponibilidad:
121
Matriz Máximos:
211
141
040
secundario a menos que éstos se encuentren dentro de un archivo. En general, un archivo es una
secuencia de bits, bytes, líneas o registros cuyo significado está definido por el creador y el usuario del
archivo. Por lo tanto, el concepto de archivo es extremadamente general.
4) Enumere al menos cinco atributos que deban conservarse para describir un archivo.
- Nombre: Por comodidad de sus usuarios humanos, y para referirnos a él utilizamos ese
nombre. Un nombre de archivo, usualmente una cadena de caracteres. Algunos sistemas
diferencian entre letras mayúsculas y minúsculas dentro de los nombres, mientras que otros
sistemas no hacen esa distinción. Cuando se asigna un nombre a un archivo, éste pasa a ser
independiente del proceso, del usuario e incluso del sistema que lo creó. El nombre de archivo
simbólico es la única información que se mantiene en un formato legible por parte de las
personas.
- Identificador: Esta etiqueta unívoca, que usualmente es un número, identifica el archivo dentro
del sistema de archivos; se trata de la versión no legible por las personas del nombre de
archivo.
- Ubicación: Esta información es un puntero a un dispositivo y la ubicación del archivo dentro de
dicho dispositivo.
- Tipo: Esta información es necesaria para los sistemas que sopporten diferentes tipos de
archivo.
- Tamaño: Este atributo expresa el tamaño actual del archivo (en bytes, palabras o bloques) y,
posiblemente, el tamaño máximo permitido.
5) ¿Que es un i-nodo?
Es una estructura de datos propia de los sistemas de archivos tradicionalmente empleados en los
sistemas operativos tipo UNIX como es el caso de Linux. Un inodo continene las características
(permisos, fechas, ubicación, pero NO el nombre) de un archivo regular, directorio, o cualquier otro
objeto que pueda contener el sistema de ficheros.
El término “I-nodo” refiere generalmente a inodos en discos que almacenan archivos regulares,
directorios y enlaces simbólicos. El concepto es particularmente importante para la recuperación de los
sistemas de archivos dañados.
Cada inodo queda identificado por un número entero, único dentro del sistema de archivo, y los
directorios recogen una lista de parejas formadas por un número de inodo y nombre identificativo que
permite acceder al archivo en cuestión: cada archivo tiene un único inodo, pero puede tener más de un
nombre en distintos o incluso el mismo directorio para facilitar su localización.
Un planificador apropiativo (preemptive) es aquel que en caso que llegue a la cola de procesos
listos un proceso con mayor prioridad del que estamos ejecutando en la CPU, el proceso en ejecución
será desplazado y vuelto a la cola de procesos listos, tomando el lugar el proceso recién llegado con
mayor prioridad. También se utiliza en los casos que la CPU se asigna a lo sumo x unidades de tiempo
a cada proceso en ejecución, como puede ser un planificador Round Robin.
7) Para el diseño de un sistema operativo, señale virtudes y defectos comparando una solución
monolítica con una basada en un micro núcleo.
Una solución monolítica de un sistema operativo tiene la ventaja de que reduce el overhead de cada
llamada al sistema a su mínima expresion, ya que todas las funciones del mismo se encuentran a un
único nivel. Por otra parte, tiene la gran desventaja del alto grado de complejidad al momento de realizar
cualquier expansión al mismo o mantenimiento correctivo/perfectivo.
Por otra parte, las ventajas de un sistema basado en micronúcleo, son que al ser un núcleo
pequeño, solamente provee las funcionalidades básicas para el manejo de procesos, memoria,
comunicación entre procesos, el resto de las funcionalidades se ejecutan por fuera de este núcleo en
espacio de usuario.
Otra ventaja importante es la facilidad para amplliar el sistema operativo ya que todos los servicios
nuevos se añaden al espacio de usuario y, en consecuencia, no requieren que se modifique el kernel.
Este sistema operativo resultante, es más fácil de portar de un sistema (diseño) de hardware a otro.
El microkernel también proporciona más seguridad y fiabilidad, dado que la mayor parte de los
sservicios se ejecutan como procesos de usuario, en lugar de como procesos del kernel. Si un servicio
falla, el resto del sistema operativo no se ve afectado.
Lamentablemente, los microkernels pueden tener un rendimiento peor que otras soluciones, debido
a la carga de procesamiento adicional impuesta por las funciones del sistema.
2004 – Febrero
1) ¿Qué permite la memoria virtual?
Respuesta 1
Es una técnica que permite que la ejecución de un proceso aunque este no este completamente
cargado en memoria. Esto hace que los procesos puedan ser más grandes que la memoria física (o real) del
equipo.
Respuesta 2
La memoria virtual incluye la separación de la memoria lógica, tal como la percibe el usuario, con
respecto a la memoria física. Esta separación permite proporcionar a los programadores una memoria
virtual extremadamente grande, cuando solo está disponible una memoria física de menor tamaño.
Facilita enormemente la tarea de programación, porque el programador ya no tiene que preocuparse de
la cantidad de memoria física disponible; en lugar de ello, puede concentrarse en el problema que deba
resolver mediante su programa.
También permite compartir las bibliotecas del sistema entre numerosos procesos, mapeando el objeto
compartido sobre un espacio de direcciones virtual. Aunque cada proceso considera que las bibliotecas
compartidas forman parte de su propio espacio de direcciones virtuales, las páginas reales de memoria
física en las que residen las bibliotecas compartidas, estarán compartidas por todos los procesos.
Normalmente las bibliotecas se mapean en modo solo lectura dentro del espacio de cada proceso con el
cual se monten.
De forma similar, la memoria virtual permite a los procesos compartir memoria. La memoria virtual
permite que un proceso cree una región de memoria y que la pueda compartir con otro proceso. Los
procesos que compartan esta región la considerarán parte de su espacio de direcciones virtual, aunque en
realidad las páginas físicas reales de la memoria estarán compartidas entre los distintos procesos.
También permite que se compartan páginas durante la creación de procesos mediante la llamada al
sistema fork(), acelerando así la tarea de creación de procesos.
b- Si no existe un marco libre, entonces usar el algoritmo de remplazo de página del sistema para
seleccionar a la víctima.
c- Escribir en disco la página victima y actualizar la tabla de paginación.
iii. Leer la página de fallo desde el disco y ponerla en el marco obtenido en el punto (b). Actualizar la
tabla de paginación.
iv. Volver al proceso del usuario.
i. FIFO
ii. Óptimo
iii. LRU
FIFO
Se reemplaza la página que hace más tiempo esta cargada en memoria principal.
Óptimo
Reemplazar la página que no será usada por el mayor período de tiempo. Para este algoritmo es
necesario tener información de los pedidos de página futuros.
LRU
Reemplazar la página que hace más tiempo que no es accedida. (Least recently used)
4) Para cada uno de ellos muestre la secuencia de reemplazo para los siguientes pedidos de
página:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
Asumiendo que el tamaño de la memoria principal es de 3 páginas.
En todos los casos las primeras tres páginas entran a la memoria sin reemplazos. Los reemplazos
se muestran en notación (página original, reemplazo).
FIFO: (7,2) (0,3) (1,0) (2,4) (3,2) (0,3) (4,0) (2,1) (3,2) (0,7) (1,0) (2,1)
LRU: (7,2) (1,3) (2,4) (3,2) (0,3) (4,0) (0,1) (3,0) (2,7)
5) Describa lo que es una dirección virtual (logical address) y una dirección real (physical address)
La vinculación de direcciones en la compilación o carga da pie a que las direcciones lógicas concidan
con las físicas. En cambio durante la ejecución, las direcciones difieren. En este caso, la dirección lógica es
conocida como “dirección virtual”.
6) ¿En qué consiste el modelo de paginación simple (de un nivel)? Muestre cómo las direcciones
virtuales se mapean a direcciones reales. Mencione todos los elementos involucrados.
Paginación simple:
La memoria real es dividida en bloques (frames) de tamaño fijo. La memoria virtual es también
divida en bloques del mismo tamaño que son llamados páginas.
Un ejemplo de un proceso:
Se tiene un segmento para las variables globales, otro para el stack, otro para el código del
programa, otro para cada variable local de los procedimientos y funciones.
Por un lado se verifica que: d < límite, sino es así entonces se produce un trap de error. Por otro
lado se hace la suma: base + d para obtener la dirección real
+------------------------+
| base + d | Dirección real
+------------------------+
Se presentan 4 algoritmos :
i. First-Come, First-Served
Primero en llegar a la ready-queue, primero en asignarle la CPU.
Es el algoritmo más simple de planificación de la CPU. Con este esquema se asigna primero la CPU
al proceso que primero lo solicite. La implementación de la política FCFS se gestiona fácilmente con
una cola FIFO. Cuando un proceso entra en la cola de procesos listos, su PCB se coloca al final de la
cola. Cuando la CPU queda libre, se asigna al proceso que esté al principio de la cola y ese proceso
que pasa a ejecutarse se elimina de la cola.
Sin embargo, el tiempo medio de espera con este algoritmo es a menudo bastante largo.
Este algoritmo de planificación es cooperativo. Una vez que la CPU ha sido asignada a un proceso,
dicho proceso la conserva hasta que la libera, bien porque termina su ejecución o porque realiza una
solicitud de E/S. El algoritmo FCFS resulta, por tanto, especialmente problemático en los sistemas de
tiempo compartido, donde es importante que cada usuario obtenga una cuota de la CPU a intervalos
regulares. Sería desastroso permitir que un proceso mantuviera la CPU durante un largo período de
tiempo.
iii. Priority
A los procesos se les asigna una prioridad (p.ej: un numero natural). Se define una relación de
orden de estas prioridades y según ella los procesos que tengan mayor prioridad tendrán acceso al
CPU antes.
El algoritmo SJF es un caso especial del algoritmo de planificación por prioridades general. A cada
proceso se le asocia una prioridad y la CPU se asigna al proceso que tenga la prioridad más alta. Los
procesos con la misma prioridad se planifican en orden FCFS. Generalmente las prioridades se indican
mediante un rango de números fijo, como por ejemplo de 0 a 7 o de 0 a 4095. Sin embargo, no existe
un acuerdo general sobre si 0 es la prioridad más alta o más baja.
Las prioridades pueden definirse interna o externamente. Las prioridades internamente utilizan
algún vlaor mesurable para calcular la prioridad de un proceso, por ejemplo la relación entre la ráfaga
de E/S promedio y la ráfaga de CPU promedio. Las prioridades definidas externamente se establecen
en función a criterios externos al sistema operativo, como por ejemplo la importancia del proceso, el
coste monetario de uso de la computadora, etc.
Este tipo de planificación puede ser apropiativa o cooperativa. Cuando un proceso llega a la cola de
procesos listos, su prioridad se compara con la prioridad del proceso actualemnte en ejecución; un
algoritmo de planificación por prioridades apropiativo, expulsará de la CPU al proceso actual si la
prioridad del proceso que acaba de llegar el mayor. Un algoritmo de planificación por prioridades
cooperativo simplemente pondrá el nuevo proceso al principio de la cola de procesos listos.
Un problema importante de los algoritmos de planificación por prioridades es el bloqueo indefinido o
muerte por inanición. Un proceso que está preparado para ejecutarse pero está esperando a acceder a
la CPU puede considerarse bloqueado; un algoritmo de planificación por prioridades puede dejar a
alagunos procesos de baja prioridad esperando indefinidamente. En un sistema informático con una
carga de trabajo grande, un flujo estable de procesos de alta prioridad puede impedir que un proceso
de baja prioridad llegue a la CPU. Generalmente ocurrirá una de dos cosas: o bien el proceso se
ejecutará finalmente (algún día…) o bien el sistema informático terminará fallando y se perderán todos
los procesos con baja prioridad no terminados.
Una solución para el problema de bloqueo indefinido de procesos con baja prioridad consiste en
aplicar mecanismos de envejecimiento. Esta técnica consiste en aumentar gradualmente la prioridad de
los procesos que estén esperando en el sistema durante mucho tiempo.
9) Muestre a través de un diagrama de Gantt como sería la ejecución para el siguiente ejemplo:
i. First-Come, First-Served
P3 P4 P2 P1
|--|----|-----|----------|
iii. Priority
iv. Round-Robin
Asumiendo un quantum de tiempo igual a 4 y tomando los procesos en el orden P1, P2, P3 y P4
P1 P2 P3 P4 P1 P2 P1
|----|----|--|----|----|-|--|
2004 – Marzo
1) Clasificación de Sistemas Operativos
El multiprocesador asimétrico es más simple ya que hay una gerarquía de procesadores, todas las
decisiones sobre la planificación, el procesamiento de E/S y otras actividades del sistema sean
gestionadas por un mismo procesador, el servidor maestro. Los demás procesadores sólo ejecutan
código de usuario. Este multiprocesamiento asimétrico resulta simple, porque sólo hay un porcesador
que accede a las estructuras de datos del sistema, reduciendo la necesidad de compartir datos.
Por otra parte, el sistema de procesamiento simétrico, cada uno de los procesadores se auto-
planifica. Todos los procesos pueden estar en una cola común de procesos listos, o cada procesador
puede tener su propia cola privada de procesos listos. Independientemente de esto, la planificación se
lleva a cabo haciendo que el planificador de cada procesador examine la cola de procesos listos y
seleccione un proceso para ejecutarlo. Si tenemos varios procesadores intentando acceder a una
estructura de datos común para actualizarla, el planificador tiene que programarse cuidadosamente:
tenemos que asegurar que dos procesadores no elegirán el mismo proceso y que no se perderán
procesos de la cola.
b- Describa brevemente: sistemas batch, sistemas de tiempo compartido, sistemas de tiempo real y
sistemas distribuidos.
- Sistemas de tiempo compartido: Los sistemas por lotes tienen problemas desde el punto de
vista del usuario, puesto que éste no puede interactuar con el trabajo durante su ejecución, y
debe preparar las tarjetas para todos los resultados posibles, ya que en un trabajo de varios
pasos, algunos pasos pueden depender del éxito de los anteriores.
En un sistema multitarea o interactivo, se ejecutan múltiples trabajos mientras la CPU conmuta
entre ellos, pero la conmutación es tan frecuente que los usuarios pueden interactuar con cada
programa durante su ejecución. El usuario da instrucciones al SO o programa y recibe una
respuesta inmediata.
En estos sistemas de tiempo compartido, cada usuario tiene por lo menos un programa
individual en la memoria (conocido como proceso). La E/S interactiva se efectúa a un ritmo
humano, limitadas por la velocidad de respuesta del usuario, la cual es lenta para la CPU.
Mientras la CPU está ociosa por esta causa, el SO conmuta la CPU a otro usuario.
Los usuarios comparten la CPU simultáneamente, y como el computador cambia con rapidez de
un usuario al siguiente, cada uno recibe la impresión de que tiene su propio computador.
Al igual que en la multiprogramación, se necesita mantener varios trabajos simultáneamente en
la memoria, por lo que requiere gestión y protección de memoria. El disco funciona como
memoria virtual, permitiendo ejecutar trabajos que no caben en la memoria principal.
- Sistemas de tiempo real: Se utiliza cuando los requisitos de tiempo para una operación son
estrictor, tiene restricciones de tiempo bien definidas.
Hay dos tipos:
- Tiempo real duro: Las tareas críticas deben terminar a tiempo. Todos los retardos del
sistema están limitados, por lo tanto los datos se deben guardar en memoria rápida como
ROM, además carecen de la mayor parte de las funciones avanzadas de los sistemas
operativos, como por ejemplo: memoria virtual.
- Tiempo real blando: Una tarea crítica tiene prioridad respecto a otras, y se deben evitar los
retardos, pero no apoyan el cumplimiento estricto de plazos.
- Sistemas distribuídos: Son aquellos sistemas que distribuyen el cómputo entre varios
procesadores, que no comparten ni la memoria, ni el reloj. Cada procesador tiene su memoria
local y se comunican entre si por buses. Son sistemas que están débilmente acoplados. Los
procesadores pueden tener diferentes tamaños y funciones.
Las principales ventajas de estos sistemas son:
- Recursos compartidos: Un usuario de un sitio, puede aprovechar los recursos disponibles
de otro. Hay mecanismos para compartir archivos en sitios remotos.
- Computación más rápida: Divide los cálculos en subcálculos y los distribuye netre los
sitios para procesar concurrentemente (llamado carga compartida).
- Confiabilidad: si un sitio falla, los demás pueden seguir funcionando.
- Comunicación: Los usuarios pueden transferir archivos o comunicarse entre sí por correo
electrónico, y los programas pueden intercambiar datos con otros programas del mismo
sistema.
2) Concurrencia
a- Mencione los tres requisitos que debe cumplir una solución al problema de la sección crítica.
La idea de la sección crítica es que mientras un proceso se está ejecutando en sección crítica,
nungún otro puede estar en otra sección crítica; solo ejecutando otras secciones. Así, la ejecución de
secciones críticas es mutuamente exclusiva. Cada proceso debe solicitar permiso para ingresar en su
sección crítica y debe indicar cuando salió de ella.
Hay 4 requisitos:
- Mutua exclusión: Si el proceso Pi se ejecuta en su sección crítica, ningún otro proceso puede
estarse ejecutando en su sección crítica.
- Espera limitada: Hay un límite, para el número de veces que se permite a otros procesos
entrar en sus secciones críticas, luego de que un proceso pidió autorización para ingreso. No se
permite la posposición indefinida.
- Progreso: Se deben cumplir las siguientes condiciones:
i. No alternación: No puedo obligar a que se ejecuten, primero uno, luego el otro, vuelvo
al primero, etc.
ii. Sin puntos muertos (deadlocks): A espera a B y B espera a A, y todos los demás
están bloqueados simultáneamente.
b- En el contexto de monitores, cuando un proceso ejecuta un signal sobre una condición, y hay un
proceso esperándola, ¿qué debe resolverse y qué políticas pueden tomarse para ello?
c- ¿Cuándo puede decirse que las condiciones necesarias de deadlock también son suficientes?
3) Memoria
- Segmentación: Un aspecto importante de la gestión de memoria que se volvió inevitable con los
mecanismos de paginación es la separación existente entre la vista que el usuario tiene de la
memoria y la memoria física real.
La segmentación es un esquema de gestión de memoria que soporta la visión del usuario de la
misma. Un espacio lógico de direcciones es una colección de segmentos y cada segmento tiene un
nombre y una longitud. Las direcciones especifican tanto el nombre del segmento como el
desplanzamiento dentro del mismo. El usuario especifica, por tanto, cada dirección proporcionando
dos valores: un nombre de segmento y un desplazamiento dentro del mismo.
- Reduce la fragmentación interna ya que los segmentos tienen el tamaño que necesitan.
c- Dado el algoritmo de reemplazo de páginas FIFO, diga qué sucede al incrementarse el número de
marcos asignados.
Al aumentar la cantidad de marcos asignados, hacemos que las páginas permanezcan más tiempo
cargadas en memoria.
En algunos casos, al aumentar el número de marcos asignados a un proceso, puede darse la
anomalía de Belady: para algunos algoritmos de sustitución de páginas, la tasa de fallos de página
puede incrementarse a medida que se incrementa el número de marcos asignados.
d- Defina algoritmos de pila para reemplazo de páginas. Mencione un algoritmo de pila dado en el
curso.
Un algoritmo de pila es aquel para el cual se puede demossstrar que el conjunto de páginas en
memoria para n marcos es siempre un subconjunto de las páginas que estarían en memoria con n+1
marcos. No sufren la anomalía de Belady.
- Óptimo
- LRU
e- ¿Cuál es la ventaja de los algoritmos de pila?
f- En un sistema de paginación por demanda, si el hardware lo permite ¿qué utilidad tiene el bit
sucio (dirty bit)?
Sirve para ayudar a la política de reemplazo de páginas, este bit sucio, se encientde si se ha escrito
alguna palabra o byte en la página que queremos reemplazar (lo cual indica que la misma fue
modificada). Esto sirve para evitar la escritura a disco de la página víctima si la misma no ha sido
modificada.
g- Explique qué desventaja particular tienen los hilos implementados a nivel de usuario (sin
soporte del núcleo) en un sistema de memoria virtual con paginación por demanda.
El algoritmo SCAN presenta la desventaja de que cuando invierte el recorrido de la aguja, en las
primeras zonas que recorre la densidad de solicitudes es muy baja, ya que hace poco que pasó por ahí.
Esto genera un tiempo de espera no muy uniforme.
Alternativas:
- C-SCAN: (ver detalles en Marzo 2003). Este método da un tiempo de espera más uniforme.
- LOOK: La implementación de LOOK es similar a la implementación de SCAN, la aguja del disco
recorre de arriba a abajo el mismo cumpliendo solicitudes a medida que avanza, pero en vez de
invertir el camino cuanod llega al final, lo hace cuando llega a la última solicitud que le queda
por cumplir en ese sentido.
- C-LOOK: Es una mezcla entre el C-SCAN y el LOOK, realiza la recorrida del disco en un
sentido cumpliendo los pedidos a su paso y cuando llega al final de dicha lista, no hay mas
pedidos que cumplir para ese lado, vuelve al comienzo sin responder solicitudes y comienza
nuevamente.
- Vector de Bits: Cada bloque se representa con un bit. Si el bloque está libre, el bit es 1; si por
el contrario está asignado, el bit es 0. Resulta relativamente sencillo y eficiente encontrar el
primer bloque libre, o n bloques libres consecutivos en el disco, pero son ineficientes si el vector
entero no se mantiene en memoria principal, y esto solo esposible si el disco no es demasiado
grande.
- Lista Enlazada: Se enlazan entre sí los bloques de disco libres, manteniendo un puntero al
primer bloque libre en un posición especial del disco y colocándolo en el cache de la memoria.
Este esquema no es suficiente ya que para recorrer la lista necesitaríamos leer cada bloque,
ocupando una cantidad sustancial de tiempo de E/S, aunque no necesita hacerlo
frecuentemente.
- Conteo: Aprovechando el hecho de que al liberar un bloque, también libero los contiguos. En
lugar de mantener una lista de direcciones de bloques libres, mantenemos la dirección del
primer bloque libre y el número de n bloques libres contiguos que siguen al primero.
d- ¿Qué inconveniente tienen los sistemas que apoyan distintos tipos de archivos en forma nativa?
Los principales inconvenientes de los sistemas operativos que apoyan distintos tipos de archivo de
forma nativa son los siguientes:
- El tamaño resultante del sistema operativo es excesivo ya que necesita contener el código para
soportar cada una de las estructuras de archivo.
- Cuando una aplicación nueva requiera información estructurada en alguna forma que no esté
soportada por el sistema operativo, pueden aparecer grandes problemas.
2004 – Julio
1) A continuación se propone una solución al problema de la sección crítica para dos procesos i y j
que ejecutan en un único procesador. Las instrucciones son atómicas.
Proceso I Proceso j
while (true) do begin while (true) do begin
flagi := true; flagj := true;
while ( flagj ) do begin while ( flagi ) do begin
flagi := false; flagj := false;
while ( flagj ) do no-op; while ( flagi ) do no-op;
flagi := true; flagj := true;
end; end;
Sección Crítica Sección Crítica
Flagi := false; Flagj := false;
Sección no crítica Sección no crítica
End; end;
Determine si es correcta. Justifique brevemente.
No parece, es parecido a la implementación del algoritmo de Dekker pero le falta la variable turno.
Por lo que al parecer que no anda. Puede sufrir de posposición indefinida
2) Un sistema que implementa memoria virtual con paginación utiliza el algoritmo FIFO para la
sustitución de páginas.
Un proceso genera la siguiente secuencia de referencias a páginas de memoria: 1 2 3 4 5 3 4 1 6 7 8 9
78965
El algoritmo FIFO básicamente reemplaza la página más vieja que se tenga en memoria.
Para 4 marcos tendremos la siguiente secuencia:
Los números de marcos se encuentran en la primer fila y la página más antigua se encuentra en negrita
y la página que será desplazada en el siguiente page fault está en rojo en la fila anterior
Página a
ingresar / Marco Marco Marco Marco
marco 1 2 3 4
destino
1 1
2 1 2
3 1 2 3
4 1 2 3 4
5 5 2 3 4
3 5 2 3 4
4 5 2 3 4
1 5 1 3 4
6 5 1 6 4
7 5 1 6 7
8 8 1 6 7
9 8 9 6 7
7 8 9 6 7
8 8 9 6 7
9 8 9 6 7
6 8 9 6 7
5 8 9 5 7
No, la tasa de fallos de página no mejorará ya que las páginas 1-4 luego que son reemplazadas, por
las otras no vuelven a ser utilzadas, pero en caso de agregar mas marcos, lo que estaremos evitando
será la escritura a disco de las páginas que estamos reemplazando (en caso que hayan sido
modificadas)
Memoria paginada.
10 páginas
1024 palabras por página
2 bytes por palabra
De las 1024 palabras obtengo 10 bits para el desplazamiento = 2^10. (Asumiendo que la palabra es la
medida mínima, de lo contrario serían 11 bits)
Hay 10 páginas => preciso 4 bits para direccionarlo de marco.
Por lo tanto, la cantidad de bits que componen una dirección virtual es de 14 bits.
Dado que hay 32 marcos, que van de 0 a 31, precisamos 5 bits para direccionarlos.
De (a) sabemos que las páginas son de 10 bits.
Por lo tanto, una dirección física está compuesta por 15bits, 5 para indicar el marco y 10 para el
desplazamiento dentro de éste, asumiendo lo mismo que en (a), que la palabra es la medida mínima.
En todos aquellos en que nuestro programa tenga que realizar un conjunto de tareas
“independientes” entre sí, ya que si se van haciendo de manera secuencial, únicamente estaríamos
usando uno de los procesadores del sistema (en caso que tenga más de uno). Además, los hilos o
threads son básicamente entidades cooperativas y comparten mucha información entre sí. Por ejemplo
son utilizadas en programas de procesamiento de imágenes. Una utilización más intuitiva, es por
ejemplo el calcular el determinante de una matriz nxn, si lo hacemos iterativo, elemento por elemento,
en caso de contar con más de un procesador disponible, no lo aprovecharemos; pero en cambio,
podemos, al calcular el determinante por una columna, hacer un thread por cada fila y que calcule ese
valor, luego de que todos hayan terminado, realizamos los últimos cálculos y damos el resultado. Esto
es posible ya que los threads trabajarán cooperativamente, sin pisarse los valores entre ellos, ni
modificarán los valores que toman como entradas.
- Bus: El bus es un sistema digital que transfiere datos entre los componentes de una
computadora o entre computadoras. Está formado por cables o pistas en un circuito impreso.
Su función es permitir la conexión lógica entre distintos subsistemas de un sistema digital,
enviando datos entre dispositivos de distintos ordenes. La mayoría de los buses están basados
en conductores metálicos por los cuales se transmiten señales eléctricas que son enviadas y
recibidas con la ayuda de integrados que poseen una interfaz del bus dado y se encargan de
manejar las señales y entregarlas como datos útiles.
- Dispositivo objetivo de E/S: Es el dispositivo del cual necesitamos obtener cierta información
o guardar datos en él.
- Posesión de algo: El usuario debe tener algo particular que lo identifique como quien es, una
clave o tarjeta por ejemplo.
- Conocimiento de algo: Saber alguna información particular que solamente el sepa, la dupla
(usuario,contraseña) por ejemplo.
- Atributo del usuario: Algo particular del usuario como puede ser la huella digital, patrón de
retina o firma.
2004 – Diciembre
1) ¿Qué se logra en los sistemas multiprogramados? Justifique.
El bit de modo permite tener dos modos de ejecución, modo usuario y modo supervisor o monitor
(de acceso a instrucciones privilegiadas).
Ver exámen Marzo 2003. Pregunta 8.
Existe un timer que interrumpe al computador después de un período determinado, y cede el control
al sistema operativo, que puede cerrar el programa o cederle más tiempo. Las intrucciones que
modifican el funcionamiento del times, son privilegiadas.
- Interfaz de usuario: Casi todos los sistemas operativos disponen de una interfaz de usuarios,
que puede tomar diferentes formas. Uno de los tipos existentes es la interfaz de línea de
comandos, que usa comandos de texto y algún tipo de método para introducirlos, es decir, un
programa que permite introducir y editar los comandos. Otro tipo destacable es la interfaz de
proceso por lotes, en la que los comandos y las directivas para controlar se introducen en
archivos, y luego dichos archivos se ejecutan. Habitualmente, se utiliza una interfaz gráfica de
usuario; en este caso, la interfaz es un sistema de ventanas, con un dispositivo señalador para
dirigir la E/S, para elegir opciones en los menús y para realizar otras selecciones, y con un
teclado para introducir texto. Algunos sistemas proporcionan dos o tres de estas variantes.
- Manipulación del sistema de archivos: el sistema de archivos tiene una importancia especial.
Obviamente, los programas necesitan leer y escribir en archivos y directorios. También
necesitan crearlos y borrarlos usando su nombre, realizar búsquedas en un determinado
archivo o presentar la información contenida en un archivo. Por último, algunos programas
incluyen mecanismos de gestión de permisos para conceder o denegar el acceso a los archivos
o directorios basándose en quién sea el propietario de dicho archivo.
Hay disponible otro conjunto de funciones del sistema operativo que no están pensadas para ayudar
al usuario, sino para garantizar la eficiencia del propio sistema. Los sistemas con múltiples usuarios
pueden ser más eficientes cuando se comparten los recursos del equipo entre los distintos usuarios:
- Asignación de recursos: Cuando hay varios usuarios, o hay varios trabajos ejecutándose al
mismo tiempo, deben asignarse a cada uno de ellos los recursos necesarios. El sistema
operativo gestiona muchos tipos diferentes de recursos; algunos (como los ciclos de CPU, la
memoria principal y el espacio de almacenamiento de archivos) pueden disponer de código
software especial que gestione su asignación, mientras que otros (como los dispositivos de E/S)
pueden tener código que gestione de forma mucho más general su solicitud y liberación. Por
ejemplo, para poder determinar cuál es el mejor modo de usar la CPU, el sistema operativo
dispone de rutinas de planificación de la CPU que tienen en cuenta la velocidad del procesador,
los trabajos que tienen que ejecutarse, el número de registros disponibles y otros factores.
También puede haber rutinas para asignar impresoras, modems, unidades de almacenamiento
USB y otros dispositivos periféricos.
Las llamadas al sistema proporcionan una interfaz con la que poder invocar los servicios que el
sistema operativo ofrece. Estas llamadas, generalmente están disponibles como rutinas escritas en C y
C++, aunque determinadas tareas de bajo nivel, como por ejemplo aquellas en las que se tiene que
acceder directamente al hardware, pueden necesitar escribirse con instrucciones de lenguaje
ensamblador.
7) Describa las 4 (cuatro) condiciones necesarias que un sistema operativo debe garantizar para
prevenirse de que ocurra deadlock.
Se accede al segmento 10, con un desplazamiento de 1324 posiciones dentro de dicho segmento.
El acceso por número de segmento es correcto ya que tenemos un segmento con número 10.
Chequeamos que el desplazamiento dentro del mismo esté dentro del rango: 32122 – 1112 = 31010.
Este valor, 31010 corresponde a la cantidad de posiciones (bytes) del segmento, por lo que 1324 <
31010, por lo que el acceso a memoria es válido.
9) Describa 3 (tres) métodos utilizados para tener cuenta que bloques de discos están libres.
10) ¿Que ventaja se tiene en un sistema que utiliza DMA (Direct Memory Access)?
Explique los pasos que son llevados a cabo para la transferencia.
Par aun dispositivo que realice transferencias de gran tamaño, como por ejemplo una unidad de disco,
parece bastante poco apropiado utilizar un procesador (caro) de propósito general para comprobar dicho
estado y para escribir datos en un registro de una controladora de byte en byte, lo cual es un proceso que
se denomina E/S programada. La mayoría de las computadoras evitan sobrecargar a la CPU principal con
las tareas de PIO, descargando parte de este trabajo en un procesador de propósito especia denominado
controladora de acceso directo a memoria (DMA).
Para iniciar una transferencia de DMA, el host escribe un bloque de comando DMA en la memoria. Este
bloque contiene un puntero al origen de una transferencia, un puntero al destino de la transferencia y un
contador de númer de bytes que hay que transferir. La CPU escribe la dirección de este bloque de
comandos en la controladora DMA y luego continúa realizando otras tareas. La controladora DMA se
encarga entonces de operar el bus de memoria directamente, colocando direcciones en el bus para realizar
las transferencias sin ayuda de la CPU principal. En las computadoras de tipo PC, uno de los componentes
estándar es una controladora DMA simple, y las tareas de E/S con control maestro del bus para PC
suelen contener su propio hardware DMA de alta velocidad.
El Discretionary Access Control es un tipo de sistema de control basado en la identidad del sujeto
y/o grupo al que pertenece. Los controles son discretos en el mismo sentido que el usuario. Sin
embargo, el significado del término en la práctica no es tan claro como en la definición del standard
TCSEC.
Una lista de control de acceso (ACL) es un concepto de seguridad informática usado para fomentar
la separación de privilegios. Es una forma de determinar los permisos de acceso apropiados a un
determinado objeto, dependiendo de ciertos aspectos del proceso que hace el pedido.
Las ACLs permiten controlar el flujo de tráfico en equipo de redes, tales como routers y switches. Su
principal objetivo es filtrar tráfico, permitiendo o denegando el tráfico de red de acuerdo a alguna
condición. Si embargo, también tiene usos adicionales, como por ejemplo, distinguir “tráfico interesante”
(tráfico suficientemente importante como para activar o mantener una conexión) en ISDN (red digital de
servicios integrados).
2005 – Febrero
1) Enumere y explique cuales son los tres requisitos que debe cumplir una solución al problema de
la sección crítica.
Aunque el usuario puede hacer referencia a los objetos del programa utilizando una dirección
bidimensional, la memoria física real continúa siendo, por supuesto, una secuencia unidimensional de
bytes. Por tanto, debemos definir una implementación para mapear las direcciones bidimensionales
definidas por el usuario sobre las direcciones físicas unidimensionales. Este mapeo se lleva a cabo
mediante la tabla de segmentos. Cada entrada de la tabla de segmentos tiene una dirección base del
segmento y un límite del segmento. La
dirección base del segmento contiene la
dirección física inicial del lugar donde el
segmento reside dentro de la memoria,
mientras que el límite del segmento
especifica la longitud del mismo.
- Planificación a mediano plazo: La idea clave subyacente para introducir este tipo de
planificador es que en ocasiones, puede ser ventajoso eliminar procesos de la memoria (con lo
que dejan de luchar por el CPU) y reducir así el grado de multiprogramación. Después, el
proceso puede volver a cargarse en memoria, continuando su ejecución en el punto en que fue
interrumpido. Este esquema se denomina intercambio ya que el planificador descarga y luego
vuelve a cargar el proceso. Generalmente presente en los sistemas de tiempo compartido y su
invocación no es tan frecuente como el planificador de corto plazo.
5) Describa brevemente los pasos para el manejo de un fallo de páginas (una vez que se determinó
que este ocurrió) en un modelo de paginación por demanda.
6) Describa brevemente los algoritmos de reemplazo de página siguientes: FIFO, Óptimo y LRU.
10) Utilizando el algoritmo del banquero, y dada la siguiente situación de procesos y recursos
Aplilcando el algoritmo del banquero tenemos que realizar los siguientes cálculos:
Obtener las necesidades de cada proceso, haciendo Máximo – Asignación para cada recurso, lo que
llamaremos necesidad:
A B C D
P0 0-0 = 0 0-0 = 0 1-1 = 0 2-2 = 0
P1 1-1 = 0 7-0 = 7 5-0 = 5 0-0 = 0
P2 2-1 = 1 3-3 = 0 5-4 = 1 6-2 = 4
P3 0-0 = 0 6-6 = 0 5-3 = 2 2-2 = 0
P4 0-0 = 0 6-0 = 6 5-1 = 4 6-4 = 2
A B C D
P0 0 0 0 0
P1 0 7 5 0
P2 1 0 1 4
P3 0 0 2 0
P4 0 6 4 2
Creo el vector Trabajo con las unidades disponibles de cada recurso T: (1, 5, 2, 0)
Y el vector Fin con (False, False, False, False, False), que corresponde a si terminamos un proceso.
Iniciamos el algoritmo buscando una secuencia que muestre si el sistema está en estado seguro o no.
Eligiendo de a uno los procesos, y si hay recursos suficientes, lo ponemos como finalizado y liberamos
todos los recursos.
Paso 1.
Tomo P0, Necesidad (0, 0, 0, 0)
Trabajo (1, 5, 2, 0)
Necesidad < Trabajo, para todos los recursos, entonces ejecuto y actualizo los vectores.
Paso 2.
Tomo P2, Necesidad (1, 0, 1, 1)
Trabajo (1, 5, 3, 2)
Necesidad < Trabajo, para todos los recursos, entonces ejecuto y actualizo los vectores.
Paso 3.
Tomo P1, Necesidad (0, 7, 5, 0)
Trabajo (2, 8, 7, 7)
Necesidad < Trabajo, para todos los recursos, entonces ejecuto y actualizo los vectores.
Paso 4.
Tomo P3, Necesidad (0, 0, 2, 0)
Trabajo (3, 8, 7, 7)
Necesidad < Trabajo, para todos los recursos, entonces ejecuto y actualizo los vectores.
Paso 5.
Tomo P4, Necesidad (0, 6, 4, 2)
Trabajo (3, 14, 10, 9)
Necesidad < Trabajo, para todos los recursos, entonces ejecuto y actualizo los vectores.
Hay una secuencia en la cual podemos completar todos los procesos con los recursos disponibles, por
lo que podemos concluir que el sistema se encuentra en un estado seguro.
Por lo tanto, la solicitud de P2 no puede ser satisfecha ya que sobrepasa el máximo permitido para P2,
aunque si el máximo fuese superior, la misma podría ser satisfecha inmediatamente.
12) Explique porqué debe protegerse el vector de interrupciones y las rutinas de procesamiento de
las interrupciones. ¿Cómo se logra esta protección mediante hardware?
Las rutinas de procesamiento de interrupciones deben ser protegidas ya que al igual que el vector
de interrupciones, proveen un servicio el cual debe ser provisto de la misma forma para todos los
usuarios (y el sistema) y si sucediera, al igual que con el vector, que un programa mal intencionado las
modificara, podría a llevar al sistema operativo a realizar acciones no deseadas (virus por ejemplo).
La protección mediante hardware se logra con el bit de modo, este bit distingue entre modo usuario
(programas de usuario) y modo monitor o supervisor (reservado para la ejecución de rutinas del sistema
operativo). Cuando un programa de usuario se está ejecutando, se realiza en modo usuario, pero si
necesita tener acceso a una operación restringida (lectura de un archivo p. ej.). En modo monitor, todas
las operaciones de hardware están disponibles y el sistema operativo es el único que las ejecuta. La
ejecución de instrucciones privilegiadas en el modo monitor garantiza que los procesos a nivel de
usuario no accedan directamente a dispositivos de E/S.
13) Mencione el principal problema que debe enfrentar un sistema operativo si ejecuta sobre un
equipo multiprocesador, con una única memoria común.
14) Describa brevemente dos limitaciones de los hilos a nivel de usuario sin soporte del núcleo.
15) ¿Cuál es la principal diferencia que hay entre implementar un servicio de comunicación de
mensajes entre procesos de un mismo computador, respecto a hacerlo entre hilos de un mismo
proceso?
La principal diferencia reside en la forma de comunicación entre los hilos o procesos, ya que para
los procesos, es necesario definir una zona de memoria la cual será compartida por los procesos para
comunicarse entre sí, pero con los hilos, esta necesidad de declarar cierta zona de memoria compartida
no es necesaria ya que ellos (los hilos pertenecientes a un proceso) comparten la memoria desde el
momento que nacen.
El sistema monolítico tiene la ventaja que no posee casi overhead, ya que cuando invocamos una
función del sistema, la misma no deve viajar varios niveles para que realmente cause el efecto.
Por otra parte cuenta con la gran desventaja que es dificil de expandir y agregar nuevas
funcionalidades ya que todo está a un mismo nivel, así como también dificultades para hacer una
correcta depuración del mismo.
2005 – Marzo
1) Describa lo que entiende por sistema altamente acoplado/integrado.
Un sistema fuertemente acoplado es aquel que comparte la memoria y un reloj global, cuyos tiempos de
acceso son similares para todos los procesadores.
Existen distintos tipos de controladores como tipos de periféricos y también es común encontrar más de
un controlador posible para el mismo dispositivo, cada uno ofreciendo un nivel distinto de funcionalidades.
Debido a que el software de controladores de dispositivo se ejecuta como parte del sistema operativo,
con acceso sin restricciones a todo el equipo, resulta esencial que sólo se permitan los controladores de
dispositivos autorizados.
Los device drivers son programas añadidos al núcleo del sistema operativo, concebidos inicialmente
para gestionar periféricos y dispositivos especiales. Los controladores de dispositivo pueden ser de dos
tipos: orientados a caracteres u orientados a bloques. La diferencia fundamental entre ambos tipos de
controladores es que los primeros reciben o envían la información caracter a caracter; en cambio los
controladores de dispositivos de bloques procesan, como su nombre lo indica, bloques de cierta longitud en
bytes.
Los controladores de dispositivo han sido tradicionalmente programas binarios puros, sin embargo no
hay razón para que ello sea así ya que un controlador de dispositivo puede estar incluído dentro de un
programa (.exe p.ej), con la condición de que el código del controlador sea el primer segmento de dicho
programa.
Las llamadas al sistema proporcionan una interfaz con la que poder invocar los servicios que el sistema
operativo ofrece. Estas llamadas, generalmente, están disponibles como rutinas escritas en C y C++,
aunque determinadas tareas de bajo nivel, como por ejemplo aquellas en las que se tiene que acceder
directamente al hardware, pueden necesitar escribirse con instrucciones de lenguaje ensamblador.
Las llamadas al sistema se llevan a cabo de direfentes formas, dependiendo de la computadora que se
utilice. A menudo, se requiere más información que simplemente la identidad de la llamada as sistema
deseada. El tipo exacto y la cantidad de información necesaria varían según el sistema operativo y la
llamada concreta que se efectúe.
Las llamadas al sistema pueden agruparse de forma muy general en 5 categorías principales:
- Control de procesos: Un programa en ejecución necesita poder interrumpir dicha ejecución
bien de forma normal (end) o de forma anormal (abort). Si se hace una llamada al sistema para
terminar de forma anormals el programa actualmente en ejecución, o si el programa tiene un
problema y da lugar a una excepción de erro, en ocasiones se produce un volcado de memoria
y se genera un mensaje de error.
Las operaciones normales que se realizan para el control de procesos son las siguientes:
○ Terminar / Abortar.
○ Cargar / Ejecutar.
○ Crear procesos / Terminar procesos.
○ Obtener atributos del proceso / Definir atributos del proceso.
○ Esperar para obtener tiempo.
○ Esperar suceso / Señalizar suceso.
○ Asignar memoria / Liberar memoria.
- Manipulación de archivos: En primer lugar necesitamos poder crear y borrar archivos. Ambas
llamadas al sistema requieren que se proporcione el nombre del archivo y quizás algunos de los
atributos del mismo. Una vez que dicho archivo se ha creado, necesitamos abrirlo y
utilizarlo.También tenemos que leerlo y escribir en él, o reposicionarnos dentro del mismo, es
decir volver a un punto anterior o saltar al final del archivo. Por último, tambén tenemos que
poder cerrar el archivo, indicando que ya no deseamos utilizarlo más. También es necesario
poder realizar estas operaciones con directorios, si disponemos de una estructura de directorios
para organizar los archivos en el sistema de archivos. Además, para cualquier archivo o
directorio, necesitamos poder determinar los valores de diversos atributos y, quizá cambiarlos,
si fuera necesario. Los atributos de archivo incluyen el nombre del mismo, el tipo, los códigos de
protección, la información de las cuentas de usuario, etc.
Las operaciones normales que se realizan para la manipulación de archivos son las siguientes:
○ Crear archivos / Borrar archivos.
○ Abrir archivos / Cerrar archivos.
○ Leer archivos / Escribir archivos / Reposicionar.
○ Obtener atributos de archivo / Definir atributos de archivo.
4) ¿ Cuales son las etapas previas por las que debió pasar un proceso que se encuentra en la lista
de procesos listos, a partir de un archivo que contiene un código fuente escrito en lenguaje C ?
El proceso tuvo que pasar por las siguientes etapas, previo a ser colocado en la lista de procesos
“listos”:
- Compilado
- Linkeditado
- Invocado / Creado
- Admitido
5) Enuncie y describa una herramienta que brindan los sistema operativos de tipo UNIX para
permitir la sincronización entre los procesos.
Semáforos.
Un semáforo S, es una variable entera a la que, dejando aparte la inicialización, sólo se accede
mediante dos operaciones atómicas standard wait() y signal() - esto parece a monitores, por lo que no
se verán más y serán sustituídas por las queridas p (del término holandésproberen, probar) y v
(verhogen, incrementar).
Todas las modificaciones del valor entero del semáforo en las operaciones p y v deben ejecutarse
de forma indivisible. Es decir que, cuando un proceso modifica el valor del semáforo, ningún otro
proceso puede modificar simultáneamente el valor de dicho semáforo. Además, en el caso del p, la
prueba del valor entero de S (s ≤0), y su posible modificación (s--) también se deben ejecutar sin
interrupción.
- Test and Set: Puede utilizarse para leer y modificar una variable atómicamente. La
característica importante es que esta instrucción se ejecuta atómicamente. Por lo tanto, si dos
instrucciones TestAndSet se ejecutan simultáneamente (cada una en un CPU diferente), se
ejecutarán secuencialmente en un orden arbitrario.
- Swap: Se utiliza para intercambiar el valor de dos variables, a diferencia de la instrucción
TestAndSet, opera sobre los contenidos de dos palabras. También se ejecuta de forma atómica,
al igual que la instrucción TestAndSet.
Si, la necesidad de la instrucción Test And Set, radica en hacer la comprobación de un valor y su
cambio de forma que no pueda ser interrumpido por otro proceso. Actúa de la misma forma que un
semáforo.
La operación T&S es provista por el hardware, cuando el procesador ejecuta esta instrucción.
Depende de la arquitectura, ya que esta define cuantos bits están disponibles para propósitos de
direccionamiento.
Depende del sistema operativo ya que la forma en que el sistema operativo fue implementado puede
introducir límites adicionales sobre aquellos impuestos por la arquitectura
9) Según su respuesta anterior: Si tenemos una arquitectura de 64 bits con un sistema operativo en
32 bits. ¿Cual es el tamaño máximo de direccionamiento posible para un proceso ?
2^32 bytes
10) Enumere dos ventajas de utilizar librerías dinámicas en vez de librerías estáticas.
Las librerías dinámicas, es el término con el que se refiere a los archivos con código ejecutable que se
cargan bajo demanda de un programa por parte del sistema operativo. Las principales ventajas que
presentan este tipo de librerías son las siguientes:
- Reducen el tamaño de los archivos ejecutables: Gran parte del código puede estar
almacenado en bibliotecas y no en el propio ejecutable, lo que redunda en una mejor
modularización.
- Pueden estar compartidas entre varias aplicaciones: Si el código es suficientemente
genérico, puede resultar de utilidad para múltiples aplicaciones.
- Facilitan la gestión y aprovechamiento de la memoria del sistema: La carga dinámica
permite al sistema operativo aplicar algoritmos que mejoren el rendimiento del sistema cuando
se carguen estas bibiliotecas. Además, al estar compartidas, basta con mantener una copia en
memoria para todos los programas que la utilicen.
- Brindan mayor flexibilidad frente a cambios: Es posible mejorar el rendimiento o solucionar
pequeños errores distribuyendo únicamente una nueva versión de la biblioteca dinámica.
Nuevamente, esta corrección o mejora será aprovechada por todas las aplicaciones que
compartan dicha biblioteca.
Sin embargo, no todo son ventajas, dado que las dlls son muy comunes y muchos programas usan las
mismas; pero debido a la evolución, cada una de las dlls evoluciona incorporándose mejoras pero
modificándolas de tal forma que dejan de ser compatibles. Esto puede producir dos efectos no deseados:
- La instalación de un programa reemplace una DLL con una nueva versión no compatible.
- La desinstalación de un programa borre una DLL compartida.
En ambos casos, el resultado es que dejan de funcionar los programas que utilizaban la vieja versión.
11) Con la estructura Inodo utilizada en sistemas de archivos tipo UNIX ¿ Qué tipos de archivos se
pueden representar ?
a- Archivo (de texto, ejecutables, datos, etc).
b- Directorios.
c- Archivos y directorios.
d- Archivos, directorios y enlaces débiles (soft link).
e- Archivos, directorios, enlaces débiles y fuertes (hard link).
Opción e
El I-nodo es una estructura de datos propia de los sistemas de archivos tradicionalmente empleados
en los sistemas operativos tipo UNIX como es el caso de Linux. Un inodo continene las características
(permisos, fechas, ubicación, pero NO el nombre) de un archivo regular, directorio, o cualquier otro
objeto que pueda contener el sistema de ficheros.
El término “I-nodo” refiere generalmente a inodos en discos que almacenan archivos regulares,
directorios y enlaces simbólicos. El concepto es particularmente importante para la recuperación de los
sistemas de archivos dañados.
13) Sea un disco con 32 cilindros numerados del 0 al 31, y la siguiente cola de pedidos:
12, 18, 1, 15, 2, 13, 17, 6, 22 y 16.
Haga una tabla que muestre la secuencia de planificación de atención de los pedidos para los
algoritmos First Come First Served, Shortest Seek Time First, SCAN, C-SCAN, LOOK y C-LOOK.
Suponga que la cabeza del disco está ubicada sobre el cilindro 30.
Nota: En los algoritmos que pueda haber más de una opción, elija una y aclare el criterio.
1 2 3 4 5 6 7 8 9 10
FCFS 12 18 1 15 2 3 17 6 22 16
SSTF 22 18 17 16 15 13 12 6 2 1
SCAN 22 18 17 16 15 13 12 6 2 1
C-SCAN 1 2 6 12 13 15 16 17 18 22
LOOK 22 18 17 16 15 13 12 6 2 1
C-LOOK 1 2 6 12 13 15 16 17 18 22
2005 – Julio
1) ¿Cuál es la principal ventaja de la multiprogramación?
Logra el incremento de utilización de CPU. Esto se consigue al cargar varios procesos en memoria y
alternar la ejecución cuando se producen requerimientos de E/S por ejemplo.
2) ¿De qué forma se puede garantizar que todos los accesos a los dispositivos, por parte de un
proceso, se deban hacer a través del sistema operativo?
Obligando a que las instrucciones de hardware que acceden al dispositivo sean privilegiadas. De esta
forma, solo el sistema operativo puede ejecutarlas.
Ejecución de programas:
Realiza todas las tareas relativas a la ejecución de un programa (carga, linkeo dinámico, fin de
ejecución, etc) en nombre del usuario.
Operaciones de I/O:
Brinda una interfaz abstracta sobre los dispositivos de I/O, permitiendo al usuario ignorar los
detalles de bajo nivel de acceso a los mismos. Esto permite además lograr una mayor eficiencia y un
manejo más seguro de los mismos.
Comunicaciones:
Brinda mecanismos de intercambio de información entre procesos, que se pueden encontrar en la
misma máquina o no. Dichos mecanismos se pueden implementar mediante
memoria compartida o pasaje de mensajes.
Detección de errores:
Brinda mecanismos para aislar a los usuarios de posibles errores de hardware, o errores producidos
por procesos de otros usuarios.
Los llamados al sistema proveen una interfaz entre los procesos y el sistema operativo a través de la
cual los procesos pueden acceder a los servicios que este brinda.
5) Para hacer un llamado al sistema, ¿es necesario estar en modo monitor o de usuario? Justifique.
Los llamados al sistema son ejecutados por procesos de usuario y por lo tanto ejecutan en modo
usuario. Para procesar el llamado el sistema operativo trabaja en modo monitor y una vez finalizado, antes
de retornar el control al proceso, vuelve a modo usuario.
No, dado que el código no reentrante si es ejecutado simultáneamente por más de un proceso puede
generar inconsistencias.
8) En una arquitectura multiprocesador, describa las ventajas y desventajas de contar con cache a
nivel de los procesadores.
La cache a nivel de procesador incrementa el desempeño ya que los procesadores pueden obtener los
datos de la cache (copias de los datos en memoria principal) y evitar la búsqueda en la memoria principal,
que insume mucho más tiempo.
Por otro lado, se debe mantener la coherencia entre los datos de las caches de cada uno de los
procesadores y los datos que se encuentran en memoria principal, lo cual vuelve más complejo el hardware
necesario.
- Localizar espacio libre contiguo de tamaño suficiente para ubicar el segmento a mover.
- Bloquear los procesos que referencial al segmento físico a reubicar. Mover el segmento.
- Modificar las tablas de segmento de los procesos antes mencionados (colocando en la entrada
correspondiente el nuevo valor base y límite).
- Desbloquear los procesos.
Dado que existen segmentos de instrucciones de código y de datos, a cada uno de ellos se les puede
asociar un modo de acceso (lectura/escritura). De esta forma, se pueden generar controles a través de
hardware que permitan garantizar el acceso a los mismos por parte de los programas. Compartir segmentos
de códigos (que son segmentos de lectura), permite maximizar el uso de la memoria principal.
Los procesos que comparten un segmento de código, solo manejan la referencia al segmento
compartido por ambos, y no hay necesidad de tener varias copias de un mismo
segmento.
El nivel de RAID 0+1 fracciona los datos (“stripping”) para mejorar el rendimiento, pero también utiliza un
conjunto de discos duplicados para conseguir redundancia de datos de manera de aumentar la tolerancia
ante fallas. Al ser una variedad de RAID híbrida, RAID 0+1 combina las ventajas de rendimiento de RAID 0
con la redundancia que aporta RAID 1.
12) En el diseño de un sistema de archivos tipo Unix, ¿ud. Pondría el nombre de archivo dentro del i-
nodo? Justifique.
No, en unix los inodos contienen un número único que identifica el archivo. El nombre se maneja en la
estructura del sistema de archivos de manera de poder referenciar al mismo archivo con distinto nombre.
13) Si se dispone de un sistema operativo que no implementa el concepto de memoria virtual, ¿qué
problemas identifica en la ejecución de los procesos? ¿Podría existir la multiprogramación en
ese sistema?
No podrían existir procesos de tamaño mayor que la memoria física disponible ya que los procesos
deben cargarse completamente en memoria para ejecutar. Si puede existir multiprogramación, limitada por
la cantidad de procesos que puedan cargarse completos simultáneamente.
2005 – Diciembre
1) En un equipo multiprocesador que dispone de 4 procesadores, se instaló un sistema operativo
basado en multiprocesamiento simétrico. ¿Los procesos del sistema operativo pueden ejecutar
en cualquiera de ellos, o son restringidos a ser ejecutados en algún procesador específico?De
estar restringido, describa como se organiza la estructura de los procesadores.
Al ser un sistema operativo simétrico (SMP) los procesos del sistema operativo pueden ejecutar en
cualquier procesador sin restricciones.
En una arquitectura basada en microkernel, el sistema operativo se ocupa solo de unas pocas
funciones, reduciendo el núcleo a su mínima expresión. El resto de funciones pasan a estar en el espacio
de usuario.
Se debe de proveer una interfase de comunicación entre los procesos de usuarios y los procesos que
proveen los servicios del sistema.
3) ¿Cuáles son las principales actividades del sistema operativo relacionadas con manejo de
memoria principal? ¿y cuáles son las relacionadas con el manejo de volúmenes y archivos?
Decidir qué procesos serán cargados en memoria cuando quede espacio libre.
Asignar y quitar espacio de memoria de acuerdo a la necesidad.
Cada dispositivo de entrada/salida posee de una cola de espera. Un proceso al ejecutar una operación
de entrada/salida sobre un dispositivo, también es puesto en la cola respectiva al dispositivo.
5) ¿Cuál es el motivo de que en el PCB (Process Control Block) se reserve lugar para los registros
de la CPU?
El lugar es reservado debido a que cuando un proceso se le quita el recurso procesador, es necesario
guardar su estado de ejecución. De esta forma, cuando es elegido nuevamente para hacer uso del
procesador los registros son copiados del PCB a los registros del procesador.
Aprovechar que ejecuten otros hilos del mismo procesos mientras alguno de ellos se haya bloqueado en
una operación de entrada/salida. Esto es posible ya que el sistema operativo reconoce los hilos como
unidades de ejecución independientes.
La prioridad para el uso de un recurso es inversamente proporcional al uso que se hace del mismo. Por
lo tanto, los proceso que tengan un alto consumo de CPU deberán ir a colas de menor prioridad (según la
letra, quantum mayor), mientras que los procesos que hagan mayor uso de E/S tendrán mayor prioridad de
acceso al procesador (colas con quatum menor).
Cuando el planificador seleccione un proceso de alto consumo de CPU (una cola de baja prioridad),
este ejecutará hasta que no aparezca un proceso de alto consumo de E/S (que seguramente demore poco
en la CPU).
De esta forma, se logra que los procesos que requieran poca CPU ejecuten lo antes posible y liberen el
recurso CPU rápidamente de forma de tener un mayor desempeño general del sistema.
8) A nivel del sistema operativo, ¿qué permite la instrucción SWAP provista por el hardware?
Poder intercambiar dos valores de variables de una manera atómica, sin que pueda ser interrumpido en
el proceso.
9) ¿Qué entiende por carga dinámica (dynamic loading)? Explique el concepto y sus beneficios.
El dynamic loading permite que una rutina no sea cargada en memoria principal hasta tanto no se
utilice.
Entre los beneficios se puede mencionar que no se cargan innecesariamente rutinas que no son
invocadas.
A su vez, los binarios en el sistema ocupan menos espacio ya que se pueden crear bibliotecas
dinámicas que varios programas referencien.
10) En un sistema con segmentación de 4096 bytes de memoria física, se tienen asignados los
siguientes segmentos:
Base Largo
100 150
300 1024
40 20
2600 512
1358 128
¿Cuál sería la asignación en memoria física de los tamaños de segmentos que aparecen en la
lista de abajo, según las estrategias de asignación First-fit, Best-fit y Worst-fit? Asuma que los
pedidos de segmentos llegan en orden de izquierda a derecha, la memoria empieza en la
dirección 0 y los segmentos que no pueda ubicar son descartados.
Lista de segmentos nuevos: 128, 40, 1024, 32, 40, 45.
(base, largo)
First Fit:
(1486,128), (0,40), descartado 1024, (60,32), (250,40), (1614, 45)
Best Fit:
(3112,128), (0,40), (1486,1024), (1324,32), (60,40), (250, 45)
Worst Fit:
(1486, 128), (1614, 40), descartado 1024, (3112,32), (3144,40), (1654, 45)
11) En un sistema con memoria virtual, ¿cuál es la función del dispositivo de hardware MMU
(memory-management unit)?
2006 – Febrero
1) Describa dos métodos a través de los cuales el sistema operativo se entera de que un
dispositivo de E/S ha finalizado un pedido generado por el sistema operativo, mencionando las
principales características de cada uno y compare los mismos.
Polling e Interrupciones.
Polling:
El sistema realiza el pedido y queda en una iteración consultando el ‘busy bit’ del controlador del
dispositivo hasta que este quede limpio (señal que finalizó).
Interrupciones:
El sistema realiza el pedido y será avisado de la finalización a través de una interrupción.
El polling tiene como desventaja el hacer ‘busy waiting’. Ciclos de CPU serán desperdiciados. En
cambio el método de interrupciones permite ejecutar otros procesos mientras el dispositivo realiza el pedido.
El polling sería útil en casos en que el dispositivo este libre y que tenga mayor velocidad que la del
procesador.
Las interrupciones permiten un manejo asincrónico y además permiten ser atendidas cuando el sistema
operativo lo crea conveniente.
2) Describa los estados en los que puede permanecer un proceso y realice un diagrama mostrando
las transiciones de un estado a otro mencionando el, o los eventos que se producen para el
cambio de estado.
Planificador expropiativo es aquel que ante los siguientes eventos es ejecutado para asignar un proceso
a la CPU:
a- Cuando un proceso se cambia del estado de ejecución al estado de pronto (cuando ocurre una
interrupción).
b- Cuando un proceso que estaba bloqueado pasa al estado Pronto (ante una E/S finalizada o un evento
completado).
Ante estos casos el planificador elige de la lista de procesos listos el proceso que tenga mayor prioridad
según su algoritmo de planificación.
Se puede interpretar como que el planificador asegura que siempre está ejecutando el proceso (dentro
de los procesos listos) con mayor prioridad.
b- Calcule el tiempo de retorno y espera de los procesos para el algoritmo RR de la parte (a).
RR (Cuanto=1)
Cs = cuantos de espera
Ce = cuantos de ejecución
RR (Cuanto=1)
Cs = cuantos de espera
Ce = cuantos de ejecución
Más formalmente, un sistema está en un estado seguro solo si existe una secuencia segura. Una
secuencia de procesos [P0, P1, ..., Pn] es una secuencia segura para el estado de asignación actual si,
para cada Pi, los recursos que Pi todavía puede solicitar se pueden satisfacer con los recursos que
actualmente están disponibles más los recursos que tienen todos los Pj, donde j < i. En esta situación, si los
recursos que Pi necesita todavía no están disponibles, Pi podrá esperar hasta que todos los Pj hayan
terminado. En ese momento, Pi podrá obtener todos los recursos que necesita, llevar a cabo su tarea
designada, liberar los recursos que adquirió y terminar.
Vamos a ver si el sistema está en estado seguro. Aplicando el Algoritmo del banquero.
trabajo0 = (3 1 1 0)
fin0 = (False False False False False)
Proceso Necesidades
(Máximo – Asignados)
P0 1010
P1 0750
P2 1002
P3 0020
P4 0642
Verificación:
Asignadosini + Disponiblesini = Trabajofin
(3 9 9 13) + (3 1 1 0) = (6 10 10 13)
Entonces existe una secuencia [P0, P3, P1, P4, P2] que es segura.
Entonces es estado seguro y por lo tanto no tiene que haber deadlock.
6) Una vez ocurrido un deadlock, describa un proceso que permita recuperarse del mismo.
Mencione sus ventajas y desventajas.
7) ¿Qué se entiende por direccionamiento virtual? Explique que es una dirección lógica o virtual y
qué es una dirección física.
En un sistema que maneje memoria virtual, a cada proceso se le asigna un espacio virtual (o lógico) de
direccionamiento. Este espacio virtual permite abstraerse del direccionamiento físico (real).
Por lo general el direccionamiento esta restringido por los bits de la arquitectura. Por ejemplo, en una
arquitectura de 32 bits, un proceso puede generar direcciones de hasta 2^32 = 4GB. Por lo que podría
acceder a una memoria virtual de 4GB.
Una dirección lógica o virtual es la direcciones generadas por el proceso (se puede decir que son las
que se utilizan a nivel de CPU), mientras que una dirección física es una dirección real de la memoria
principal del sistema. En la mayoría de los sistemas actuales la unidad de administración de memoria
(MMU-dispositivo de hardware) es la encargada de hacer la conversión de direcciones lógicas a físicas.
8) Describa dos implementaciones posibles para saber el espacio libre en disco. Compárelos
mencionando sus ventajas y desventajas entre ellos.
Mapa de bits:
Es un arreglo de bits en donde cada entrada se mapea a un bloque del sistema de archivo. Si el
bloque está libre, el bit está indicado con un 1; si el bloque está asignado, el bits indica 0 (puede ser al
revés).
Lista encadenada:
Los bloques libres están en una lista encadenada. Existe un puntero al primer bloque libre y cada
bloque libre tiene una referencia al siguiente bloque.
Agrupamiento:
Es igual que la lista encadenada, pero además de tener el puntero al siguiente (dado que sobra
mucho espacio) se tiene un grupo de bloques libres.
Contador:
Al igual que los dos últimos se tiene una lista encadenada de bloques libres. Pero como a veces se
tienen varios bloques libres que están contiguos, se hace un agrupamiento en el primer bloque libre de los
contiguos agregando un contador que informa cuantos bloques libres contiguos ahí.
9) ¿Qué son y para qué sirven los semáforos binarios? Implemente semáforos binarios con
monitores.
procedure wait;
begin
if (ocupado) then
no_ocupado.wait;
ocupado := true;
end procedure;
procedure signal;
begin
ocupado := false;
no_ocupado.signal;
end procedure;
begin
ocupado := false;
end bin_semaforo;
Ver secuencia :
P1 P2
Bin_semaforo.wait;
Bin_semaforo.wait;
Bin_semaforo.signal;
10) Describa el modelo de Working-set. Mencione los conceptos en que se basa, las propiedades
que cumple y el fin que persigue.
El modelo utiliza un parámetro (A) que define el tamaño de la ventana del working-set. Si una página
está siendo usada en el momento, entonces pertenece al working-set. Cuando una página hace un tiempo,
mayor que la ventana definida, no es accedida deja de pertenecer del working-set.
La efectividad del modelo se logra con una buena selección del parámetro A.
La propiedad más importante del working-set es el tamaño de la ventana para cada proceso. La
propiedad que se debe cumplir es que la suma del tamaño de todas las ventanas del sistema debe ser a lo
sumo igual a la cantidad de páginas disponibles en el sistema.
2006 – Marzo
1) ¿Cuáles son los objetivos principales de un sistema operativo?
- Brindar un ambiente para realizar y ejecutar los programas y aplicaciones de los usuarios.
- Proveer un entorno sin interferencias a cada usuario.
- Administrar de forma equitativa los recursos del hardware y software del sistema.
- Hacer que el uso del sistema sea tan amigable, intuitivo y expresivo como permita el estado de
la tecnología.
Varios programas son cargados en memoria y cuando alguno se bloquea, el sistema operativo le asigna
la CPU a otro proceso.
5) En los sistemas multiprogramados y multiusuarios pueden existir problemas por procesos mal
programados o mal intencionados. Esto puede llevar al sistema a un estado inconsistente.
Enuncie y comente brevemente distintos mecanismos provistos por hardware que permiten
protegerse de este tipo de programas.
Protección de E/S:
Todas las instrucciónes de E/S a nivel de hardware son privilegiadas. O sea, solo pueden ejecutarse en
modo monitor.
Protección de memoria:
Todas las referencias hechas a memoria principal son controladas por la MMU (dispositivo de
hardware) que verifica el acceso correcto a memoria y su control es por instrucciones privilegiadas.
Protección de CPU:
Permitir que el procesador sea utilizado por todos en forma equitativa. El hardware provee de un timer
que genera una interrupción. De esta forma, el sistema operativo puede expropiar el procesador a un
proceso y asignar a otro el recurso procesador.
Aumento del nivel de privilegio de ejecución solo es posible mediante la entrega del flujo de ejecución a
código protegido del Kernel
Son la interface provista por el núcleo del sistema para que los procesos de usuarios accedan a los
diferentes servicios que brinda el sistema operativo.
7) Describa brevemente el conjunto de tareas que implica realizar un cambio de contexto (context
switch), mencionando la utilidad del bloque de control del proceso (PCB: Process Control Block).
Cuando un cambio de contexto ocurre, el núcleo del sistema debe guardar (salvar) el contexto del viejo
proceso en el PCB y luego cargar el contexto del nuevo proceso (desde su PCB) en el procesador
asignado.
int turn;
bool flag[2];
p0() { p1() {
while (true) { while (true) {
flag[0] = true; flag[1] = true;
while (flag[1]) { while (flag[0]) {
if (turn == 1) { if (turn == 0) {
flag[0] = false; flag[1] = false;
while (turn == 1) ; while (turn == 0) ;
flag[0] = true; flag[1] = true;
} }
} }
SECCION CRITICA SECCION CRITICA
turn = 1; turn = 0;
flag[0] = false; flag[1] = false;
... ...
} }
a- Utilización de procesador.
Es el porcentaje de uso del procesador en procesos de usuario.
b- Tiempo de retorno.
Desde la perspectiva de un proceso, es el tiempo que transcurre desde que es cargado hasta que
finaliza su ejecución.
c- Tiempo de espera.
Es la suma de los períodos que un proceso espera en la cola de procesos listos (ready queue).
Ventajas:
- Simple compartir y proteger objetos, linking dinámico, reubicación etc.
- Podrían haber 2 diccionarios (código y datos), permitiendo por ej. reusar código
automáticamente.
Desventajas:
- Complejas políticas de ubicación y reemplazo.
- Fragmentación externa.
Secuencial:
Se lee o escribe en el archivo en base a un puntero (file pointer).
Es el método de acceso más simple. La información del archivo se procesa en orden, un registro
después de otro. Este modo de acceso es, como mucho, el más común; por ejemplo, los editores y
compiladores suelen acceder a los archivos de esta forma.
Las lecturas y escrituras constituyen el grueso de las operaciones realizadas con un archivo. Una
operación de lectura (leer siguiente) lee la siguiente porción del archivo e incrementa automáticamente un
puntero de archivo, que controla la ubicación de E/S. De forma similar, la operación de escritura (escribir
siguiente) añade información al final del archivo y hace que el puntero avance hasta el final de los datos
recién escritos (el nuevo final de archivo). Dichos archivos podrán reinicializarse para situar el puntero al
principio de los mismos y, en algunos sistemas, puede que un programa sea capaz de saltar hacia adelante
o hacia atrás n registros, para algún cierto valor entero n, quizás solo para n=1.
Directo:
Se lee o escribe en el archivo según una dirección que debe ser especificada cada vez.
También llamado acceso relativo. Un archivo está compuesto de registros lógicos de longitud fija que
permiten a los programas leer y escribir registros rápidamente, sin ningún orden concreto. El método de
acceso directo se basa en un modelo de archivos que se corresponde con los dispositivos de disco, ya que
los discos permiten el acceso aleatorio a cualquier bloque de un archivo. Para el acceso directo, el archivo
se considera como una secuencia numerada de bloques o registros. Por lo tanto, podemos leer el bloque
14, luego el 53 y luego escribir el bloque 7. No existe ninguna restricción en cuanto al orden de lectura o
escritura en los archivos de acceso directo.
Los archivos de acceso directo tienen una gran utilidad para el acceso inmediato a grandes cantidades
de información: las bases de datos suelen implementarse con archivos de este tipo. En este método de
acceso, las operaciones de archivo deben modificarse para incluir el número de bloque como parámetro.
Es un área de memoria que sirve para guardar datos mientras son transferidos entre dispositivos o entre
un dispositivo y un proceso.
14) ¿Qué ventajas brinda el uso de la técnica de buffering a nivel del sistema operativo?
2006 – Diciembre
1) ¿Qué beneficio brinda la multiprogramación? Discuta según el sistema sea monoprocesador o
multiprocesador.
2) Describa 3 métodos para efectuar una operación de Entrada/Salida. (Formas de interacción con
la controladora del dispositivo).
Interrupts (Interrupciones)
El mecanismo de interrupciones funciona de la siguiente forma: el hardware de la CPU tiene un hilo
denominado línea de sollicitud de interrupción que la CPU comprueba después de ejecutar cada
instrucción. Cuando la CPU detecta que una controladora ha activado una señal a través de la línea de
solicitud de interrupción, la CPU guarda el estado actual y salta a la rutina de tratamiento de
interrupciones situada en una dirección fija de la memoria. La rutina de tratamiento de interrupciones
determina la causa de la interrupción, lleva a cabo el procesamiento necesario, realiza una restauración del
estado y ejecuta una instrucción return from interrupt para volver a situar la CPU en el estado de ejecución
anterior a que se producjera la interrupción.
Decimos que la controladora del dispositivo genera una interrupción enviando una determinada
señal a través de la línea de solicitud de interrupción enviando una determinada señal a través de la línea
de solicitud de interrupción, la CPU atrapa la interrupción y la despacha a la rutina de tratamiento de
interrupciones correspondiente, y la rutina borra la interrupción dando servicio al dispositivo.
DMA.
Para un dispositivo que realice transferencias de gran tamaño, como por ejemplo una unidad de
disco, parece bastante poco apropiado utilzar un procesador de propósito general (que es caro) para
comprobar dicho estado y para describir datos en un registro de una controladora de byte en byte, lo cual es
un proceso que se denomina E/S programada. La mayoría de las computadoras evitan sobrecargar a la
CPU principal con estas tareas descargando parte de este trabajo en un procesador de propósito especial
denominado controladora de acceso directo a memoria. Para iniciar una transferencia de DMA, el host
describe un bloque de comando DMA en la memoria. Este bloque contiene un puntero al origen de una
transferencia, un puntero al destino de la misma y un contador del número de bytes que hay que transferir.
La CPU escribe la dirección de este bloque de comandos en la controladora DMA y luego continúa
realizando otras tareas. La controladora DMA se encarga entonces de operar el bus de memoria
directamente, colocando direcciones en el bus para realizar las trasnferencias sin ayuda de la CPU principal.
En las computadoras de tipo PC, uno de los componentes estándar es una controladora DMA simple, y las
tarjetas de E/S con control maestro del bus para PC suelen contener su propio hardware de DMA de alta
velocidad.
Una vez finalizada la trasnferencia completa, la controladora de DMA interrumpe a la CPU. Cuando
la controladora de DMA toma el control del bus de memoria, se impide momentáneamente a la CPU
acceder a la memoria principal, aunque podrá seguir accediendo a los elementos de datos almacenados en
sus cachés principal y secundario. Aunque este robo de ciclos puede ralientizar los cálculos realizados por
la CPU, descargar el trabajo de transferencia de datos en una controladora de DMA suele mejorar el
rendimiento global del sistema.
3) El modo de ejecución provisto por hardware permiten brindar protección entre los procesos.
Describa dos formas más de protección que se proveen a nivel de hardware.
Pueden ser:
Instrucciones privilegiadas
4) Los system calls son una forma de llamar a los servicios del sistema operativo. ¿Existe alguna
otra forma de acceder a estos servicios por parte de los procesos de usuario?
5) En el Process Control Block existe una sección para los registros. ¿Cuándo es utilizada esta
área?
Cuando el proceso no tiene asignado el recurso procesador. En esa área se guarda el estado de los
registros del procesador cuando el proceso fue despachado. Cuando el planificador le asigne el recurso
procesador, el despachador cargará los registros del procesador con esos valores.
6) ¿A nivel de sistema operativo y Process Control Block, cuáles estructuras son necesarias para
describir un hilo (thread)?
A nivel del PCB, el sistema debe tener una estructura independiente para cada thread de un proceso
que contenga por lo menos el stack, registros y el program counter.
Utilizando:
a- Un planificador Shortest Job First (SJF).
b- Un planificador Round-Robin con tiempo de quantum 1.
Nota: asuma que el sistema comienza con los 4 procesos en la cola de procesos listos con el orden
P1, P2, P3 y P4.
a- (0 + 2 + 5 + 10) / 4 = 4.25
Resp 1.
El método de asignación en tiempo de ejecución permite a la memoria de un proceso ser reubicada del
lugar físico mientras el proceso está activo (ejecutando, listo, bloqueado) en el sistema.
Resp 2.
Usualmente, los programas residen en un disco en forma de archivos ejecutables binarios. Para poder
ejecutarse, un programa deberá ser cargado en memoria y colocado dentro de un proceso. Dependiendo
del mecanismo de gestión de memoria que utilice, el proceso puede desplazarse entre disco y memoria
durante su ejecución. Los procesos del disco que estén esperando a ser cargados en memoria para su
ejecución forman lo que se denomina cola de entrada.
El procedimiento normal consiste en seleccionar uno de los procesos de la cola de entrada y cargar
dicho proceso en memoria. A medida que se ejecuta el proceso, éste accede a las instrucciones y datos
contenidos en la memoria. Eventualmente, el proceso terminar´´a su ejecución y su espacio de memoria
será declarado como disponible.
La mayoría de los sistemas permiten que un proceso de usuario resida en cualquier parte de la memoria
física. Así, aunque el espacio de direcciones de la computadora comience en 000000, la primera dirección
del proceso de usuario no tiene por que ser 000000. Esta técnica afecta a las direcciones que el programa
de usuario puede utilizar. En la mayoría de los casos, el programa de usuario tendrá que recorrer varios
pasos antes de ser ejecutado. A lo largo de estos pasos, las direcciones pueden representarse de diferentes
formas. Las direcciones del programa fuente son generalmente simbólicas. Normalmente un compilador se
encargará de reasignar estas direcciones simbólicas a direcciones reubicables (por ejemplo 14 bytes a
partir de este módulo). El editor de montaje o cargador se encargará a su vez, de reasignar las direcciones
reubicables a direcciones absolutas. Cada operación de reasignación constituye una relación de un espacio
de direcciones a otro.
Clásicamente, la reasignación de las intrucciones y los datos a direcciones de memoria puede realizarse
en cualquiera de los pasos:
- Tiempo de compilación: no detallado acá.
9) En un sistema que soporta memoria virtual. ¿Quién realiza las traducciones de memoria virtual a
física? Describa como se hace la traducción de virtual a física en paginación.
Cada acceso a memoria (virtual) generado por un proceso es traducido a memoria física por la MMU.
En paginación la dirección virtual se compone de una sección que indica la entrada de la tabla de
páginas que se accede (para obtener el número de marco) y de otra sección que indica el desplazamiento
dentro del marco.
10) Las estructuras RAID (Redundant Arrays of Inexpensive Disks) brindan servicios de mejora en la
confiabilidad y en los tiempos de transferencias. Haga una tabla que clasifique los RAID tipo 0, 1
y 5, mencionando que servicio(s) mejoran.
2007 – Febrero
1) ¿En un sistema computacional, qué permite la protección de CPU?
La protección de CPU permite que los procesos no se apoderen de forma indefinida del recurso
procesador. Si no se existiera en una ambiente de tiempo compartido, los procesos podrían hacer un uso
excesivo del procesador, limitando a otros del recurso.
4) Proponga una estructura de datos necesaria para poder representar hilos (threads) a nivel del
sistema operativo. Mencione solamente los campos principales del bloque descriptor del
proceso.
Para poder representar hilos (threads) es necesario tener estructuras para la pila (stack), el contador de
programa (program counter) y los registros de cada hilo. Se debe modificar el PCB de forma tal de que cada
hilo tenga estas estructuras de forma independiente.
6) ¿Qué quantum de CPU (mayor, menor o igual) le daría a los procesos que son catalogados como
consumidores intensivos de CPU (CPU-bound), con respecto a los procesos consumidores de
entrada-salida (IO-bound)?
Los procesos intensivos en CPU (CPU-bound) deberán tener una prioridad baja sobre el recurso
procesador, por lo que se les asignará un quantum de tiempo menor con respecto a los procesos intensivos
en entrada-salida (I/O bound).
De estar forma, los procesos que no hacen un uso desmedido del procesador podrán acceder con
mayores posibilidades.
b- ¿A qué nivel se mantiene en memoria (memoria del sistema operativo o del proceso)?
La estructura es guardada a nivel del sistema operativo. De otra forma, el proceso podría modificarla.
También se puede mencionar que el proceso la puede acceder, pero solo en formato lectura.
El algoritmo de segunda chance conserva una cola circular con los frames según el orden de carga.
Cada vez que se carga un frame se lo pone al final de la cola y se marca el bit de referencia en 0.
A su vez, cada vez que el frame es accedido se marca el bit de referencia en 1. Posteriormente, al
ejecutarse el algoritmo de reemplazo, se hace una recorrida desde el comienzo de la cola buscando el
frame a reemplazar. Para cada frame se tienen dos posibilidades:
a- Software.
b- Hacer la traducción de los pedidos que el sistema realiza sobre el dispositivo “dialogando” con la
controladora del dispositivo.
El manejador de dispositivo (device driver), por lo general, implementa un conjunto de primitivas de alto
nivel (impuestas por el sistema operativo), que realizan la traducción de los pedidos y respuestas que
genera el sistema.
Para esto, es necesario que se pueda comunicar con el controlador del dispositivo en el lenguaje que
éste propone.
2007 – Marzo
1) Dado el siguiente código escrito en lenguaje C:
main ()
{
char * buffer;
int fd_read, fd_write, count;
closeread(fd_read);
closewrite(fd_write);
exit 0;
}
malloc: Es una función de la biblioteca de usuario que puede desenbocar en la extensión del área de heap
del proceso.
openread y openwrite: apertura de un archivo.
read y write: Lectura y escritura de un archivo.
closeread, closewrite: cerrar un archivo abierto por el proceso.
exit: finalización del proceso.
A su vez, proveen de una capa de comunicación entre procesos para poder implementar los demás
servicios a nivel de usuario.
Es un planificador que define un conjunto de colas a las que clasifica según algún criterio (ej. Prioridad).
Los procesos serán asignados (según su característica) a alguna de las colas.
Cada cola puede tener su política individual de planificación.
La retroalimentación permite que los procesos sean cambiados de cola cada vez que adquieran el
estado de listo. Ej.: Un proceso con alto consumo de CPU (cpu-bound) tenderá a ir a colas de menor
prioridad.
Los procesos con bajo consumo de CPU tenderán a avanzar a colas con mayor prioridad.
Es el intervalo de tiempo desde que un proceso es cargado hasta que finaliza su ejecución.
Recurso R1 R2 R3 R4
Cantidad 1 2 1 3
Procesos P1 P2 P3
Recursos Pedidos R1 R3 R2
Recursos Asignados R2 R1 R3
R2
Se tienen los siguientes ciclos de espera, los que llevan a que ninguno de los pedidos de los 3 procesos
pueda ser completado:
- P3 espera por algún recurso R2 (asignados a P1 y P2)
- P2 espera por R3 que está asignado a P3, por lo que P2 y P3 se esperan mutuamente.
- P1 espera por R1 que está asignado a R2, pero como éste no lo libera, debe esperar.
P3
R2 R2 R3
P1 P2
R1
a- 2^16 bytes.
b- Suponiendo que la memoria virtual asignada comienza en la dirección virtual 0 y termina en la dirección
virtual 10k.
Para representar el espacio virtual del proceso es necesario 3 tablas (1 para primer nivel y 2 para
segundo nivel).
Aclaración:
i. Con 10 bits de desplazamiento direcciono 2^10 bytes = 1024bytes = 1KB.
ii. Con páginas de 1KB, para direccionar 10KB necesito 10 páginas.
iii. Con 3 bits para direccionar las páginas de 2do nivel, puedo direccionar hasta 2^3 = 8 páginas.
iv. De ii y iii obtengo que para direccionar 10KB necesito 2 páginas de 2do nivel (una completa con
las 8 entradas usadas y la otra con las 2 entradas faltantes)
v. Cada página de 1er nivel permite direccionar hasta 8 páginas de segundo nivel (2^3 = 8), por lo
que solamente necesito 2 entradas para direccionar las 2 páginas de segundo nivel utilizadas.
Resp 1.
En la estrategia global los fallos de página de un proceso afectan la eficiencia de ejecución de otro.
La estrategia local independiza los fallos de página por proceso, pero ocupa frames de memoria que
quizás sean poco utilizados y no son reemplazados.
Resp 2.
Si hay múltiples procesos compitiendo por los marcos, podemos clasificar los algoritmos de sustitución
de páginas en dos categorías amplias: sustitución global y sustitución local. La sustitución global permite a
un proceso seleccionar un marco de sustitución de entre el conjunto de todos los marcos, inclusi si dicho
marco está asignado actualmente a algún otro proceso; es decir, un proceso puede quitar un marco a otro.
El mecanismo de sustitución local requiere, por el contrario, que cada proceso sólo efectúe esa selección
entre su propio conjunto de marcos asignado.
Por ejemplo, consideremos un esquema de asignación en el que permitamos a los procesos de alta
prioridad seleccionar marcos de los procesos de baja prioridad para la sustitución. Un proceso podrá
seleccionar un marco de sustitución entre sus propios marcos o de entre los marcos de todos los procesos
de menor prioridad. Esta técnica permite que un proceso de alta prioridad incremente su tasa de asignación
de marcos a expensas de algún proceso de baja prioridad.
Con una estrategia de sustitución local, el número de marcos asignados a un proceso no se modifica.
Con la estrategia de sustitución global, puede que un proceso sólo seleccione marcos asignados a otros
procesos, incrementando así su propio número de marcos asignados. Suponiendo que otros procesos no
seleccionen sus marcos para sustitución.
Un posible problema con el algoritmo de sustitución global es que un proceso no puede comprobar su
propia tasa de fallos de página. El conjunto de páginas en memoria para un proceso dependerá no sólo del
comportamiento de paginación de dicho proceso, sino también del comportamiento de paginación de los
demás procesos. Por tanto, el mismo proceso puede tener un rendimiento completamente distinto debido a
circunstancias totalmente externas al proceso. Este fenómeno no se produce en el caso de los algoritmos
de sustitución local. Con una sustitución local, el conjunto de páginas en memoria de un cierto proceso se
verá afectado sólo por el comportamiento de paginación de dicho proceso. Por otro lado, la sustitución local
puede resultar perjudicial para un proceso, al no tener a su disposición otras páginas de memoria menos
utilizadas. En consecuencia, el mecanismo de sustitución global da como resultado, generalmente, una
mayor tasa de procesamiento del sistema y es por tanto el método que más comúnmente se utiliza.
Secuencial:
Se lee o escribe en el archivo en base a un puntero (file pointer).
Directo:
Se lee o escribe en el archivo según una dirección que debe ser especificada cada vez.
Resp 1.
El DMA es un dispositivo que permite la transferencia de bloques de memoria desde un controlador a
memoria RAM.
El sistema carga en los registros de la controladora DMA la tarea a realizar y posteriormente la activa.
Una vez finalizada la transferencia se interrumpe al procesador para avisar al sistema de la finalización.
La cache es una memoria de rápido acceso que permite tener copias de datos que se encuentran en
dispositivos más lentos.
De esta forma, el dispositivo o sistema que accede a los datos tiene mejor velocidad de acceso.
El Spooling es un buffer que permite guardar información mientras son transferidos entre dos
dispositivos o un dispositivo y una aplicación.
2007 – Julio
1) ¿Cuál es el beneficio de la multiprogramación?
Sistema Monolítico
Muchos sistemas comerciales no tienen una estructura bien definida. Frecuentemente, tales sistemas
operativos comienzan siendo sistemas pequeños, simples y limitados y luego crecen más allá de su ámbito
original. MS-DOS, por ejemplo, fue diseñado e implementado por unas pocas personas que no tenían ni
idea que iba a terminar siendo tan popular. Fue escrito para proporcionar la máxima funcionalidad en el
menor espacio posible, por lo que no fue dividido en módulos de forma cuidadosa. En MS-DOS, las
interfases y niveles de funcionalidad no están separados. Por ejemplo, los programas de aplicación pueden
acceder a rutinas básicas de E/S para escribir directamente en la pantalla y unidades de disco. Tal libertad
hace que MS-DOS sea vulnerable a programas erróneos (o maliciosos), lo que hace que el sistema
completo falle cuando los programas de usuario fallan. Como el 8088 de Intel para el que fue escrito no
proporcionaba un modo dual ni protección de hardware, los diseñadores no tuvieron más opción que dejar
accesible el hardware base.
Otro ejemplo de estructuración limitada es el sistema operativo UNIX original. Este es otro sistema que
inicialmente estaba limitado por la funcionalidad del hardware. Consta de dos partes separadas: el kernel y
los programas del sistema. El kernel se divide en una serie de interfaces y controladores de dispositivo, que
se han ido añadiendo y ampliando a lo largo de los años, a medida que UNIX ha ido evolucionando.
Podemos ver el tradicional sistema operativo UNIX como una estructura de niveles. Todo lo que está por
debajo de la interfaz de llamadas al sistema y por encima de hardware físico es el kernel. El kernel
proporciona el sistema de archivos, los mecanismos de planificación de la CPU, la funcionalidad de gestión
de memoria y otras funciones del sistema operativo, a través de las llamadas al sistea. En resumen, es una
enorme cantidad de funcionalidad que se combina en un sólo nivel.
Estas estructuras monolíticas eran difíciles de implementar y mantener.
Sistema en Capas
Con el soporte de hardware apropiado, los sitemas operativos pueden dividirse en partes más pequeñas
y más adecuadas que lo que permitían los sistemas originales MS-DOS o UNIX. El sistema operativo puede
entonces mantener un control mucho mayor sobre la computadora y sobre las aplicaciones que hacen uso
de dicha computadora. Los implementadores tienen más libertad para cambiar el funcionamiento interno del
sistema y crear sistema operativo modulares. Con el método de diseño arriba-abajo, se determinan las
características y las funcionalidades globales y se separan en componentes. La ocultación de los detalles a
ojos de los niveles superiores también es importante, dado que deja libres a los programadores para
implementar las rutinas de bajo nivel como prefieran, siempre que la interfaz externa de la rutina
permanezca invariable y la propia rutina realice la tarea anunciada.
Un sistema puede hacerse modular de muchas formas. Un posible método es mediante una estructura
en niveles, en el que el sistema operativo se divide en una serie de capas (niveles). El nivel inferior, nivel 0
es el hardware; el nivel superior N, es la interfaz de usuario. Un nivel de un sistema operativo es una
implementación de un objeto abstracto formado por una serie de datos y por las operaciones que permiten
manipular dichos datos. Un nivel de un sistema operativo típico, consta de estructuras de datos y de un
conjunto de rutinas que los niveles superiores pueden invocar. A su vez, el nivel M puede invocar
operaciones sobre los niveles inferiores.
La principal ventaja del método de nieveles es la simplicidad de construcción y depuración. Los niveles
se seleccionan de modo que cada uno usa funciones (operaciones) y servicios de los niveles inferiores. Este
método simplifica la depuración y la verificación del sistema. El primer nivel puede depurarse sin afectar al
resto del sistema, dado que, por definición, sólo usa el hardware básico (que se supone correcto) para
implementar sus funciones. Una vez que el primer nievel se ha depurado, puede suponerse correcto su
funcionamiento mientras se depura el segundo nivel, etc.. Si se encuentra un error durante la depuración de
un determinado nivel, el error tendrá que estar localizado en dicho nivel, dado que los niveles inferiores a él
ya se han depurado. Por tanto, el diseño e implementación del sistema se simplifican.
Cada nivel se implementa utilizando sólo las operaciones proporcionadas por los niveles inferiores. Un
nivel no necesita saber cómo se implementan dichas operaciones; sólo necesita saber qué hacen esas
operaciones. Por tanto, cada nivel oculta a los niveles superiores la existencia de determinadas estructuras
de datos, operaciones y hardware.
La principal dificultad con el método de niveles es la de definir apropiadamente los diferentes niveles.
Dado que un nivel sólo puede usar los servicios de los nieveles inferiores, es necesario realizar una
planificación cuidadosa. Por ejemplo, el controlador de dispositivo para almacenamiento de reserva (espacio
en disco usado por los algoritmos de memoria virtual) debe estar en un nivel inferior que las rutinas de
gestión de memoria, dado que la gestión dememoria requiere la capacidad de usar el almacenamiento de
reserva.
Otros requisitos pueden no ser tan obvios. Normalmente, el controlador de almacenamiento de reserva
estará por encima del planificador de la CPU, dado que el controlador puede tener que esperar a que se
realicen determinadas operaciones de E/S y la CPU puede asignarse a otra tarea durante este tiempo. Sin
embargo, en un sistema de gran envergadura, el planificador de la CPU puede tener más información sobre
todos los procesos activos de la que cabe en memoria. Por tanto, esta información puede tener que
cargarse y descargarse de memoria, requiriendo que el controlador de almacenamiento de reserva esté por
debajo del planificador de la cPU.
Un último problema con las implementaciones por niveles es que tienden a ser menos eficientes que
otros tipos de implementación. Por ejemplo, cuando un programa de usuario ejecuta una operación de E/S,
realiza una llamada al sistema que será capturada por el nivel de E/S, el cual llamará al nivel de gestión de
memoria, el cual a su vez, llamará al nivel de planificación de la CPU, que pasará a continuación la llamada
al hardware. En cada nivel se pueden modificar los parámetros, puede ser necesario pasar datos, etc. Cada
nivel añade así una carga de trabajo adicional a la llamada al sistema; el resultado neto es una llamada al
sistema que tarda más en ejecutarse que en un sistema sin niveles.
Estas limitaciones han hecho surgir en los últimos años una cierta reacción contra los sistemas basados
en niveles. En los diseños más recientes, se utiliza un menor número de niveles, con más funcionalidad por
cada nivel, lo que proporciona muchas de las ventajas del código modular, a la vez que se evitan los
problemas más difíciles relacionados con la definición e interacción de los niveles.
Una pregunta que surge cuando se estudian los sistema operativo es cómo llamar a las diversas
actividades de la CPU. Los sistemas de procesamiento por lotes ejecutan trabajos, mientras que un
sistema de tiempo compartido tiene programas de usuario o tareas. Incluso en un sistema
monousuario, como MS-Windows, el usuario puede ejecutar varios programas al mismo tiempo. Incluso
aunque el usuario pueda ejecutar un sólo programa a la vez, el sistema operativo puede tener que dar
soporte a sus propias actividades internas programadas, como los mecanismos de gestión de la
memoria. En muchos aspectos, todas las actividades son similares, por lo que a todas ellas las
denominamos procesos.
Como se ha mencionado antes, un proceso es un programa en ejecución. Hay que resaltar que un
proceso es algo más que el código de un programa. Además del código, un proceso incluye también la
actividad actual, que queda representada por el valor del contador de programa y por los contenidos
de los registros del procesador. Generalmente, un proceso incluye también la pila del proceso, que
contiene datos temporales (como los parámetros de las funciones y las direcciones de retorno y las
variables locales), y una sección de datos, que contiene las variables globales. El proceso puede
incluir asimismo, un cúmulo de memoria, que es la memoria que se asigna dinámicamente al proceso
en tiempo de ejecución.
Un programa por sí mismo, no es un proceso; un programa es una entidad pasiva, un archivo que
contiene una lista de instrucciones almacenadas en disco (a menudo denominado archivo ejecutable),
mientras que un proceso es una entidad activa, con un contador de programa que especifica la
siguiente instrucción que hay que ejecutar y un conjunto de recursos asociados. Un programa se
convierte en proceso cuando se carga en memoria un archivo ejecutable. Dos técnicas habituales para
cargar archivos ejecutables son el doble click o llamarlo por línea de comandos.
Aunque puede haber dos procesos asociados con el mismo programa, esos procesos se consideran
dos secuencias de ejecución separadas. Por ejemplo, varios usuarios pueden estar ejecutando copias
diferentes del programa X, o el mismo usuario puede invocar muchas copias del programa Y. cada una
de estas copias es un proceso distinto y, aunque las secciones de texto sean equivalentes, las
secciones de datos, del cúmulo (heap) de memoria y de la pila variarán de unos procesos a otros.
También es habitual que un proceso cree muchos otros procesos a medida que se ejecuta.
Sistemas interactivos:
Para sistemas interactivos, es más conveniente un planificador expropiativo ya que permite atender
más rápido las solicitudes de los usuarios.
Tiempo real:
Un planificador apropiativo no es adecuado cuando se consideran aplicaciones de tiempo real,
porque estas requieren garantías de tiempo de servicio, lo cual sólo es posible si se usa un planificador
no-apropiativo.
Por lo general no son expropiativos ya que son procesos pequeños diseñados para cumplir tareas
específicas en tiempos cortos.
Los algoritmos de gestión de memoria resultan necesarios debido a un requerimiento básico: las
intrucciones que se estén ejecutando deben estar en la memoria física. El primer enfoque para tratar de
satisfacer este requisito consiste en colocar el espacio completo de direcciones lógicas dentro de la
memoria física. Los mecanismos de carga dinámica (paginación bajo demanda, por ejemplo) pueden
ayudar a aliviar esta restricción pero requieren, por lo general, que el programador tome precauciones
especiales y lleve a cabo un trabajo adicional.
La memoria virtual incluye la separación de la memoria lógica, tal como la ve el usuario, con respecto a
la memoria física. Esta separación permite proporcionar a los programadores una memoria virtual
extremadamente grande, con una memoria física de menor tamaño.
La memoria residente de un proceso es la porción de memoria del mismo, que se encuentra cargada en
memoria principal.
6) a- Describa la fórmula del Tiempo Efectivo de Acceso (Effective Access Time – EAT) a memoria.
Sirve para analizar el impacto de la técnica de paginación por demanda en el rendimiento del sistema.
No es la única forma.
La mayor ventaja que tiene este método es liberar al CPU de la transferencia de datos desde el
dispositivo de almacenamiento hacia memoria principal, ya que luego de ingresados los datos necesarios a
la controladora DMA (dirección de memoria origen donde se encuentra la información para que la
controladora trabaje, -cantidad de bytes, dirección de memoria de destino de los datos, etc-), la CPU se
deslinda de dicho trabajo, pasando a realizar otras tareas; cuando la controladora ha terminado con la
solicitud requerida, interrumpe a la CPU, avisándole que el pedido está completo y procede a su siguiente
asignación.
1- Se indica al controlador de dispositivo que transfiera datos del disco al buffer situado en la dirección X.
2- El controlador de dispositivo le dice a la controladora de disco que transfiera N bytes desde el disco al
buffer situado en la dirección X.
3- La controladora de disco inicia una transferencia de DMA.
4- La controladora de disco envía cada byte a la controladora de DMA.
5- La controladora de DMA transfiere los bytes al buffer X. incrementando la dirección de memoria y
decrementando N hasta que N == 0.
6- Cuando N == 0, la controladora DMA interrumpe al procesador (CPU) para señalizar la finalización de la
transferencia.
10) a- ¿Qué tipo de mejoras brindan los sistemas RAID (redundant array of inexpensive disk)?
Dado que las unidades de disco han ido evolucionando para hacerse más pequeñas y más baratas,
ahora es económicamente factible conectar muchos discos a un mismo sistema informático. Disponer de un
gran número de discos en un sistema permite mejorar la velocidad con la que los datos pueden leerse o
escribirse, siempre y cuando los discos se operen en paralelo. Además, esta configuración también puede
permitir mejorar la fiabilidad del almacenamiento de los datos, ya que puede almacenarse información
redundante en ese conjunto de múltiples discos. De este modo, el fallo de uno de los discos no conduce a la
pérdida de datos. Existen diversas técnicas de organización de discos, colectivamente denominadas
matrices redundantes de discos de bajo coste (RAID, redundant arrays of inexpensive disks), que se
utilizan comunmente para resolver estas cuestiones de velocidad y fiabilidad.
En el pasado, las matrices RAID compuestas de discos pequeños y baratos se contemplaban como una
alternativa económica a los discos de gran tamaño, que eran bastante caros; hoy en día los sistemas RAID
se utilizan debido a su mayor fiabilidad y a su mayor velocidad de transferencia de datos, más que por
razones económicas. Por esta razón la I de RAID ahora quiere decir “independientes” en lugar de
“inexpensive” (de bajo coste)
Niveles RAID.
La duplicación en espejo proporciona
una alta fiabilidad, pero resulta muy cara.
La distribución en bandas proporciona
una alta velocidad de transferencia de
datos, pero no mejora la fiabilidad. Se han
propuesto numerosos esquemas para
proporcionar redundancia a un menor
coste utilizando la idea de destribución en
bandas combinada con bits de “paridad”.
Estos esquemas tienen diferentes tipos
de compromisos entre el coste y las
prestaciones y se clasifican de acuerdo a
una serie de niveles denominados
niveles RAID. En la figura, P indica bits
de corrección de errores y C indica una
segunda copia de los datos. En todos los
casos mostrados en la figura, estamos
almacenando una cantidad de datos
equivalente a la capacidad total de 4
discos y los discos adicionales se utilizan
para almacenar información redundante
con vistas a la recuperación de fallos.
- RAID nivel 1: Este nivel de RAID, hace referencia a la duplicación en espejo de los discos. Figura
anterior (b).
- RAID nivel 2: También conocido como organización con códigos de corrección de errores (ECC) de
tipo memoria. En los sistemas de memoria hace ya tiempo que se detectan ciertos errores
utilizando bits de paridad. Cada byte de un sistema de memoria puede tener un bit de paridad
asociado que registra si el número de bits del byte con valor igual a 1 es par (paridad = 0) o impar
(paridad = 1). De este modo, el sistema de memoria puede detectar todos los errores de un único
bit. Los esquemas de corrección de errores almacenan dos o más bits adicionales y pueden
recontruir los datos si resulta dañado un único bit. La idea de los códigos ECC puede usarse
directamente en las matrices de discos, distribuyendo los bytes entre los distintos discos. Este
esquema se ve en la figura (c), en dónde los discos etiquetados con la letra P almacenan los bits
de corrección de errores. Si uno de los discos falla, los restantes bits del byte y los bits de
corrección de errores asociados pueden leerse en otros discos y utilizarse para reconstruir los
datos dañados. Este mecanismo solamente requiere 3 discos adicionales para 4 discos de datos.
- RAID nivel 3: También llamado organización de paridad con entrelazado de bits, representa una
mejora con respecto al nivel 2, porque tiene en cuenta el hecho que, a diferencia de los sistemas
de memoria, las controladoras de disco pueden detectar si un sector ha sido leído correctamente,
por lo que puede utilizarse un único bit de paridad tanto para la detección como para la corrección
de errores. La idea es la siguiente: si uno de los sectores está dañado, sabemos exactamente que
sector es, y podemos determinar si algún bit del sector es un 1 o un 0 calculando la paridad de los
bits correspondientes de los sectores almacenados en los otros discos. Si la paridad de los bits
restantes es igual a la paridad almacenada, el bit que falta será un 0; en caso contrario será un 1.
El RAID nivel 3 ofrece el mismo nivel de protección que el nivel 2, pero resulta más barato en
cuanto al número de discos adicionales requeridos (sólo requiere un disco adicional) por lo que el
nivel 2 nunca es utilizado en la práctica. Ver figura (d).
La matriz también tiene un caché NVRAM para almacenar los bloques mientras se leen de
manera de actuar como un buffer de escritura para la transferencia de datos entre la controladora
y los discos físicos. Esta combinación puede hacer que las soluciones RAID con paridad sean casi
tan rápidas como las que no utilizan paridad.
- RAID nivel 4: También llamado organización de paridad con entrelazado de bloques, utiliza una
distribución en bandas de nivel de bloque, como en RAID 0, y además mantiene un bloque de
paridad en un disco separado, con información de paridad para los bloques correspondientes de
los otros N discos. Ver figura (e). Si uno de los discos falla, puede usarse el bloque de paridad ocn
los bloques correspondientes de los otros discos, para restaurar los bloques del disco fallido.
Una lectura de un bloque sólo accede a un disco, permitiendo que los otros discos procesen
otras solicitudes. Así, la tasa de transferencia de datos para cada acceso es más lenta, pero
pueden realizarse múltiples accesos de lectura en paralelo, lo que proporciona una mayor tasa de
E/S global. Las tasas de trasnferencia para las lecturas de grandes volúmenes de datos son altas,
ya que pueden leerse todos los discos en paralelo; las escrituras de grandes volúmenes de
información también tienen altas tasas de transferencia, ya que los datos y la paridad pueden
escribirse en paralelo.
Este nivel raid permite añadir discos a una matriz RAID de forma completamente
transparente. Si los discos añadidos se inicializan con bloques que contengan valores todos
iguales a cero, entonces, el valor de la paridad no se modifica y el conjunto RAID seguirá siendo
correcto.
- RAID nivel 5: También llamado paridad distribuída con entrelazado de bloque, difiere del nivel 4 en
que se distribuyen los datos y la información de paridad entre los N + 1 discos, en lugar de
almacenar los datos en N discos y la información de paridad en un disco. Para cada bloque, uno
de los discos almacena la información de paridad y los otros almacenan los datos. Ver figura (f),
en donde se puede ver que los valores de paridad se encuentran distribuídos entre todos los
discos. Un bloque de paridad no puede almacenar información de paridad para bloques situados
en el mismo disco, porque un fallo del disco provocaría una pérdida de los datos, además de
perderse la información de paridad, por lo que dicha pérdida no sería recuperable. Distribuyendo la
información de paridad entre todos los discos del conjunto RAID 5 evita el uso potencial excesivo
de un único disco de paridad que puede tener lugar en RAID 4. El sistema RAID 5 es el sistema
RAID con paridad que más comunmente se usa.
- RAID nivel 6: También denominado esquema de redundancia P+Q es bastante similar a RAID 5, pero
almacena información redundante adicional para proteger los datos frente a múltiples fallos de
disco. En lugar de emplearse información de paridad, se utilizan códigos de corrección de errores,
tales como los códigos Reed-Solomon. Ver esquema en la figura (g). En este esquema se
almacenan 2 bits de datos redundantes por cada 4 bits de datos y el sistema puede tolerar que
fallen dos de los discos.
- RAID nivel 0+1: Este esquema de organización hace referencia a una combinación de los niveles RAID
0 y RAID 1. Raid 0 proporciona la mejora en las prestaciones, mientras que RAID 1 proporciona
fiabilidad. Generalmente este nivel proporciona un mejor rendimiento que RAID 5. Resulta común
en aquellos entornos en los que son importantes tanto las prestaciones como la fiabilidad.
Desafortunadamente, este esquema dobla al número de discos necesarios para el
almacenamiento, al igual que RAID 1, por lo que también es más caro. En RAID 0+1, se distribuye
en bandas un conjunto de discos y luego ese conjunto se duplica en espejo en otro conjunto
equivalente.
2008 – Febrero
1) En un equipo multiprocesador, ¿qué beneficio se obtiene al tener un sistema operativo simétrico
frente a uno asimétrico?
Los sistemas SMP (multi-procesamiento simétrico) se caracterizan porque permiten que cualquier
procesador trabaje en cualquier tarea, sin importar su localización en memoria.
2) Realice y describa un esquema de los estados y las transiciones entre los estados de los
procesos en un sistema.
4) Un sistema cuenta con tres tipos de procesos: de tiempo real, procesamiento por lotes (batch) y
de usuario. Desarrolle un algoritmo de planificación adecuado para este sistema, mencionando
las características más relevantes.
El algoritmo más adecuado de planificación para estos tipos de procesos es el implementado por colas
multinivel. Se contaría con 3 niveles, uno para cada tipo de proceso en los cuales asignaremos diferentes
características de asignación de CPU.
En la cola de mayor prioridad colocaría a los procesos de tiempo real ya que estos precisan completar
su tarea en un período de tiempo determinado, de lo contrario se podrían presentar problemas en el
sistema. Este nivel de colas, no será apropiativo, es decir que luego de entregada la CPU a un proceso de
este tipo, no se la retirará hasta que este la libere voluntariamente lo que sería un tipo de planificación FIFO.
En la de prioridad intermedia, colocaría a los procesos de usuario, permitiendo que se les pueda
expropiar la CPU en caso de llegar un proceso de tiempo real y con una asignación de CPU de tipo ROUND
ROBIN entre ellos, por ejemplo.
Por último, en la cola de menor prioridad colocaría a los procesos batch, ya que estos no requieren
intervención del usuario ni tienen cotas de tiempo para procesar. A estos procesos se les retirará la CPU
(planificador expropiativo) en caso de llegar un proceso de mayor prioridad (usuario / tiempo real) pero no
permitiremos expropiación entre procesos de este tipo y con un esquema de asignación FIFO.
5) Describa las cuatro condiciones que, si ocurren simultáneamente, pueden generar un deadlock.
7) En un sistema que cuenta con el esquema de memoria virtual con paginación, cómo se asegura
que no se acceda a la memoria de otro proceso?
La protección de memoria en un entorno paginado se consigue mediante una serie de bits de prtección
asociados con cada marco. Normalmente, estos bits se mantienen en la tabla de páginas.
Uno de los bits puede definir una página como de lectura-escritura o sólo lectura. Toda referencia a
memoria pasa a través de la tabla de páginas con el fin de encontrar el número de marco correcto. Al mismo
tiempo que se calcula la dirección física, pueden comprobarse los bits de protección para verificar que no se
esté haciendo ninguna escritura en una página de sólo lectura. Todo intento de escribir una página de sólo
lectura provocará una interrupción hardware al sistema operativo (una violación de protección de memoria).
Un sistema de paginación por demanda es similar a un sistema de paginación con intercambio. Los
procesos residen en memoria secundaria, y cuando queremos ejecutarlo lo pasamos por intercambio a la
memoria, pero en vez de intercambiar todo el proceso, usamos un intercambio perezoso (nunca intercambia
una página a memoria si no se va a necesitar).
Es necesario contar con soporte de hardware, para poder distinguir entre las páginas que estánen
memoria y las páginas que están en disco. Esto se puede lograr con el bit de validez-invalidez, válido
indicará que la página está en la memoria (y es válida, o sea, está dentro de las direcciones del proceso), no
válida indicará que no es válida o no está en memoria.
Si adivinamos correctamente cuales son las páginas que el proceso va a utilizar, y solamente cargamos
esas, entonces el programa ejecutará normalmente como si hubiese sido cargado totalmente. Si el proceso
intenta acceder a una página no válida (no es error de direccionamiento) causa una trampa de fallo de
página (page fault) y le transfiere el control al sistema operativo y ejecuta el procedimiento de carga de
página a memoria.
El hardware que sirve para apoyar la paginación por demanda es el mismo que apoya la paginación y el
intercambio:
- Tabla de páginas: Marca las entradas válidas y no válidas con el bit de validez-no validez.
- Memoria secundaria: Contiene las páginas que no están en memoria principal.
Además de esto, se requiere una buena cantidad de software y algunas restricciones arquitectónicas
como la necesidad de poder reiniciar una instrucción después de un fallo de página. Y como peor caso, si el
fallo ocurrió mientras se está obteniendo un operando, es preciso volver a obtener la intrucción y
decodificarla.
10) Describa dos técnicas utilizadas para administrar el espacio libre (bloques libres) que hay en los
discos.
11) Sea un disco con 32 cilindros numerados del 0 al 31, y la siguiente cola de pedidos: 12, 18, 1, 15,
2, 13, 17, 6, 22 y 16. Haga una tabla que muestre la secuencia de planificación de atención de los
pedidos para los algoritmos First Come First Served, Shortest Seek Time First, SCAN, C-SCAN,
LOOK y C-LOOK. Suponga que la cabeza del disco está ubicada sobre el cilindro 30. Nota: En los
algoritmos que pueda haber más de una opción, elija una y aclare el criterio.
(*1) se tomó en consideración que al momento de llegar al cilindro más alto se retomen los trabajos desde el
cilindro 0.
2008 – Marzo
1) Describa brevemente las ventajas/desventajas de los sistemas operativos diseñados con el
enfoque monolítico frente al enfoque en capas.
3) Realice un diagrama mostrando los principales campos del descriptor de proceso (PCB -
Process Control Block) asumiendo que está en un sistema que reconoce hilos a nivel del
sistema operativo.
Es el módulo que proporciona el control de la CPU a los procesos seleccionados por el planificador a
corto plazo. Esta función implica lo siguiente:
- Cambio de contexto.
- Cambio al modo usuario.
- Salto a la posición correcta dentro del programa de usuario para reiniciar dicho programa.
El despachador debe ser lo más rápido posible, ya que se invoca en cada conmutación de proceso. El
tiempo que tarda el despachador en detener un proceso e iniciar la ejecución de otro se conoce como
latencia de despacho.
5) Sean los procesos y tiempos de procesador a utilizar que están en la siguiente Tabla:
Proceso Tiempo
P0 5
P1 8
P2 7
P3 9
Asumiendo un sistema monoprocesador que utiliza un esquema de planificación de tipo Round-
Robin con quantum igual a 3 unidades de procesador.
a- Dibuje una gráfica de cómo varía en el tiempo el uso del procesador entre los procesos.
b- Brinde los tiempos de retorno (turnaround time) y espera (waiting time) de todos los procesos.
El tiempo de retorno es el intervalo de tiempo desde que un proceso es cargado, hasta que finaliza su
ejecución.
El tiempo de espera es la suma de los intervalos de tiempo que un proceso estuvo en la cola de procesos
listos (ready queue). Es el tiempo total - el tiempo de proceso.
6) ¿Por cuales etapas debe pasar un código fuente escrito en un lenguaje de programación de alto
nivel antes de poder ser ejecutado en un sistema operativo?
Los algoritmos de reemplazo de marcos, son útiles para decidir que páginas pueden ser sacadas de
memoria cuando se necesita cargar una nueva y ya no hay espacio.
El modelo de Working Set es útil en la medida que impide la hiperpaginación y al mismo tiempo matiene
el grado de multiprogramación con el mayor valor posible. De este modo se optimiza la tasa de utilización de
la CPU.
Se basa en el supuesto de localidad. Este modelo emplea un parámetro D para definir la ventana
del conjunto de trabajo. De lo que se trata es de examinar las D referencias a páginas más recientes, y
esas D páginas son el conjunto de trabajo. Si una página está en uso activo, estará en el conjunto de
trabajo; si ya no se está usando, saldrá de dicho conjunto, D unidades de tiempo después de su última
referencia. Así, el conjunto de trabajo es una aproximación de localidad del programa.
El sistema operativo vigila el conjunto de trabajo de cada proceso y le asigna un número de marcos
igual a su tamaño. Si hay marcos libres, puede iniciar otro proceso. Si la suma de los tamaños de los
conjuntos de trabajo aumenta hasta exceder el número total, el sistema operativo suspenderá un
proceso (el cual será continuado más tarde).
11) ¿Los sistemas RAID (Redundant Array of Inexpensive Disk), a qué mejoras apuntan?
12) Describa el método de Entrada/Salida Programada (Programmed I/O). Discuta sus ventajas y
desventajas.
Para comunicarse, el anfitrión espera hasta que el dispositivo se desocupe. Cuando lo hace, el anfitrión
pone los datos para que el dispositivo procese la entrada y la salida, y cuando el controlador percibe que se
han puesto datos, procesa la E/S pedida por el anfritrión.
En este modelo el anfitrión está en espera activa o escrutinio. Si el controlador y el dispositivo son
rápidos este método es razonable, pero si la espera es larga, lo mejor es que el anfitrión conmute a otra
tarea. Es más eficiente que el controlador del hardware notifique a la CPU cuando el dispositivo esté listo
para recibir servicio, en vez de exigirle a la CPU que consulte repetidamente para detectar una finalización
de E/S.
13) ¿Qué servicios brinda el núcleo del sistema operativo para el manejo de Entrada/Salida?
Un kernel proporciona muchos servicios relacionados con la E/S. varios de los servicios (planificación,
almacenamiento en buffer, almacenamiento en caché, gestión de colas, reserva de dispositivo y tratamiento
de errores) son proporcionados por el subsistema de E/S del kernel y se construyen sobre la infraestructura
formada por el hardware y los controladores de dispositivo. El subsistema de E/S también es responsable
de protegerse a sí mismo de los procesos erróneos y de los usuarios maliciosos.
- Almacenamiento en cache: Una cache es una región de memoria rápida que alberga copias
de ciertos datos. El acceso a la copia almacenada en cache es más eficiente que el acceso al
original. El almacenamiento en buffer y el almacenamiento en cache son funciones bien
diferenciadas.
proporciona una interfaz de control que permite a los usuarios y a los administradores del
sistema visualizar la cola de solicitudes de impresión, eliminar trabajos no deseados para que
no se impriman, suspender impresiones en curso mientras se resuelve algún error, etc.
- Tratamiento de errores: Un sistema operativo que utilice memoria protegida puede defenderse
frente a muchos tipos de errores de hardware y de las aplicaciones, de modo que cada pequeño
error no provoque un fallo completo del sistema. Los dispositivos y las transferencias de E/S
pueden fallar de muchas formas, debido a razones transitorias (sobrecarga de red, por ejemplo)
o a razones “permanentes” (falla una controladora de disco). Los sistemas operativos pueden a
menudo compensar de manera efectiva los fallos transitorios, realizando nuevamente la
solicitud sobre el dispositivo, siempre que el protocolo así lo indique. Desafortunadamente, si un
componente importante experimenta un fallo de carácter permanente, resulta poco probable
que el sistema operaivo pueda recuperarse.
- Protección de E/S: Los errores están estrechamente relacionados con las cuestiones de
proteccón. Un proceso de usuario puede intentar incidental o deliberadamente interrumpir la
operación normal de un sistema, tratando de ejecutar instrucciones de E/S ilegales. Podemos
utilizar varios mecanismos para garantizar que ese tipo de problemas no aparezcan en el
sistema.
Para evitar que los usuarios realicen operaciones de E/S ilegales, definimos todas las
instrucciones de E/S como instrucciones privilegiadas. Así los usuarios no pueden ejecutar
instrucciones de E/S directamente, sino que tienen que hacerlo a través del sistema operativo.
Para llevar a cabo una operación de E/S, el programa de usuario ejecuta una llamada al
sistema para solicitar que el sistema operativo realice esa operación de E/S en su nombre. El
sistema operativo, ejecutándose en modo monitor, comprueba que la solicitud es válida y, en
caso afirmativo realiza la E/S solicitada. A continuación el sistema operativo devuelve el control
al usuario.
Además, habrá que utilizar el sistema de protección de memoria para proteger todas las
ubicaciones de memoria mapeada y de los puertos de E/S frente a los accesos de los usuarios.
2008 – Julio
1) ¿Qué es un sistema operativo?
Resp 1.
Es un programa o conjunto de programas que hacen más eficiente, amigable y productivo el uso de un
computador (hardware) permitiendo ejecutar aplicaiones de usuario.
Resp 2.
- Según sus procedimientos: Un sistema operativo es un conjunto de programas, rutinas y
procedimientos manuales y automáticos que administran los recursos de un sistema de
cómputo.
- Según sus funciones: Un programa o conjunto de programas es llamado sistema operativo si
cumple las funciones de:
Inicialización de la máquina.
Servir de interfase hombre-máquina (máquina extendida).
Administración de recursos del sistema.
Resp 3.
Es el programa individual (núcleo o kernel) que se está ejecutando todo el tiempo en el computador.
Resp 4.
Un sistema operativo es un programa que administra el hardware de una computadora. También
proporciona las bases para los programas de aplicación y actúa como un intermediario entre el usuario y el
hardware de la computadora. Un aspecto sorprendente de los sistemas operativos es la gran variedad de
formas en que llevan a cabo estas tareas. Algunos sistemas operativos se diseñan para ser prácticos, otros
para ser eficientes y otros para ser ambas cosas.
Volviendo al tema, sería conveniente un sistema operativo simétrico ya que viendo las características de
ambos (ver exámen Marzo 2004. Pregunta 1(a)) es más conveniente que cada uno de los procesadores
ejecute su propia copia del sistema operativo.
4) ¿Qué estado de proceso debe tener un proceso cuando realiza una invocación a un llamado a
sistema? Justifique.
El único estado en el cual un proceso puede realizar un llamado al sistema es en ejecución, ya que si se
encuentra en algún otro estado, no estará haciendo uso del CPU, por lo que no estará ejecutando
instrucciones.
El despachador deberá realizar los siguientes pasos al momento de realizar un cambio de contexto:
En computación, el loader o cargador del sistema es la parte del sistema operativo que es responsable
por una de las etapas escenciales en el proceso de inicialización de un programa, que es, arrancar el
programa comenzando por leer los contenidos de los archivos ejecutables y cargarlos a memoria, después
debe llevar a cabo las tareas preparatorias, después de las cuales al código del programa finalmente le es
permitido ejecutar, y es iniciado cuando el sistema operativo le cede el control al programa recién cargado.
8) Sea un
sistema de 16
bits, que
utiliza memoria virtual con páginas de 256 bytes, y con una estructura de tabla de páginas de
dos niveles. Construya una dirección virtual para acceder al byte 5119.
Nota:
- La componente para el número de página se debe dividir a la mitad (para el primer y
segundo nivel).
- Trabaje siempre con valores que empiezan en 0. Ej. El primer valor de la entrada de una
tabla es 0.
2) De (1) deducimos que precisamos 8 bits para el desplazamiento )para representar las 256
posiciones 2^8 = 256).
3) Nos restan 8 bits = 16 - 8 para los dos niveles de páginas. Como dice que se debe dividir
a la mitad, las páginas de primer y de segundo nivel tienen 4 bits cada una.
4) Dividiendo 5119 entre 256 obtenemos 19 páginas completas y restan 255 bytes de la
página 20 que no está completa. Por lo que la página buscada es la número 19
(acordarse de que arranca en 0!!!!!!).
5) Como solamente puedo representar hasta 16 páginas con los bits de la tabla de 2do
nivel, necesito utilizar los bits de la tabla de 1er. nivel de la siguiente forma:
- Divido 20 entre 16 = 1 y restan 4. Esto corresponde a que se encontrará en la segunda
tabla de páginas de 1er nivel. Esto corresponde a que los primeros 4 bits de la
dirección serán 0001
- Los bits correspondientes a la página de segundo nivel son la representación del
resto de la división: 4. Por lo que los bits correspondientes al 2do nivel de páginas
serán 0011 (acordarse que arranca de 0!!!!!).
9) En un sistema que implementa memoria virtual, de qué forma dos hilos (threads) de un mismo
proceso pueden compartir información (estructuras de datos).
Por omisión, los threads o hilos de un mismo proceso comparten la memoria y los recursos del proceso
al que pertentecen.
10) ¿Los sistemas RAID (Redundant Array of Inexpensive Disk), a qué mejoras apuntan?
11) ¿Qué servicios brinda el núcleo del sistema operativo para el manejo de Entrada/Salida?
2008 – Diciembre
1) Describa la taxonomía de Flynn en cuanto a los sistemas paralelos.
La taxonomía de Flynn caracterizó las arquitecturas de computadores y sobre que datos se están aplicando.
Modo Dual: Se provee de al menos dos modos de ejecución: “modo usuario” y “modo supervisor”. En el
modo usuario (user mode), se pueden ejecutar un conjunto reducido de instrucciones de hardware. Los
procesos a nivel de usuario ejecutan en este modo. Por otra parte, en modo supervisor (monitor mode)
todas las instrucciones de hardware están disponibles. El sistema operativo es el único que debe ejecutar
en este modo.
Un bit, llamado mode bit, es agregado al hardware para indicar el modo actual.
La ventaja de un sistema operativo que soporta hilos a nivel del sistema operativo en un sistema multi-
core es que se pueden ejecutar diferentes hebras del mismo proceso en diferentes CPUs al mismo tiempo,
esto implica que las tareas que realicen dichos hilos (en CPUs separadas) se realizarán de manera
concurrente, lo que acortará el tiempo de espera de los resultados de cada uno de los hilos.
Por otra parte, se tiene también la ventaja de que en caso que un hilo se bloquee esperando por una
operación de E/S u otra llamada al sistema, los demás hilos no se bloquearán y podrán continuar
ejecutando, y también, en caso que haya otra hebra del mismo proceso esperando por CPU, ésta podrá
pasar a ejecutar en la CPU liberada recientemente ya que solamente se ha bloqueado el hilo que hizo la
llamada y no todo el proceso al que pertenecía el hilo bloqueado.
6) Sea un sistema monoprocesador que utiliza un planificador de tipo round-Robin con quantum =
2. Si se tiene la siguiente secuencia de ejecución de instrucciones para los procesos P0, P1 y P2:
P0: C C C C E E C
P1: C E C C C
P2: E C C C C
Dibuje como será la distribución del recurso procesador en una línea del tiempo. A su vez,
mencione en que estado está cada instante del tiempo.
Nota:
8) Sea un sistema con 4 marcos y la siguiente secuencia de accesos a páginas por parte de un
proceso:
1, 2, 3, 4, 5, 3, 4, 1, 6, 7, 8, 7, 8, 9, 7, 8, 9, 5, 4, 5, 4, 2
a- ¿Cuántos fallos de página ocurrirán si el algoritmo de reemplazo a utilizar es el óptimo?
Marco/Tiempo 1 2 3 4 5 6 7 8 9 10 11
Marco 1 1 6 8 4
Marco 2 2 5 2
Marco 3 3 7
Marco 4 4 9
Marco/Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13
Marco 1 1 5 8 2
Marco 2 2 1 9
Marco 3 3 6 5
Marco 4 4 7 4
10) En una arquitectura de 16 bits con paginación y marcos (frames) de 4096 bytes. Proponga un
sistema de traducción de memoria virtual a física.
Dado que las páginas son de 4096 bytes, necesito 12 bits para representar el desplazamiento dentro de
éstas (2^12 = 4096).
Me restan 4 bits para indicar la página, por lo que solamente puedo direccionar 16 páginas o frames.
p d
0000 0000 0000 0000
Utilizaría paginación en un solo nivel.
11) Describa para que es útil un servicio de buffering a nivel del subsistema de entrada/salida.
El buffering es un lugar de memoria que guarda información (datos) mientras son trasnferidos entre dos
dispositivos o un dispositivo y una aplicación.
Este servicio es útil a nivel del subsistema de E/S ya que sirve para:
2009 – Febrero
1) Describa los sistemas de multiprocesadores simétricos y asimétricos.
- Round Robin: Es un algoritmo de planificación por turnos, diseñado especialmente para los
sistemas de tiempo compartido. En este tipo de sistemas se define una pequeña unidad de
tiempo, denominada “cuanto de tiempo”, o franja temporal. La cola de procesos preparados se
trata como una cola circular. El planificador de la CPU recorre la cola de procesos preparados,
asignando la CPU a cada proceso durante un intervalo de tiempo de hasta un cuanto de tiempo.
La memoria virtual incluye la separación de la memoria lógica, tal como la percibe el usuario, con
respecto a la memoria física. Esta separación permite proporcionar a los programadores una memoria
virtual extremadamente grande, cuando sólo está disponible una memoria física de menor tamaño.
Además de separar la memoria lógica de la memoria física, la memoria virtual también permite que
dos o más procesos compartan los archivos y la memoria mediante mecanismos de compartición de
páginas. Esto proporciona las siguientes ventajas:
- Las bibliotecas del sistema pueden ser compartidas por numerosos procesos mapeando el
objeto compartido sobre un espacio de direcciones virtual. Aunque cada proceso considera que
las bibliotecas forman parte de su propio espacio de direcciones virtuales, las páginas reales de
memoria física en las que residen, las bibliotecas se mapean en modo sólo lectura dentro del
espacio de cada proceso con el cual se monten.
- De forma similar, la memoria virtual permite a los procesos compartir memoria (comunicación
con memoria compartida). La memoria virtual permite que un proceso cree una región de
memoria que luego pueda compartir con otro proceso. Los procesos que compartirán esta
región la considerarán parte de su espacio de direcciones virtual, aunque en realidad las
páginas físicas reales de la memoria estarán compartidas entre los distintos procesos.
- La memoria virtual puede permitir que se compartan páginas durante la creación de procesos
mediante la llamada al sistema fork(), acelerando así la tarea de creación de procesos.
6) Sea un sistema de 32 bits que maneja memoria virtual con paginación. Las direcciones virtuales
se componen de 20 bits para direccionar la página y 12 para el desplazamiento.
a- ¿De que tamaño son las páginas?
Como es un sistema de paginación, los frames son exactamente del mismo tamaño que las páginas =
4KB.
c- Si las entradas de la tabla de páginas son de 4 bytes y cada tabla es del tamaño de una
página, ¿Cómo se distribuye la componente de 20 bits para direccionar las páginas?
(2^2 bytes * 2^20 entradas) / 2^12 bytes = 2^10 entradas por página
Tengo 2^20 entradas a distribuir entre tablas que soportan 2^10 entradas => 2^20 / 2^10 = 2^10
Por consiguiente tengo 2 niveles de paginación con 2^10 entradas por nivel.
9) ¿ Qué ventajas ofrecen los sistemas RAID (Redundant Array of Inexpensive Disk) ?
Disponer de un gran número de discos en un sistema permite mejorar la velocidad con la que los datos
pueden leerse o escribirse, siempre y cuando los discos operen en paralelo. Además, esta configuración
también puede permitir mejorar la confiabilidad del almacenamiento de los datos ya que puede
almacenarse información redundante en ese conjunto de múltiples discos. De este modo, el fallo de uno
de estos discos no conduce a la pérdida de datos. Existen diversas técnicas de organización de discos
las cuales son utilizadas para resolver cuestiones de velocidad y fiabilidad.
10) Describa dos métodos para efectuar operaciones de E/S y de un ejemplo para que tipo de
sistema es útil.
- Sondeo (polling): Es un método de espera activa ya que se ejecuta un loop leyendo una y otra
vez el registro de estado del dispositivo hasta que el bit de ocupado se desactiva. Si la
controladora y el dispositivo son de alta velocidad, este método resulta razonable, pero si la
espera puede ser larga, quizás convenga más que el host conmutara a otra tarea. (Ejemplo:
Internet Polling Protocol (PolP): este protocolo requiere que un cliente p esté revisando cada
cierto tiempo si el valor de un objeto X ha sido actualizado. Cualquier acceso a X antes de que
se supere ese margen se satisface con la caché local de p).
- DMA: Dado que para realizar transferencias de gran tamaño, como por ejemplo una unidad de
disco, parece bastante poco apropiado usar un procesador de propósito general (que es
generalmente caro) para comprobar el estado de dicha transferencia y para escribir datos en un
registro de una controladora de byte en byte (E/S programada PIO). Se trata de evitar la
sobrecarga de la CPU principal con tareas de tipo PIO, asignando parte de este trabajo en un
procesador de propósito especial denominado controladora de DMA. Para iniciar una
transferencia de DMA, el host describe un bloque de comando DMA en la memoria. Este bloque
contiene un puntero al origen de una transferencia, un puntero al destino de la transferencia y
un contador del número de bytes que hay que transferir. La CPU escribe la dirección de este
bloque de comandos en la controladora DMA y luego continúa realizando otras tareas. La
controladora DMA se encarga entonces de operar el bus de memoria directamente, colocando
direcciones en el bus para realizar las transferencias sin ayuda de la CPU principal. Una vez
finalizada la transferencia completa, la controladora DMA interrumpe a la CPU. (Ejemplo: Disco
Duro)
2009 – Julio
1) ¿Qué entiende por sistema operativo ?
El sistema operativo es un software encargado de controlar y coordinar el uso del hardware entre
los diversos programas de aplicación. El sistema de computación tiene muchos recursos y el sistema
operativo actúa como gestor de esos recursos para distintos usuarios, decidiendo que solicitudes
atenderá inmediatamente, para operar de manera eficiente y justa.
Otra definición de sistema operativo es el programa individual (núcleo o kernel) que se está
ejecutando todo el tiempo en el computador.
Los sistemas operativos se crearon para facilitar y hacer lo más eficiente posible el uso del hardware.
Sistemas paralelos.
- Multiprocesamiento asimétrico: cada procesador tiene una tarea específica; un procesador
maestro controla el sistema y el resto de los procesadores esperan que el maestro les de
instrucciones o tienen asignadas tareas predefinidas. El procesador maestro planifica el trabajo
de los procesadores esclavos y se lo asigna.
- Multiprocesamiento simétrico: cada procesador realiza todas las tareas correspondientes al
sistema operativo; todos los procesadores son iguales, no existe una relación maestro esclavo
entre los procesadores..
La ventaja de estos modelos es que se pueden ejecutar simultáneamente muchos procesos (tantos
como procesadores se tenga) sin que se produzca un deterioro significativo del rendimiento. Sin
embargo hay que controlar cuidadosamente la E/S para asegurar que los datos lleguen al procesador
adecuado.
También, dado que las CPUs están separadas, una puede estar en un período de inactividad y otra
sobrecargada, dando lugar a ineficiencias; estas situaciones se pueden evitar si los procesadores
comparten ciertas estructuras de datos. Un sistema multiprocesador de este tipo permitirá que los
procesos y los recursos (como la memoria) sean compartidos dinámicamente entre los distintos
procesadores, lo que permite disminuir la varianza entre la carga de trabajo de los procesadores.
Los procesos que se ejecutan en un sistema pueden ser de dos tipos, independientes o procesos
cooperativos. Un proceso es independiente, si no puede afectar ni verse afectado por los restantes
procesos que se ejecutan en el sistema (no comparte datos con ningún otro proceso). Por otra parte, los
procesos cooperativos, si pueden verse afectados o afectar a los demás procesos que se ejecutan en el
sistema. Evidentemente, cualquier proceso que comparte datos con otros procesos es un proceso
cooperativo.
Hay varias razones para proporcionar un entorno que permita la cooperación entre procesos:
Compartir información: Dado que varios usuarios pueden estar interesados en la misma información
(por ejemplo un archivo compartido), debemos proporcionar un entorno que permita el acceso
concurrente a dicha información.
Acelerar cálculos: Si deseamos que una determinada tarea se ejecute rápidamente, debemos dividirla
en subtareas, ejecutándose cada una de ellas en paralelo con las demás. Es imiportante destacar que
tal aceleración sólo se puede conseguir si la computadora tiene múltiples elementos de procesamiento,
como por ejemplo varias CPUs o varios canales de E/S.
Conveniencia: Incluso un solo usuario puede querer trabajar en muchas tareas al mismo tiempo. Por
ejemplo, un usuario puede estar editando, imprimiendo y compilando en paralelo.
a- Realice un esquema en el tiempo sobre como será distribuido el recurso procesador entre los
procesos en el tiempo.
p1 p1 p3 p2 p2 p2 p3 p2
+---+---+---+---+---+---+---+---+ …
0 1 2 3 4 5 6 7 8
TE p1 = 8, TE p3 = 6
o
... p1 p3 p3 p1 p1
+--+---+---+---+---+---+
8 9 10 11 12 13
TE p1 = 8, TE p3 = 5
o
... p3 p1 p3 p1 p1
+--+---+---+---+---+---+
8 9 10 11 12 13
TE p1 = 8, TE p3 = 5
o
... p3 p1 p1 p3 p1
+--+---+---+---+---+---+
8 9 10 11 12 13
TE p1 = 8
TE p2 = 1
TE p3 = 6
5) a- ¿ Qué ventajas presenta un sistema operativo que brinde soporte a hilos (threads) a nivel del
sistema operativo ?
Provee un mayor grado de concurrencia (modelo uno-a-uno) ya que permite que los otros thread
continúe su ejecución cuando uno de ellos hace una llamada al sistema y se bloquea. También permite
a múltiples threads, correr en paralelo en diferentes procesadores.
En el caso de tener hilos a nivel de usuario es necesario tener un planificador a este nivel ya que el
sistema operativo ve a los threads a nivel de usuario como un único thread, por lo que cuando asigne el
procesador a dicha tarea, no elegirá un thread particular para que comience a ejecutar.
El espacio virtual asignado a un proceso se refiere a su visión lógica o virtual de como un proceso es
almacenado en memoria. Tipicamente, esta vista es que un proceso comienza en cierta dirección lógica
y existe en memoria continua. Generalmente contiene el stack del proceso, su heap, los datos y el
código del mismo.
b- ¿ Los hilos de ejecución de un proceso tienen acceso ilimitado a este espacio virtual ?
Si, ya que la a diferencia de los procesos, los hilos no son independientes entre si y dado que todos
pueden acceder a todas las direcciones de la tarea, un hilo puede leer o escribir sobre la pila de otro,
por ejemplo.
La TLB es un cache asociativo y de rápido acceso, sirve para acelerar la búsqueda de un frame de
memoria al que deseamos acceder; cada entrada en dicho buffer, consta de dos partes, una clave (tag) y un
valor (el número de frame).
Básicamente es un conjunto de registros construidos con memoria de alta velocidad que, dado un
número de página se compara simultáneamente con todas las entradas que contiene y si se encuentra el
número de marco correspondiente, entonces se devuelve.
Es usado a modo de caché para mantener algunas de las entradas de la tabla de páginas.
A diferencia de la tabla de páginas tradicional, en gral. se evita tener dos accesos a memoria ( el acceso
a la tabla y el acceso efectivo ) para acceder a una localidad.
A nivel de hardware se puede optimizar haciendo que la MMU cargue en la TLB una entrada, luego de
resolverla ( ej: SPARC, 80x86 ), en vez de delegarlo al sistema para que lo haga a nivel de software ( ej:
MIPS ).
El procentaje de veces que un número de página es encontrado en la cache TLB es denominado hit
ratio.
El tiempo efectivo de acceso se define mediante la siguiente fórmula:
EAT = hit ratio * (tiempo de búsqueda en TLB + tiempo acceso a memoria) + (1 - hit ratio) * (2 * tiempo
de acceso a memeoria).
8) ¿ Qué ventajas brinda los sistema RAID (Redundant Array of Inexpensive Disk) ?
Los sistemas RAID brindan 2 grandes ventajas, las cuales son velocidad en el tiempo de respuesta y/o
soporte a falla de datos.
Básicamente implican el uso de múltiples discos que trabajan en forma cooperativa. Cada bloque de
datos se divide en sub bloques y se almacena un sub bloque en cada disco. Por lo que el tiempo para
transferir un bloque a la memoria se reduce ya que los discos transfieren sus sub bloques en paralelo.
Esta organización se llama conjunto redundante de discos independientes (RAID), y mejora la
confiabilidad del sistema de almacenamiento porque se almacenan datos redundantes.
- Bloques de paridad intercalados: No es tan redundante. Una fracción de disco se usa para
contener bloques de paridad. Si ocurre un error, los bits perdidos se pueden recalcular. En este
caso, se puede bajar el desempeño ya que cada escritura implica recalcular y escribir el
subbloque de paridad correspondiente. Los subbloques de paridad deben estar distribuídos en
los discos (no solo en uno), a fin de repartir la carga de trabajo.
2009 – Diciembre
1) ¿De que forma el sistema operativo se asegura que una aplicación no acceda directamente a un
dispositivo?
El sistema operativo impide el acceso directo de una aplicación sobre un dispositivo, mediante el modo
dual de ejecución, en el cual los programas de usuario ejecutan en modo usuario y los procedimientos de
funcionamiento de dispositivos en modo monitor; por lo tanto, el programa de usuario debe realizar una
solicitud al sistema operativo mediante una llamada al sistema indicando la información que precisa, luego
cederá el control a código autenticado del sistema operativo, el cual realizará dicha solicitud en modo
monitor, para luego de concluída la misma, retornar el control al programa de usuario en modo usuario.
3) En un sistema que soporta hilos (threads) a nivel del núcleo, describa los pasos a seguir al
realizar un cambio de contexto.
Si se agranda demasiado el tiempo del quantum, se podría llegar a obtener un planificador FCFS; por
otra parte, en caso que se achique demasiado el quantum de tiempo, podríamos llegar a un punto en el cual
los cálculos útiles de cada proceso sean despreciables en comparación con el tiempo que el sistema insume
realizando cambios de contexto y otras tareas que no son productivas para el o los usuarios.
El loader toma el programa, la tabla de símbolos y una dirección real de memoria (provista por el
Sistema Operativo) llamémosle a esta dirección RR y copia el programa a partir de la dirección RR.
Antes de comenzar a ejecutar se deben resolver las direcciones de los símbolos, o sea sumarle al contenido
de cada uno el valor RR.
El mayor problema que presenta este tipo de sistemas es que el tamaño máximo de proceso que puede
ejecutar está limitado a la memoria física instalada en el mismo; teniendo en cuenta lo anterior, la
multiprogramación que se puede realizar sobre el mismo es muy escasa ya que los programas que se
vayan a ejecutar deberán estar cargados completamente en memoria al momento de iniciar su ejecución.
7) Sea un sistema con paginación bajo demanda. Realice un diagrama de cómo se podría compartir
una página entre dos procesos que residen dentro del mismo sistema operativo.
To be continued…
siempre utilizamos la función fopen (en C), pero es totalemente independiente del dispositivo ya que lo
podemos hacer sobre un disco duro, CD o archivo de red.
10) Describa dos métodos para la asignación de los datos de un archivo en el disco.
- Asignación contigua: Requiere que cada archivo ocupe un conjunto contiguo de bloques en el disco. Las
direcciones de disco definen una ordenación lineal en del disco. Acceder a un archivo que haya sido
asignado de manera contigua resulta sencillo. Para el acceso secuencial, el sistema de archivos recuerda la
dirección de disco del último bloque al que se haya hecho referencia y leerá el siguiente bloque cuando sea
necesario. Para el acceso directo al bloque i de un archivo que comience en el bloque b, podemos acceder
inmediatamente al bloque haciendo b+i. Este modelo de asignación permite soportar tanto el acceso
secuencial como el acceso directo. Sin embargo, la asignación contigua tiene problemas como la dificultad
de encontrar espacio suficiente para un nuevo archivo; también sufre de fragmentación externa. A medida
que se asignan y borran archivos, el espacio libre del disco se descompone en pequeños fragmentos. Otro
problema de los mecanismos de asignación contigua es determinar cuánto espacio se necesita para un
archivo (generalmente no es lo mismo el archivo cuando recién fue creado que luego de varias
modificaciones).
- Asignación enlazada: El mecanismo de asignación enlazada resuelve todos los problemas de asignación
contigua. Con este método cada archivo es una lista enlazada de bloques de disco, pudiendo estar dichos
bloques dispersos por todo el disco. El directorio contiene un puntero al primer y al último bloque de cada
archivo.No sufre de fragmentación externa y se puede utilizar cualquiera de los bloques de la lista de
bloques libres. El principal problema es que sólo se lo puede utilizar de manera efectiva para archivos de
acceso secuencial. Cada acceso a un puntero requiere una lectura de disco y algunos de ellos requerirán un
reposicionamiento de cabezales. En consecuencia resulta muy poco eficiente tratar de soportar una
funcionalidad de acceso directo para los archivos de asignación enlazada. Otra desventaja es el espacio
requerido por los punteros y cada archivo requerirá un poco más de espacio que lo que requeriría con
Asignación contigua. También presenta problemas con la fiabilidad ya que los bloques están enlazados
mediante punteros que están dispersos por todo el disco y si uno de ellos se pierde o daña muy
probablemente se perderá toda la información del archivo. Para mejorar la performance de este método se
utiliza una FAT que indica mediante una tabla que puede ser cargada en memoria las direcciones de los
bloques del archivo y su orden.
11) En general los sistemas operativos brindan un servicio de Buffering para el subsistema de
entrada/salida, ¿qué motiva brindar este servicio?