Examen Septiembre 2015

Anuncio
AMPLIACIÓN DE SISTEMAS OPERATIVOS (71023016)
Material permitido: Solo calculadora no programable
Tiempo: 2 horas
N
Septiembre 2015
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. Conteste razonadamente a los siguientes apartados:
a) (1 p) Enumerar y comentar brevemente las estructuras de datos utilizadas en Windows NT 6.0 para implementar la seguridad.
b) (1 p) ¿Qué es la capa anónima de Solaris? ¿Qué funciones desempeña?
2. (2 p) Defina los siguientes conceptos: núcleo no expropiable, núcleo expropiable y puntos de expropiación.
3. (2 p) Enumerar las principales características de un sistema de archivos UFS.
4. (2 p) Explique razonadamente cuál sería el resultado de la ejecución de las siguientes
órdenes:
a) sort < X > Y
b) ls -l > dtrat
c) X=$(date)
d) more ∼/fer.dat
AMPLIACIÓN DE SISTEMAS OPERATIVOS (71023016)
Material permitido: Solo calculadora no programable
Tiempo: 2 horas
N
Septiembre 2015
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/
5. (2 p) En la Figura 1 se muestra el código C del programa s2015. Supóngase que al
invocar este programa desde la línea de ordenes de un intérprete de comandos en un
SOBUNIX se crea un proceso con PID=1000 y que la asignación de los PIDs de los
procesos hijos, si se llegaran a crear, se realizaría incrementando en una unidad el PID
del proceso padre. Suponer además que el intérprete de comandos desde donde se lanza
s2015 tiene asociado PID=925. Conteste razonadamente si a los siguientes apartados:
a) (1 p) Explique la utilidad de la funciones pthread_create y pthread_join.
b) (1 p) Determinar el número de procesos y de hilos que produce la ejecución del
proceso PID=1000 asociado al programa s2015.
#include <stdio.h>
#include <pthread.h>
void *fun1(void *id);
void *fun2(void *id);
main()
{
pthread_t hu1,hu2;
pthread_create(&hu1, NULL, *fun1, NULL);
pthread_create(&hu2, NULL, *fun2, NULL);
pthread_join(hu1, NULL);
pthread_join(hu2, NULL);
}
void *fun1(void *id)
{
for(;;);
}
void *fun2(void *id)
{
int i=0;
for(i=0;i<4;i++) printf("\nMensaje2");
pthread_exit(NULL);
}
Figura 1 – Código C del programa s2015
UNED - Ampliación de Sistemas Operativos (Cód. 71023016)
Solución Examen Septiembre 2015
AMPLIACIÓN DE SISTEMAS OPERATIVOS (Cód. 71023016)
Solución Examen Septiembre 2015
Solución Ejercicio 1
a) La implementación de la seguridad en Windows se basa principalmente en el uso de las siguientes
estructuras de datos:
– Ficha de acceso (access token). Cuando un usuario se autentifica Windows asigna al primer
proceso creado para el usuario, el proceso explorer.exe que implementa el escritorio,
una ficha de acceso que es heredada por todos los procesos que cree dicho proceso inicial
debido a la interacción del usuario con el escritorio.
Una ficha de acceso es una estructura que contiene, entre otros, los siguientes datos:
◦ Identificador de seguridad del usuario al que pertenece el proceso. En Windows cada usuario tiene asociado un identificador de seguridad (Security IDentifier, SID), que
lo identifica de forma univoca. El SID es un número binario largo parte del cual se
genera aleatoriamente. El SID de un proceso puede ser obtenido usando la función
LookupAccountSid.
◦ Identificador de seguridad del grupo de usuarios al que pertenece el proceso. Similar al
SID de usuario pero aplicado a nivel de grupo.
◦ Grupos. Especifica los grupos a los que pertenece el usuario. Este campo es necesario
para implementar la API POSIX.
◦ Lista de control de acceso discrecional. Es la lista de control de acceso asignada por
defecto a los objetos creados por el proceso.
◦ Privilegios. Permiten proporcionar a un proceso permisos para realizar ciertas tareas
reservadas para el administrador, como por ejemplo apagar el computador o el acceso a
ciertos archivos.
– Descriptor de seguridad. En Windows cuando se crea un objeto se le asigna un descriptor de
seguridad que es una estructura de datos que especifica las operaciones que pueden realizar
los diferentes usuarios sobre el objeto. Contiene, entre otros, los siguientes datos: SID del
usuario propietario del objeto, SID del grupo propietario del objeto y un puntero a la lista
de acceso discrecional (Discretionary Access Control List, DACL) asociada al objeto. La
DACL del objeto contiene una o varias entradas. Cada entrada contiene un SID (de usuario o
de grupo), el estado asociado a dicha entrada: permitir o denegar, y el conjunto de operaciones
seleccionadas sobre el objeto.
b) Sobre la memoria anónima el núcleo trabaja usando un determinado conjunto de funciones que
constituyen la denominada como capa anónima, entre las funciones que forman parte de esta capa
se encuentran las siguientes:
– anon_alloc. Esta función permite obtener una página anónima nueva.
– anon_dup. Esta función duplica las referencias a un conjunto de páginas anónimas. Se
utiliza durante el tratamiento de la llamada al sistema fork para duplicar en el espacio del
proceso hijo un segmento del proceso padre que tiene páginas anónimas. El efecto de esta
operación es incrementar en una unidad el contador de referencias de las estructuras anon
de cada página anónima del segmento compartida por el padre y el hijo.
– anon_free. Elimina las referencias a un conjunto de páginas anónimas. El efecto de esta
operación es decrementar en una unidad el contador de referencias de las estructuras anon
de cada página privada del conjunto. Solamente cuando el contador alcanza el valor 0 se
puede eliminar dicha página anónima y dejar la estructura anon desasignada.
1
UNED - Ampliación de Sistemas Operativos (Cód. 71023016)
Solución Examen Septiembre 2015
– anon_private. Hace una copia privada de una página y le asigna una estructura anon.
– anon_zero. Crea una página llena de ceros y le asigna una estructura anon.
Solución Ejercicio 2
Un núcleo se dice que es no expropiable si a una unidad planificable ejecutándose en modo núcleo no se
le puede expropiar el uso del procesador. Sólo se le puede expropiar en los siguientes casos: para tratar
las interrupciones, cuando regresa a modo usuario o cuando entra en el estado dormido a la espera de que
ocurra algún evento. Ejemplos de SOBUNIX de núcleo no expropiable son SVR3 y BSD 4.3. Este tipo
de núcleos son más propensos a sufrir el problema de la inversión de prioridad, sin embargo reducen el
número de mecanismos de sincronización usados en el núcleo.
Por el contrario, un núcleo se dice que expropiable si a una unidad planificable ejecutándose en modo
núcleo se le puede expropiar el uso del procesador. En este caso, conviene tener presente que con objeto
de garantizar la integridad de las estructuras del núcleo existen algunas regiones de código del núcleo en
las que no está permitida la expropiación. A dichas regiones se les denomina puntos de no expropiación.
Un ejemplo de SOBUNIX de núcleo expropiable es Solaris. La implementación de un núcleo expropiable
requiere que las estructuras del núcleo estén protegidas por mecanismos de sincronización.
Algunos SOBUNIX, como por ejemplo SVR4, aplican una medida intermedia que consiste en permitir
la expropiación del núcleo sólo en determinados puntos del código del núcleo denominados puntos de
expropiación. En estos puntos se garantiza que las estructuras de datos del núcleo se encuentran en un
estado consistente. En estos sistemas una unidad planificable ejecutándose en modo núcleo solo puede
ser expropiada cuando alcanza un punto de expropiación.
Solución Ejercicio 3
Las características principales de un sistema de archivos UFS son las siguientes:
• Trabaja con un tamaño de bloque de datos de 4 KiB o 8 KiB. Además para reducir la fragmentación
interna cada bloque se divide en fragmentos que pueden ser asignados individualmente. De esta
forma la fragmentación interna promedio pasa de ser de medio bloque a medio fragmento. Tanto el
tamaño de bloque como el número de fragmentos (1, 2, 4 o 8) se fija al crear el sistema de archivos.
• Tiene en cuenta la geometría del disco a la hora de alojar los nodos-i y los bloques de datos de
los archivos. Con ello se consigue mejorar el rendimiento del sistema ya que se reduce el tiempo
de búsqueda de las cabezas de lectura/escritura del disco, y en consecuencia, el tiempo de las
operaciones de E/S.
• Por motivos de seguridad mantiene varias copias del superbloque, que es una estructura de datos que contiene información administrativa y estadística de todo el sistema de archivos. Si solo
existiese una copia del superbloque, como pasaba en los sistemas de archivos S5FS, y ésta se
corrompiera debido algún error en el disco todo el sistema de archivos quedaría inutilizado.
• Las entradas de los directorios son de tamaño variable y pueden ser compactadas para reducir la
fragmentación. El nombre de un archivo puede tener hasta 255 caracteres.
• Soporta enlaces simbólicos los cuales pueden ser creados con la llamada al sistema symlink.
• Soporta la llamada al sistema rename que permite renombrar de forma atómica a un archivo o
directorio. Con el uso de rename se evita tener que invocar primero a la llamada al sistema link
para crear un enlace duro que establezca el nuevo nombre del archivo y a continuación usar la
llamada al sistema unlink para borrar el enlace duro que establecía el nombre antiguo.
2
UNED - Ampliación de Sistemas Operativos (Cód. 71023016)
Solución Examen Septiembre 2015
Solución Ejercicio 4
1) Esta orden ordena (sort) por orden alfabético las líneas del archivo X y escribe el resultado en el
archivo Y.
2) Esta orden almacena en el archivo dtrat el resultado de la orden ls -l, que genera un listado
largo de los archivos del directorio de trabajo incluyendo tamaño, permisos, propietario, permisos,
etc. Si el archivo dtrat no existe se crea. Si el archivo ya existe se eliminará su contenido y se
remplazará por la salida de la orden ls -l.
3) Esta orden define una variable para el intérprete denominada X y le asigna como valor la cadena
de caracteres generada por el comando date, la cual contiene la fecha y la hora del sistema.
4) Esta orden muestra en la pantalla el contenido del archivo fer.dat ubicado en el directorio de
trabajo inicial. Señalar que el nombre de ruta del archivo especificado en esta orden hace uso del
comodín tilde '∼' el cual sustituye al nombre de ruta absoluta (/home o /users) del directorio
que contiene los directorios de trabajo de todos los usuarios. Si se utiliza en la forma "∼/" entonces
hace referencia al nombre de ruta absoluta del directorio de trabajo inicial del usuario.
Solución Ejercicio 5
a) La función pthread_creat crea un hilo de usuario para ejecutar una función determinada. Por
su parte, la función pthread_join suspende la ejecución del hilo de usuario que ha invocado a
esta función hasta que termine la ejecución de un determinado hilo de usuario.
b) La ejecución del proceso con PID=1000 asociado a la ejecución del programa s2015 no produce la creación de ningún otro proceso de usuario pero si la creación de tres hilos de usuarios.
El primer hilo de usuario o hilo principal del proceso se crea implícitamente para ejecutar la
función main. El segundo hilo se crea al invocar el hilo principal por primera vez a la función
pthread_creat. Mientras que el tercer hilo se crea al invocar el hilo principal por segunda vez
a la función pthread_creat.
3
Descargar