Está en la página 1de 7

DISEÑO Y ADMINISTRACIÓN DE SISTEMAS OPERATIVOS Septiembre de 2020 AvEx

Material permitido: Aviso 1: El formato y el orden en el que se presentan las


Texto base y calculadora. preguntas en la herramienta AvEx es diferente para cada
Tiempo: 1 hora. estudiante.

Examen AvEx
Debido a las circunstancias excepcionales provocadas por el COVID19 ha sido necesario adaptar el
modelo de Examen de Diseño y Administración de Sistemas Operativos para su evaluación en la
plataforma AvEx.

Cada estudiante ha realizado un examen diferente cuyas preguntas han sido seleccionadas
aleatoriamente de la siguiente forma:

Bloque 1 (5 preguntas de 1 punto de entre las siguientes)

Número 1
Razona brevemente si es verdadera o falsa cada una de las siguientes afirmaciones:
a) (0.5 puntos) La tabla de regiones es una estructura local a cada proceso que contiene una entrada
por cada región asociada al proceso (código, datos, pila de usuario y memoria compartida (si
existiese)).
b) (0.5 puntos) En UNIX no existe forma de identificar de forma precisa a cada proceso que se está
ejecutando en el sistema.

RESPUESTA. A FALSA la tabla de regiones es una estructura global, lo descrito en el enunciado es la


tabla de regiones por proceso (apartados 3.5.4 y 3.5.5). B FALSA, los procesos se identifican de forma
única mediante su PID (apartado 3.4.1).

Número 2
Razona brevemente si es verdadera o falsa cada una de las siguientes afirmaciones:
a) (0.5 puntos) Una de las acciones que realiza el algoritmo inthand() para preservar la integridad de
las estructuras de datos del núcleo es elevar el nivel de prioridad de interrupción.
b) (0.5 puntos) Si desde un proceso A se invoca a una llamada al sistema exec() para ejecutar otro
programa, cuando se retorne a modo usuario, tras finalizar la llamada al sistema, se ejecutará un
nuevo proceso B asociado a dicho programa.

RESPUESTA. A CIERTO, apartado 3.7. B es FALSA No se crea un proceso nuevo, se substituye el


contexto del proceso A con el contenido del archivo ejecutable, ver apartado 4.8.2 del texto base.

Número 3
Un proceso con Pid=2000 realiza una llamada al sistema fork(). A continuación uno de los procesos
resultantes recibe como resultado de la llamada 2001, y realiza una llamada al sistema
execv("./algoritmo1",0). Explica razonadamente si alguna de las siguientes afirmaciones es
correcta:
a) (0.25 puntos) El programa algoritmo1 se carga en memoria como proceso hijo del proceso 2001.
b) (0.25 puntos) El programa algoritmo1 se carga en memoria como proceso hijo del proceso 2000.
c) (0.25 puntos) El programa algoritmo1 se carga en memoria principal como un proceso con Pid=2001.
d) (0.25 puntos) El programa algoritmo1 se carga en memoria principal como un proceso con Pid=2000.
RESPUESTA. D es correcta: Si fork() devuelve 2001 se trata del proceso PADRE (Al hijo le devolvería
0). Al ejecutar execv se carga el ejecutable algoritmo1 en el proceso padre, esto es 2000.
Ver página 206 del libro base.

Número 4
Tenemos en el directorio actual un fichero archivo21.txt con número de nodo-i 2048, que tiene una
sola referencia, e invocamos de forma consecutiva los comandos:
ln archivo21.txt archivo22.txt
ln-s archivo21.txt archivo23.txt
Responda razonadamente las siguientes cuestiones:
a) (0.5 puntos) ¿Cuál es el valor del contador de referencia del fichero con nombre archivo23.txt?
b) (0.5 puntos) ¿Cuál es el valor del contador de referencia del fichero con nombre archivo22.txt?

RESPUESTA.
a) El contador de referencias del fichero archivo23.txt vale 1.
b) El contador de referencias del fichero archivo22.txt vale 2
El primer comando crea un enlace duro de nombre archivo22.txt que apunta al mismo archivo con nodo-i
2048, por lo que el contador de referencias del mismo pasa a valer 2. El segundo comando crea un
enlace simbólico, que es un archivo con otro número de nodo-i y cuyo contador de referencias vale 1. El
contador de referencias del archivo 2048 no se modifica. Ver Ejemplo 8.5.

