Diseño de sistemas operativos. Febrero de 2002. Ejercicio 1


Enunciado

Se pretende comparar distintas alternativas a la hora de acceder a un archivo, centrándose en qué activaciones del sistema operativo conlleva cada una de estas alternativas, en un sistema con las siguientes características:

En este sistema se están ejecutando sólo 2 procesos:

a) Suponiendo que P1 lee el fichero usando peticiones de lectura de 1 bloque, analice qué activaciones del sistema operativo conlleva completar una operación de lectura, especificando cuándo P1 pasa de modo usuario a sistema y viceversa, cuándo cambia de estado dicho proceso o en qué momento hay un cambio de contexto que le involucre, distinguiendo si es voluntario o involuntario. Asimismo, se debe explicar cuándo se producen transferencias de datos del fichero durante la operación de lectura, indicando quién las realiza (hardware o sistema operativo) y cuál es el origen y destino de la transferencia.

b) Repita el análisis del apartado anterior suponiendo que P1 usa la técnica de ficheros proyectados en memoria para leer el fichero. Explique razonadamente cuál de las dos soluciones resulta más eficiente.

c) Repita el primer apartado pero suponiendo que las lecturas son de 1 byte. Para ello, analice las dos primeras operaciones de lectura del fichero. Compare la eficiencia de esta estrategia con la usada en el primer apartado.

d) Repita el análisis del primer apartado pero suponiendo ahora que las lecturas son de 2 bloques. Compare la eficiencia de ambas alternativas. ¿Por qué cree que puede ser contraproducente usar peticiones de tamaño muy grande (por ejemplo, todo el fichero de golpe)? Para responder más concretamente a esta cuestión, considere una situación hipotética en la que el tamaño de la petición sea mayor que el tamaño máximo del conjunto residente establecido por una política de asignación de memoria fija. ¿Qué ocurriría con el buffer utilizado por el programa para leer?

e) Supóngase que P1 accede al fichero completo bloque a bloque, como en el primer apartado, pero para actualizarlo, sumando 1 a cada byte del fichero (o sea, lee un bloque, modifica su contenido y lo escribe, y así sucesivamente). Especifique cómo quedaría modificada la secuencia de activaciones planteada en el primer apartado al incluir la actualización, reflejando en qué momento se producen las escrituras al dispositivo.

f) Repita el apartado anterior suponiendo que P1 usa la técnica de ficheros proyectados en memoria para actualizar el fichero. Especifique cómo queda modificada la secuencia de activaciones planteada en el segundo apartado al incluir la actualización. ¿Ha encontrado nuevas diferencias en eficiencia entre estas dos técnicas (o sea, acceso convencional frente a proyección en memoria) al considerar las actualizaciones del fichero?

Solución

a) [1,5 puntos] Una operación de lectura de un bloque conlleva las siguientes activaciones del sistema operativo: b) [1,5 puntos] Antes de analizar las invocaciones asociadas a la lectura del fichero, se repasa brevemente cómo se realiza la proyección de un fichero. Con esta técnica, una vez abierto el fichero de manera convencional, se invoca una llamada al sistema para proyectar el fichero (llamada mmap en UNIX). Durante esta llamada, el sistema operativo crea una nueva región vinculada el fichero, rellenando las entradas correspondientes de las tablas de páginas para uqe estén vinculada a los bloques del fichero. Es muy importante resaltar que durante esta proyección no se carga en memoria principal ningún bloque del fichero. Una vez proyectado, el proceso no tiene que usar ninguna llamada al sistema para leer o escribir en el fichero, ya que está directamente accesible en su mapa de memoria y puede usar instrucciones convencionales de acceso a memoria.

A continuación, se especifican las activaciones que conlleva el acceso usando esta técnica:

Por lo que se refiere a la eficiencia, se puede apreciar que se producen el mismo número de activaciones del sistema operativo en ambos casos. Sin embargo, hay un ahorro muy importante al usar la proyección de ficheros: los datos se transfieren por DMA directamnete del dispositivo al proceso que los solicitó, eliminando la necesidad de pasar por la cache de bloques. Este ahorro es muy significativo ya que esa copia adicional por software consume bastantes recursos.

