Está en la página 1de 6

AMPLIACIÓN DE SISTEMAS OPERATIVOS (Código: 71023016) Febrero 2020

Material permitido: Solo calculadora no programable Aviso 1: Todas las respuestas deben estar debida-
mente razonadas.
Tiempo: 2 horas Aviso 2: Escriba con buena letra y evite los tachones.
N2 Aviso 3: Solución del examen y fecha de revisión en
http://www.uned.es/71023016/

1. Conteste razonadamente a las siguientes preguntas:


a) (1 p) Enumerar y comentar brevemente las estructuras de datos utilizadas en Win-
dows para implementar la seguridad.
b) (1 p) Enumerar y explicar brevemente la información contenida en una estructura
task_struct de Linux.

2. (2 p) Enumerar las principales acciones que realiza la función del núcleo que se encarga
de tratar la llamada al sistema fork en los SOBUNIX.

3. (2 p) Explicar la información que contiene y cómo se utiliza la caché de buffers de


bloques de disco en los SOBUNIX.

4. En un SOBUNIX la máscara de modo del archivo ordinario f32a expresada en octal es


5321:
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 -rwSrw-rwT?
5. (2 p) En la Figura 1 se muestra el código C del programa f20. Supóngase que al invocar
este programa desde la línea de ordenes de un intérprete de comandos se crea un proceso
con PID=1560 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. Conteste
razonadamente a los siguientes apartados:

a) (1 p) Explique el significado de la llamada al sistema


signal(SIGUSR1,SIG_DFL);
que aparece en el código del programa f20.
b) (1 p) Explicar el funcionamiento de f20 si se escriben consecutivamente las si-
guientes tres órdenes en un interprete de comandos de un SOBUNIX:
1) f20 &
2) kill -SIGUSR2 1560
3) kill -SIGUSR1 1561
AMPLIACIÓN DE SISTEMAS OPERATIVOS (Código: 71023016) Febrero 2020
Material permitido: Solo calculadora no programable Aviso 1: Todas las respuestas deben estar debida-
mente razonadas.
Tiempo: 2 horas Aviso 2: Escriba con buena letra y evite los tachones.
N2 Aviso 3: Solución del examen y fecha de revisión en
http://www.uned.es/71023016/

#include <signal.h>
void f1(int sig);
main()
{
int a,b;
signal(SIGUSR1,SIG_DFL);
if(fork()==0)
{
signal(SIGUSR1,SIG_IGN);
pause();
exit(3);
}
else
{
a=wait(&b);
printf("\n %d %d \n",a,b);
}
}

void f1(int sig)


{
printf("\nMensaje B\n");
}

Figura 1
UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Febrero 2020

AMPLIACIÓN DE SISTEMAS OPERATIVOS (Cód. 71023016)


Solución Examen Febrero 2019

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 ca-
da 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.
◦ 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) La estructura task_struct, también denominada descriptor del proceso, contiene datos y pun-
teros a otras estructuras de datos que el núcleo necesita conocer para poder gestionar una tarea.
Esta estructura contiene la siguiente información:

– Estado de la tarea.
– Parámetros de planificación. Entre ellos la prioridad de la tarea, el tiempo de ejecución y el
tiempo promedio que duerme una tarea esperando por un evento.
– Identificadores. Cada tarea tiene asociada un identificador de tarea (task identifier, TID),
también denominado identificador del hilo (thread Identifier), que la identifica de manera
única. Este identificador se almacena en un campo de la estructura task_struct. Contra-
riamente a lo que se podría pensar este campo no se denomina tid sino pid. Esto es así
porque en sus orígenes Linux únicamente soportaba procesos monohilos y en dicho caso el
valor del TID es igual al PID del proceso.

1
UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Febrero 2020

En el caso de procesos multihilos cada hilo constituye una tarea y tiene asociado un TID
diferente. Además cada tarea tiene asignado un identificador de grupo de tareas (Task Group
IDentifier, TGID), también denominado identificador de grupo de hilos, el cual se almacena
en el campo tgid de la estructura task_struct. Todas las tareas pertenecientes a un
mismo grupo de tareas tienen asignado el mismo TGID, el cual coincide con el TID de la
tarea líder del grupo, que es la tarea principal. El PID de un proceso multihilo en Linux
coincide con el valor del TGID de sus hilos.
– Información genealógica. Como por ejemplo: un puntero a la estructura task_struct
de su proceso padre, la cabecera de la lista doblemente enlazada de sus procesos hijos, y
punteros para implementar la lista doblemente enlazada de sus procesos hermanos.
– Localización del espacio de direcciones virtuales de la tarea.
– Credenciales. Como los identificadores de usuario (UID y EUID), los identificadores de gru-
po (GID y EGID) y el identificador de sesión (SID).
– Contexto hardware salvado. Permite continuar con la ejecución de la tarea en modo usuario
tras retornar de la ejecución en modo núcleo de una llamada al sistema o de una interrupción.
– Puntero a la estructura thread_info.
– Información relativa al sistema de archivos. Como un puntero a la tabla de descriptores de
archivos abiertos y punteros al nodo-i del directorio de trabajo actual y al nodo-i del directorio
raíz.
– Información asociada al tratamiento de señales. Como las máscaras de señales ignoradas,
bloqueadas y pendientes. Así como las acciones establecidas para cada tipo de señal y las
direcciones de los manejadores de las señales que son capturadas.
– Información contable sobre uso de recursos. Como el tiempo ejecutado en modo usuario o en
modo núcleo. También límites máximos a los recursos que puede utilizar: número máximo
de archivos abiertos, tiempo máximo de uso del procesador, tamaño máximo de su pila o de
su segmento de datos, número máximo de marcos de página que puede consumir, etc.