Número 5
Razona brevemente si es verdadera o falsa cada una de las siguientes afirmaciones. Una mejora de FFS
respecto a s5fs es…
a) (0.25 puntos) La política de asignación de disco es muy efectiva cuando el disco está
prácticamente lleno.
b) (0.25 puntos) Agrupa todos los directorios y sus hijos en un mismo cilindro cuando es posible.
c) (0.25 puntos) Intenta asignar bloques secuenciales de un fichero en posiciones rotacionalmente
óptimas.
d) (0.25 puntos) La implementación de enlaces duros.

RESPUESTA.
A) Es FALSA, cuando la capacidad se acerca al 90% la eficiencia de FFS disminuye rápidamente (último
párrafo del apartado 8.11.2).
B) Es FALSA, FFS intenta mantener los directorios padre e hijo en grupos de cilindros separados.
C) Es CIERTA, FFS asigna bloques secuenciales en posiciones rotacionalmente óptimas si es posible.
D) Es FALSA, los enlaces duros ya existían en s5fs (apartado 8.5), FFS implementa además los enlaces
simbólicos.

Número 6
Razona brevemente si las siguientes afirmaciones son verdaderas o falsas acerca del sistema de gestión
de la memoria:
a) (0.5 puntos). Los programas arrancan de forma más lenta en un esquema de gestión de memoria
de demanda de página que en un esquema de intercambio.
b) (0.5 puntos). En un sistema UNIX con política de gestión mediante demanda de páginas cada
entrada de la tabla de regiones por proceso posee un puntero que apunta a una tabla de páginas.

RESPUESTA.

a) FALSO. Apartado 7.2, p. 338.Es más rápido, puesto que no es necesario que todo el programa se
encuentre cargado en memoria principal para comenzar a ejecutarse.
b) En un sistema UNIX cada entrada de una tabla de regiones por proceso (no confundir con la tabla de
regiones Global) posee un puntero que apunta a una entrada de la tabla de regiones no una tabla de
páginas. Es cada entrada de la tabla de regiones global la que posee un puntero a una tabla de
páginas. En conclusión la afirmación es FALSA.

Número 7

Razona brevemente si las siguientes afirmaciones son verdaderas o falsas.


a) (0.5 puntos) La llamada al sistema ptrace requiere varios cambios de contexto para transferir una
sola palabra desde el hijo al padre.
b) (0.5 puntos) En UNIX cuando se produce un fallo de página el ladrón de páginas busca la página
que produjo el fallo en el área de intercambio y la copia en la memoria principal.

RESPUESTA.

A) es VERDADERA. Ver Sección 6.6, dado que el proceso no tiene acceso directo a la memoria de otro
proceso ha de realizar llamadas al sistema que implican un cambio de contexto. La afirmación B) es
FALSA porque el ladrón de páginas no se encarga de la gestión de los fallos de página sino de
intercambiar páginas que han sido modificadas desde memoria principal al área de intercambio (el sentido
contrario a lo indicado en el enunciado), ver apartado 7.6.

Número 8

Razona brevemente si las siguientes afirmaciones son verdaderas o falsas.


a) (0.5 puntos) En UNIX las señales son muy útiles como mecanismo IPC.
b) (0.5 puntos) La interfaz nodo-v/sfv de un sistema UNIX sólo soporta sistemas de ficheros UNIX
(s5fs o ufs).

RESPUESTA.
a) En UNIX, las señales son útiles para la notificación de eventos, pero resultan poco útiles como
mecanismo IPC, ya que poseen las siguientes limitaciones:
• Resultan costosas en relación a las tareas que suponen para el sistema.
• Tienen un ancho de banda limitado.
• Una señal puede transportar una cantidad limitada de información
En conclusión, la afirmación es FALSA.