c) [1,5 puntos] Siguiendo la pauta especificada en el primer apartado, a continuación se analizan las activaciones asociandas a dos accesos consecutivos de un byte:

Lo mismo ocurriría con las siguientes peticiones de lectura hasta que se consuma todo el bloque.

A la hora de leer secuencialmente el fichero, esta solución es apreciablemente menos eficiente ya que, aunque ocurre el mismo nú,mero de activaciones vinculadas a las interrupciones hardware y software y el mismo número de cambios de contexto, se producen muchas más llamadas al sistema con la consiguiente sobrecarga.

d) [2,5 puntos] (1,5 punto por análisis de activaciones para lecturas de 2 bloques + 1 punto por estudio de peticiones muy grandes)

Una petición de lectura de 2 bloques en este sistema implica las siguientes activaciones:

En este caso, aunque el número de interrupciones hardware y software es el mismo, se reduce a la mitad el número de llamadas al sistema, provocando uan ligera mejora en la eficiencia.

Sin embargo, según crece el tamaño de la petición, aunque se reduce el número de llamadas al sistema, se requiere tener en el mapa de memoria del proceso más información de forma simultánea. Esto puede implicar una pérdida de eficiencia, puesto que la memoria principal es un recurso limitado y parte de esta información puede ser expulsada a memoria secundaria.

Para ver más claramente este problema, sólo es necesario plantearse qué ocurriría en la situación planteada en el enunciado del ejercicio. Si una petición fuera más grande que el tamaño máximo del conjunto residente asignado al proceso, durante la operación de lectura, ñas sucesivas páginas que contienen el buffer se irían expulsando a memoria secundaria unas a otras. Cuando terminase la lectura, sólo estaría en memoria principal la parte final del buffer. Así, cuando el proceso comenzase a acceder a la parte inicial del buffer, e producirían fallos de página que, a su vez, expulsarían a las páginas finales del buffer. En resumen, la eficiencia se vería drásticamente afectada ya que habría que leer 2 veces la información: la primera vez se lee el bloque del fichero y la segunda se trae la página del dispositivo de memoria secundaria.

e) [1,5 puntos] Puesto que en UNIX se usa la técnica de delayed-write, una operación de escritura (llamada write en UNIX) sólo implica copiar los datos a la cahe de bloques. La escritura real al dispositivo se producirá sólo en dos situaciones: o bien cuando el bloque modificado fuera expulsado para traer otro o periódicamente (típicamnete cada 30 segundos).

La escritura, por tanto, sólo implicará una activación del sistema operativo:

La lectura previa causará las activaciones que se detallaron en el primer apartado, aunque, dado que en este apartado se ha analizado un escenario donde se modificaba el fichero, se va a completar el estudio con una situación que quedo pendiente de detallar en el primer apartado: la secuencia adicional de activaciones que implica el caso de que no se encuentre un bloque libre y se tenga que expulsar un bloque modificado de la cache.

f) [1,5 puntos]

En este caso, la modificación del fichero no produce ninguna activación adicional del sistema operativo, ya que la página que se trajo cuando se trató el fallo de página asociado a la lectura, todavía está residente y se modificará sin que intervenga el sistema operativo. La página modificada será escrita cuando sea expulsado durante el tratamiento de otro fallo de página.

Nótese que como ocurría en el caso anterior, durante el tratamiento del fallo de página estudiado en el segundo apartado, puede suceder que no haya marcos libres y que el seleccionada para ser expulsado esté modificado. La secuencia de activaciones planteadas en el segundo apartado, que quedó pendiente de detallar, se completaría de la misms forma que en el apartado anterior:

Por último, con respecto a la eficiencia, la mejora es notable ya que se eliminan las activaciones del sistema operativo vinculadas con la llamada al sistema de escritura. Nótese que read+write implica normalmente 4 activaciones del sisteam operativo (read<, interrupción del dispositivo, interrupcion software y write), mientras que los ficheros proyectados implican 3 (fallo de página, interrupción del dispositivo e interrupcion software).