AMPLIACIÓN DE SISTEMAS OPERATIVOS (71023016) Material permitido: Ninguno Tiempo: 90 minutos N Septiembre 2020 Aviso 1: Todas las respuestas deben estar debidamente razonadas. Aviso 2: Escriba con buena letra y evite los tachones. Aviso 3: Solución del examen y fecha de revisión en http://www.uned.es/71023016/ 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En Windows, todas las regiones del espacio de direcciones virtuales de un proceso se generan a partir del mapeado en memoria de un archivo. II) (1 p) El núcleo de Linux no distingue de forma clara entre proceso, proceso ligero (hilo de usuario) e hilo del núcleo. III) (1 p) Una página anónima es aquella que no está asociada a un proceso concreto. IV) (1 p) Si dos procesos A y B abren el mismo archivo existirán dos descriptores de archivos, dos estructuras de objeto abierto y dos estructuras nodos-v. 2. (2 p) Explicar razonadamente las características generales de la planificación de procesos multihilos en los SOBUNIX. 3. En un SOBUNIX la máscara de modo del archivo ordinario d1423 expresada en octal es 6074: a) (1 p) Escriba la máscara de modo simbólica asociada a este archivo. b) (1 p) ¿Qué orden se debe escribir en un intérprete de comandos para que la máscara simbólica del archivo pasase a ser -r-sr---wt? 4. En un SOBUNIX, explique razonadamente el significado de las siguientes llamadas al sistema: a) (0.5 p) execv("prog3",0); b) (0.5 p) signal(SIGUSR1,0); c) (0.5 p) kill(-1,SIGUSR1); d) (0.5 p) d=semget(a,b,c); UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Septiembre 2020 AMPLIACIÓN DE SISTEMAS OPERATIVOS (Cód. 71023016) Solución Examen Septiembre 2020 Solución Ejercicio 1 a) En Windows, el espacio de direcciones virtuales de un proceso, consta entre otras, de las siguientes regiones: código, datos inicializados, montículo y pila. Las regiones de código y datos inicializados son generadas mediante el mapeado de un determinado archivo. Por su parte, el montículo y la pila son regiones anónimas que no se generan mediante el mapeo de un archivo. Por lo tanto, la afirmación es FALSA. b) Esta afirmación es VERDADERA. En Linux no existe una distinción clara entre las abstracciones de proceso, proceso ligero (hilo de usuario) e hilo del núcleo. De hecho en varías partes del código del núcleo se utilizan los términos procesos, hilos y tareas de forma sinónima; debido seguramente a que en las primeras versiones del núcleo utilizaban como unidad de planificación y ejecución al proceso y no soportaban procesos ligeros ni hilos del núcleo. Para el núcleo de Linux un proceso monohilo, un proceso ligero o un hilo del núcleo es simplemente un flujo de ejecución independiente o tarea (task) que debe ser planificada y ejecutada. Linux considera a un proceso monohilo como una única tarea. Mientras que un proceso multihilo constará de un número de tareas igual al número de procesos ligeros (hilos de usuario) en que se descomponga. También cada hilo del núcleo asociado a un proceso del sistema o utilizado para ejecutar una determinada función del núcleo es considerado como una única tarea. c) Una página anónima es una página que antes de su creación no dispone de un almacenamiento persistente de respaldo en memoria secundaria. Las páginas anónimas son utilizadas para implementar la región de datos no inicializados, el montículo y la región de pila de un proceso. Una página anónima solo se crea cuando se accede a ella por primera vez durante una operación de escritura. Al conjunto de páginas anónimas utilizadas por un proceso se le denomina memoria anónima del proceso. De acuerdo con lo anterior, una determinada página anónima estará asociada a un determinado proceso. Por lo tanto, la afirmación es FALSA. d) Para que un proceso pueda poder operar sobre un archivo, éste primero tiene que ser abierto mediante la invocación de la llamada al sistema open. La rutina del núcleo del sistema operativo que trata esta llamada al sistema crea en la memoria principal una estructura de datos denominada objeto de archivo abierto y asigna a dicha estructura un número entero positivo pequeño denominado descriptor de archivo para identificarla. Si un proceso abre el mismo archivo dos veces, o si dos procesos abren el mismo archivo, el núcleo creará una estructura de objeto abierto y un descriptor de archivo en cada invocación de la llamada al sistema open. Luego se tendrían dos objetos de archivo abierto, cada una con su correspondiente descriptor de archivo. Entre otros datos, un objeto de archivo abierto contiene un puntero al nodo virtual del archivo. Un nodo virtual, o más abreviadamente nodo-v, es una estructura de datos que el núcleo crea en memoria principal para cada archivo activo. De acuerdo con lo anterior, al abrir dos procesos el mismo archivo, se crean dos descriptores de archivo, dos objetos de archivo abierto y un nodo-v, no dos. Por lo tanto, la afirmación es FALSA, 1 UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Septiembre 2020 Solución Ejercicio 2 En la mayoría de los SOBUNIX, el planificador implementa una planificación global basada en múltiples colas de prioridad y realimentación. En este tipo de planificación, cada unidad planificable (proceso o hilo del núcleo) tiene asignada una determinada prioridad, que es un número entero positivo comprendido entre 0 y un cierto valor máximo. En algunos SOBUNIX el valor 0 corresponde a la máxima prioridad posible, mientras que en otros la máxima prioridad corresponde a Pmax. El planificador siempre intenta que se ejecute la unidad planificable de mayor prioridad, aunque esto no siempre es posible si el núcleo es no expropiable. El valor de la prioridad de una unidad planificable se establece en función de diferentes criterios: el modo de ejecución (modo usuario o en modo núcleo), el tipo de trabajo (trabajo interactivo, trabajo por lotes, trabajo en tiempo real, trabajo del sistema operativo e interrupciones), el tiempo de procesador consumido, el tiempo de espera en las colas, etc. El valor de la prioridad puede variar o no con el tiempo de vida de la unidad planificable, es decir, la prioridad puede ser estática o dinámica. Por ejemplo, la prioridad de las unidades planificables asociadas a las interrupciones suele ser alta y estática. Mientras que la prioridad de las unidades planificables asociadas a trabajos por lotes suele ser baja y dinámica. En función del valor de su prioridad cada unidad planificable en el estado preparado forma parte de una determinada cola de unidades planificables en el estado preparado o cola de prioridad. Las unidades planificables que poseen una prioridad dinámica pueden pasar durante su tiempo de vida por diferentes colas. El planificador establece una determinada planificación local para cada cola, como por ejemplo: planificación FIFO, planificación de tiempo compartido, planificación basada en prioridades, etc. Algunos SOBUNIX, como SVR4 o Solaris, para dotar de mayor flexibilidad al planificador definen clases de planificación cada una de los cuales tiene asociada un rango de valores de prioridad y un mecanismo de cálculo de la prioridad. Cada unidad planificable pertenece a una determinada clase de planificación. Normalmente se dispone de una clase de planificación por cada tipo de trabajo soportado en el sistema: clase de trabajos en tiempo real, clase de trabajos de tiempo compartido o interactivos, etc. Solución Ejercicio 3 a) Si pasamos la máscara octal 6074 a binario se obtiene: 110 000 111 100 y a partir de ella podemos establecer que la máscara de modo simbólica asociada a este archivo es: - -ws -wS - w - b) La máscara de modo simbólica - r-s r- - - wt es equivalente a la máscara de modo binaria 101 101 100 011 que en octal es 5543. Luego un posible comando a utilizar es: chmod 5543 d1423 2 UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Septiembre 2020 Solución Ejercicio 4 a) Esta llamada al sistema reemplaza las regiones del espacio de direcciones del proceso que invoca la llamada por las regiones del programa prog3 pasado como argumento. Cuando finaliza la llamada al sistema exec el proceso invocador pasa a ejecutar el código del programa invocado. b) Esta llamada al sistema especifica al núcleo la acción que debe realizar cuando el proceso que invoca la llamada reciba una señal tipo SIGUSR1, en este caso se indica que la acción que debe realizar el núcleo es ejecutar la acción por defecto asociada a esta señal, que para la señal SIGUSR1 es terminar el proceso. c) Esta llamada al sistema envía la señal SIGUSR1 a todos los procesos cuyo UID sea igual al EUID del proceso que invoca la llamada. d) Esta llamada al sistema permite crear un conjunto de semáforos u obtener el uso de un conjunto ya creado. Requiere como argumentos de entrada la llave numérica a que se quiere asociar al conjunto de semáforos o que ya tiene asociada (si ya está creado), el número b de semáforos que tendrá el conjunto y una serie de indicadores c que permiten especificar, entre otras cosas, los permisos de acceso al conjunto de semáforos. Un indicador utilizado frecuentemente es IPC_CREAT que fuerza a crear un conjunto nuevo si no existe uno ya creado. Si la llamada al sistema se ejecuta con éxito entonces guarda en d el identificador del conjunto de semáforos. En caso contrario almacena en d el valor -1. 3