b) La interfaz nodo-v/sfv es una capa de código del subsistema de ficheros del núcleo que se encarga de
traducir cualquier llamada al sistema u operación del núcleo sobre un fichero (o sobre un sistema de
ficheros) a la función adecuada según el tipo de sistema de ficheros. Esta interfaz permite al sistema
UNIX soportar simultáneamente diferentes tipos de sistemas de ficheros locales tanto UNIX (s5fs o ufs)
como no-UNIX (DOS, A/UX, etc.). También le permite soportar sistemas de ficheros distribuidos.
En conclusión, la afirmación es FALSA.
Número 9

Razona brevemente si las siguientes afirmaciones son verdades o falsas:

a) (0.5 puntos) Si desde un proceso se invoca una llamada al sistema exec para ejecutar otro
programa, cuando se retome a modo usuario tras finalizar la llamada al sistema, se ejecutará un
nuevo proceso B asociado a dicho programa. Nota. Se supone que no existe otro proceso C cuya
ejecución sea más prioritaria.
b) (0.5 puntos) Si un proceso se está ejecutando y se produce una excepción, el proceso lo notifica al
núcleo enviando un mensaje a la cola de mensajes del sistema.

RESPUESTA.
a) Un proceso A es una instancia de un cierto programa en ejecución (programa1). Cuando un proceso A
invoca a una llamada al sistema exec para ejecutar otro programa (programa2), al finalizar la llamada al
sistema y continuar su ejecución en modo usuario, se ejecutará el código de programa2, pero instanciado
en el mismo proceso A, no en un nuevo proceso B. El núcleo al atender la llamada al sistema exec, lo que
hace, entre otras acciones, es borrar el contexto a nivel de usuario (código, datos y pila de usuario) del
proceso A que estaba construido a partir de programa1 y sustituirlo por un nuevo contexto a nivel de
usuario construido a partir de programa2 (ver apartado 4.8.2 del texto base)
En conclusión, la afirmación es FALSA.

b) FALSO (4.4.1.a Generación y tratamiento de señales).


Cuando durante la ejecución de un proceso se produce una excepción (por ejemplo, un intento de
ejecutar una instrucción ilegal), el núcleo se lo notifica al proceso mediante el envío de una señal. Por
tanto, es el núcleo quien lo notifica al proceso, no al revés.

Número 10

Razona brevemente si es verdadera o falsa cada una de las siguientes afirmaciones:


a) (0.25 puntos) Si en una tubería se envían varios mensajes en una sola operación de escritura, el
proceso que lee puede distinguir el número de mensajes enviados.
b) (0.25 puntos) Una tubería sirve para transmitir datos a múltiples procesos de forma simultánea.
c) (0.25 puntos) Las señales son muy útiles como mecanismo IPC dado que tienen un ancho de banda
ilimitado.
d) (0.25 puntos) Los datos en una tubería se tratan como un flujo de bytes no estructurados de tamaño
fijo.

RESPUESTA.

A) Es FALSA porque el proceso que lee no puede distinguir cuántos mensajes se han enviado, o dónde
empieza y termina cada uno, debido a que los datos se tratan como flujo de bytes no estructurados de
tamaño fijo.
B) Es FALSA porque es una tubería no puede ser utilizada para transmitir datos a múltiples procesos de
forma simultánea, puesto que los datos son borrados una vez leídos de la tubería por cualquiera de los
procesos.
C) Es FALSA, dado que las señales no resultan demasiado útiles como mecanismo IPC, entre varias
causas porque transporta una cantidad limitada de información
D) Es VERDADERA, ver apartado 6.3.2 del texto base.
Bloque 2 (1 pregunta de 2 puntos de entre las siguientes)

Número 11

(2 puntos). Indique qué comandos hay que teclear para conseguir las siguientes acciones:
a) (0.5 puntos). Crear los directorios dir1, dir2 dentro del directorio actual.
Dentro de dir1 crear el subdirectorio dir11.
b) (0.5 puntos). Dentro del directorio dir1 crear un archivo vacío llamado fichero.
c) (0.5 puntos). Mover el fichero al directorio dir11.
d) (0.5 puntos). Crear un enlace simbólico al directorio dir1 dentro del directorio dir2 llamado enlace.

RESPUESTA.
Existen muchas formas equivalentes de llevar a cabo dichas acciones, cualquiera de ellas es válida, un
ejemplo de comandos que podrían usarse es:

A) $ mkdir dir1 dir2 dir1/dir11