Solución Ejercicio 2
Las acciones que realiza la rutina del núcleo que se encarga de tratar la llamada al sistema fork depen-
den de cada SOBUNIX, pero en general suele realizar las siguientes acciones:

• Asignar una entrada de la tabla de procesos al proceso hijo, es decir, una estructura proc.
• Rellenar los campos de la estructura proc del proceso hijo a partir de la información contenida
en la estructura proc del proceso padre.
• Crear el área-u del proceso hijo a partir del área-u del proceso padre.
• Asignar un PID al proceso hijo.
• Crear el espacio de direcciones virtuales del proceso hijo a partir del espacio de direcciones del
proceso padre.
• Crear las referencias oportunas a los recursos compartidos con el proceso padre, como por ejemplo
los archivos abiertos y el directorio de trabajo actual.
• Inicializar el contexto hardware del proceso hijo con una copia del contexto hardware del proceso
padre para poder iniciar la ejecución del proceso hijo cuando éste sea planificado.
• Configurar el estado del proceso a preparado para ejecución y colocarlo en alguna cola de planifi-
cación en función de su prioridad.

2
UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Febrero 2020

Solución Ejercicio 3
La caché de buffers de bloques de disco. Se trata de un espacio reservado en la memoria principal para
almacenar los bloques de datos del disco accedidos recientemente. Cada bloque de datos se almacena en
un buffer de memoria principal. Para localizar rápidamente a los buffers el núcleo mantiene varias colas
hash de buffers a las que se accede en función del número de dispositivo y el número de bloque. Con el
uso de esta caché se pretende minimizar las operaciones de E/S a disco, las cuales son varios órdenes de
magnitud más lentas que los accesos a memoria principal.
Cuando el núcleo desea leer un bloque del disco, primero comprueba si existe dicho bloque en la caché.
En caso afirmativo el bloque es leído de la caché. En caso negativo, el bloque debe leerse en el disco y
cargarse en un buffer libre. Si no existe ningún buffer libre, deberá seleccionarse algún buffer mediante
el uso de algún algoritmo de reemplazamiento. En conclusión,
En el caso de las operaciones de escritura primero se realizan sobre la caché. Periódicamente o si el
número de bloques escritos supera un cierto valor los bloques escritos son transferidos por el núcleo al
disco. Normalmente existe un proceso del sistema que se encarga de realizar esta tarea.

Solución Ejercicio 4
a) La máscara de modo simbólica asociada a este archivo es: - -ws -w- - - t

b) La máscara de modo simbólica - rwS rw- r w T es equivalente a la máscara de modo binaria

101 110 110 110

que en octal es 5666. Luego un posible comando a utilizar es:

chmod 5666 f32a

Solución Ejercicio 5
a) Esta llamada al sistema establece que cuando el proceso que ha invocado la llamada reciba la señal
SIGUSR1 la acción que debe realizar el núcleo es la acción por defecto asociada a dicha señal, es
decir, terminar el proceso.

b) 1) Al escribir la orden f20 & se comienza a ejecutar el programa f20 en segundo plano.
Supóngase que a la ejecución de dicho programa se le asocia el proceso A, por el enunciado
se sabe que su PID es 1560.
Al ejecutar el proceso A en primer lugar se invoca a la llamada al sistema signal para
especificar que cuando el proceso reciba la señal SIGUSR1 la acción que debe realizar el
núcleo es la acción por defecto asociada a dicha señal, es decir, terminar el proceso. En
segundo lugar se invoca a la llamada al sistema fork para crear un proceso hijo B, cuyo PID
sería1561. Como fork devuelve el PID del proceso hijo al padre, entonces no se cumple la
condición if y se invoca a la llamada al sistema wait que suspende la ejecución del proceso
A hasta que finalice su proceso hijo B.
Asimismo cuando el proceso hijo B sea planificado invocará a la llamada al sistema signal
para especificar que cuando reciba una señal SIGUSR1 se debe ignorar. A continuación
invoca a la llamada al sistema pause que hace que el proceso B quede a la espera de una
señal que no ignore o que no tenga bloqueada.
2) Al escribir la orden kill -SIGUSR2 1560 se envía una señal SIGUSR2 al proceso con
PID 1560, es decir, al proceso A. Como no se ha especificado ninguna acción para esta señal
se ejecuta la acción por defecto, que es terminar el proceso A.

3
UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Febrero 2020

3) Finalmente al escribir la orden kill -SIGUSR1 1561 se envía ahora una señal SIGUSR1
al proceso B. La señal es ignorada por el proceso ya que así lo había establecido previamente
cuando invocó a la llamada al sistema signal(SIGUSR1,SIG_IGN).

También podría gustarte