Está en la página 1de 5

AMPLIACIÓN DE SISTEMAS OPERATIVOS (71023016) Septiembre 2021

Material permitido: Ninguno Aviso 1: Todas las respuestas deben estar debida-
mente razonadas.
Tiempo: 90 minutos Aviso 2: Escriba con buena letra y evite los tachones.
N 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) Windows para implementar un hilo asigna, entre otras estructuras, una pila en
modo usuario y una pila en modo núcleo a cada hilo.
II) (1 p) En Linux el núcleo numera de forma consecutiva comenzando desde 0 todos
los marcos de página dependiendo del nodo y la zona de memoria a la que pertenez-
can. Luego puede haber marcos de página con el mismo número j en nodos o zonas
diferentes.
III) (1 p) En los SOBUNIX la implementación que hace el núcleo de los semáforos como
mecanismo IPC es distinta a la implementación de los semáforos como mecanismo
de sincronización del núcleo.
IV) (1 p) En los SOBUNIX el núcleo únicamente invoca a un driver de un dispositivo
de E/S para leer o escribir datos en dicho dispositivo.

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.

3. (2 p) Explique razonadamente cuál sería el resultado de la ejecución de las siguientes


órdenes:
a) env | sort
b) ls -l >> pru3
c) ls *[ot]
d) echo 'DIR=$(pwd)'
AMPLIACIÓN DE SISTEMAS OPERATIVOS (71023016) Septiembre 2021
Material permitido: Ninguno Aviso 1: Todas las respuestas deben estar debida-
mente razonadas.
Tiempo: 90 minutos Aviso 2: Escriba con buena letra y evite los tachones.
N Aviso 3: Solución del examen y fecha de revisión en
http://www.uned.es/71023016/

4. En la Figura 1 se muestra el código C del programa s21.

#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 C\n");
}

Figura 1 – Código C del programa s21

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=1540 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_IGN);
que aparece en el código del programa s21.
b) (1 p) Explicar el funcionamiento de s21 si se escriben consecutivamente las si-
guientes tres órdenes en un interprete de comandos de un SOBUNIX:
1) s21 &
2) kill -SIGUSR2 1540
3) kill -SIGUSR1 1541
UNED - Ampliación de Sistemas Operativos (Cód. 71023016) Solución Examen Septiembre 2021

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


Solución Examen Septiembre 2021

Solución Ejercicio 1
a) Esta afirmación es VERDADERA. Efectivamente Windows asigna a cada hilo de un proceso una
pila en modo usuario y una pila en modo núcleo. Un hilo utiliza su pila en modo usuario hasta que
invoca una llamada al sistema y comienza a ejecutarse en modo núcleo entonces utiliza su pila en
modo núcleo. Cuando un hilo realiza una llamada al sistema o cuando se bloquea a la espera de un
evento su contexto hardware se almacena en una estructura de datos CONTEXT que se almacena en
la pila del núcleo. El contexto hardware almacenado en la pila es restaurado para poder continuar
con la ejecución del hilo justo en el punto en el que fue interrumpida.

b) El núcleo de Linux numera de forma consecutiva comenzando desde 0 a todos los marcos de
página en que se descompone la memoria principal independientemente del nodo y la zona a la
que pertenezcan. En consecuencia no pueden existir dos marcos de página con el mismo número j
aunque residan en nodos o zonas diferentes. Luego esta afirmación es FALSA.

c) Esta afirmación es VERDADERA. Efectivamente en los SOBUNIX la implementación que hace


el núcleo de los semáforos como mecanismo IPC es distinta a la implementación de los semá-
foros como mecanismo de sincronización del núcleo y no deben ser confundidas. Un semáforo
implementado como mecanismo IPC es una ampliación del concepto de semáforo general que
consiste en un conjunto de N semáforos (N= 1, 2, 3, . . .) sobre el cual es posible realizar diferentes
operaciones, ya sea sobre todos o algunos de sus elementos.

d) En los SOBUNIX, el núcleo puede invocar a un driver por diferentes causas:

– Configuración. Cuando se arranca el sistema operativo el núcleo invoca a los drivers de los
dispositivos para inicializar los dispositivos.
– E/S. El subsistema de E/S del núcleo invoca a un driver para leer o escribir datos en un cierto
dispositivo.
– Control. Un usuario puede solicitar realizar operaciones de control sobre un cierto dispositi-
vo, como por ejemplo rebobinar una cinta magnética, o abrir o cerrar un cierto dispositivo.
– Interrupciones. Los controladores de E/S generan interrupciones cuando se ha completado
una operación de E/S sobre el dispositivo que supervisan o se ha producido algún cambio en
su estado. Las interrupciones son tratadas por los manipuladores de las interrupciones. Un
manipulador de una interrupción, entre otras tareas, debe despertar al driver del dispositivo,
si éste se había bloqueado en espera de que el controlador de E/S estuviera preparado para
procesar otra petición de E/S.

Luego existen varias causas, no solo una, por las que el núcleo puede invocar a un driver. En
conclusión esta afirmación es FALSA.

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

Solución Ejercicio 2
Las acciones que realiza la rutina del núcleo que se encarga de tratar la llamada al sistema fork dependen
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.

Solución Ejercicio 3
a) Esta orden muestra en la salida estándar el listado de todas las variables de entorno del proceso
asociado al intérprete ordenadas alfabéticamente.

b) Esta orden almacena en el archivo pru3 el resultado de la orden ls -l, que genera un listado
largo de los archivos del directorio de trabajo incluyendo tamaño, permisos, propietario, etc. Si el
archivo pru3 no existe se crea. Si el archivo ya existe, la salida de la orden ls -l se añade a partir
del final del archivo.

c) Esta orden muestra en la salida estándar un listado de todos los archivos o subdirectorios del
directorio de trabajo actual que terminen en o o en t.

d) Esta orden muestra en la salida estándar el mensaje echo 'DIR=$(pwd)', es decir, el argumento
del comando echo. Esto es así porque dicho argumento está entrecomillado con comillas simples
lo que indica al intérprete que no debe analizarlo.

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

Solución Ejercicio 4
a) Esta llamada al sistema especifica que cuando el proceso que invoca la llamada reciba la señal
SIGUSR1 la debe ignorar.

b) 1) Al escribir la orden s21 & se comienza a ejecutar el programa s08 en segundo plano. Su-
póngase que a la ejecución de dicho programa se le asocia el proceso A, por el enunciado se
sabe que su PID es 1540.
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ía 1541. 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 invo-
ca 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 1540 se envía una señal SIGUSR2 al proceso con PID
1540, es decir, al proceso hijo 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) Finalmente al escribir la orden kill -SIGUSR1 1541 se envía ahora una señal SIGUSR1
al proceso B que la ignora.

También podría gustarte