B) $ touch dir1/fichero
C) $ mv dir1/fichero dir1/dir11/fichero
D) $ ln -s $(pwd)/dir1/ dir2/enlace

Observe que en último comando el enlace se usa pwd para crear la ruta absoluta pero también podría
hacerse con la ruta relativa ln -s ../dir1/ dir2/enlace lo que NO funciona es hacer ln -s
dir1/ dir2/enlace.

Número 12

(2 puntos). ¿Cuál es el tamaño de fichero máximo soportado por un sistema de ficheros con 16 bloques
directos, e indirección simple, doble y triple? El tamaño de un bloque de datos es 512 bytes, y cada
dirección de bloque ocupa 4 bytes.

RESPUESTA.
(Apartado 8.8.3 Nodos-i).
Número de bloques de datos:
-Bloques directos: 16 bloques
-Bloques indirección simple: 512bytes/4bytes= 128 bloques.
-Bloques indirección doble= 128*128=16.384 bloques
-Bloques indirección triple= 128*128*128=2.097.152 bloques
Número total de bloques de datos= directo + simple+ doble + triple = 16 + 128 + 16.384 + 2.097.152 =
2.113.680 bloques

Tamaño máximo del fichero = 2.113.680 * 512 bytes=1082204160 Bytes.


= 1.08 *10^9 bytes = 1.08 GB (en el sistema decimal)
= 1.01*2^30 bytes = 1.01 GiB (en el sistema binario)
Bloque 3 (1 problema de 3 puntos)

Problema (3 puntos)

a) (1p) Explique brevemente qué hace el siguiente programa y cuál es su salida cuando el código se
compila en el fichero ejecutable examen, se ejecuta con la orden ./examen DyASO y no se
produce ningún error.
b) (1p) Indique los mecanismos de sincronización que hacen que la salida sea siempre la misma.
c) (1p) Si no se cerrase el fichero en la línea [25] ¿Qué ocurriría?
RESPUESTA.

Parte A:
El programa comprueba que hay dos argumentos de entrada, el primero es el nombre del ejecutable y el
segundo “DyASO”. A continuación, elimina, si existiese, el archivo “fichero” y crea en su lugar un fichero
FIFO con permiso de lectura y escritura para todos los usuarios. Seguidamente, abre dicho fichero en
modo de lectura y escritura. Si se produce algún error lo muestra con perror y termina con el código de
error adecuado mediante la llamada al sistema exit.

Llegado a este punto, la llamada al sistema fork crea un proceso hijo del proceso actual (padre),
devolviendo el pid del hijo al padre y 0 al hijo que ejecuta el if siguiente. El padre ejecuta el código tras la
cláusula else.

-El proceso padre duerme durante un segundo con sleep y luego escribe por salida estándar
“¡Problema”. A continuación escribe en el fichero fifo el segundo argumento de entrada argv[1] que es
“DyASO”, cierra el fichero y espera a la terminación de su hijo con wait ante de borrar el fichero fifo con
unlink.

-El proceso hijo por su parte cierra el fichero y ejecuta la orden “cat fichero” que lee e imprime el
contenido del fichero fifo (“DyASO”) a través de la llamada al sistema System.

Cuando termina y se comprueba el retorno de dicha función que se almacena en la variable “salida” para
ver si es correcto, en caso contrario se imprime un error. A continuación imprime “ correcto!”.
Por lo tanto, la salida es:

¡Problema DyASO correcto!

Nota: “Incorrecto” no se imprime ya que está detrás de la llamada al sistema exit que termina el
programa.

Parte B:
La salida es siempre la misma debido a que la lectura del fichero FIFO es bloqueante. Esto significa
que el proceso “cat” espera a que el proceso padre escriba en la tubería y continúa leyendo hasta que el
padre la cierra.
El padre siempre escribe primero en la salida estándar ya que fuerza la salida inmediata con fflush.
Además, el padre espera con wait a que termine su hijo antes de eliminar el fichero fifo.

Parte C:
Si el proceso hijo no cierra la tubería el proceso “cat” invocado por “system” se quedaría
indefinidamente esperando ya que la tubería seguiría abierta para escritura por el hijo.

También podría gustarte