SOLUCION EXAMEN mayo 2006

Anuncio
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
SOLUCION EXAMEN mayo 2006
1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas:
I) (1 p) El núcleo del UNIX SVR3 mantiene fundamentalmente tres tipos de estructuras de
datos para implementar la política de memoria mediante demanda de páginas: las tablas
de páginas, la tabla de datos de los marcos de página y la tabla de intercambio.
II) (1 p) En el UNIX BSD4.3 cuando un proceso completa una llamada al sistema y va a
retornar a modo usuario, su prioridad de planificación es configurada al valor que se
encontraba almacenado en el campo p_cpu de su entrada asociada en la tabla de
procesos.
Solución:
I) El núcleo mantiene fundamentalmente cuatro tipos de estructuras de datos para
implementar la política de memoria mediante demanda de página: las tablas de páginas, las
tablas de descriptores de bloques de disco, la tabla de datos de los marcos de página y la
tabla de intercambio. En conclusión la afirmación es FALSA.
II) Cuando un proceso completa la llamada al sistema y va a retornar a modo usuario, su
prioridad de planificación es configurada a su prioridad en modo usuario actual, es decir, al
valor que se encontraba almacenado en el campo p_usrpri de su entrada asociada en la
tabla de procesos. Indicar que el campo p_cpu contiene el tiempo transcurrido desde que el
proceso utilizó por última vez la CPU, también denominado uso reciente de la CPU. En
conclusión la afirmación es FALSA.
1
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
2 Conteste razonadamente a las siguientes cuestiones relativas al algoritmo inthand() del
núcleo de UNIX. a)(0.5 p) ¿Para que usa el núcleo este algoritmo?. b)(1.5 p)¿Cuáles son las
principales acciones que realiza este algoritmo?
Solución:
a) El núcleo invoca al algoritmo inthand() para el tratamiento de las interrupciones.
b) Se van a utilizar, por simplificar, las siguientes abreviaturas:
• npi, es el nivel de prioridad de interrupción actual almacenado en el registro de estado
del procesador.
• npii, es el nivel de prioridad de interrupción asociado a un determinado tipo de
interrupción.
El algoritmo inthand() realiza principalmente las siguientes acciones:
1) Salvar el contexto del proceso actual.
2) Elevar el nivel de prioridad de interrupción. Es decir, se hace npi=npii. Por tanto, las
interrupciones que lleguen con un nivel de prioridad de interrupción igual o menor que
npi quedan bloqueadas o enmascaradas temporalmente. De esta forma se logra
preservar la integridad de las estructuras de datos del núcleo.
3) Obtener el vector de interrupción. Normalmente, las interrupciones aparte del npii
pasan al núcleo alguna información que le permite identificar el tipo de interrupción de
que se trata. En un sistema con interrupciones vectorizadas, cada dispositivo
suministra al núcleo un número único denominado número del vector de interrupción
que se utiliza como un índice en una tabla, denominada tabla de vectores de
interrupción. Cada entrada de esta tabla es un vector de interrupción, que contiene,
entre otras informaciones, un puntero al manejador o rutina de servicio de la
interrupción apropiado.
4) Invocar al manipulador o rutina de servicio de la interrupción.
5) Restaurar el contexto del proceso, una vez que se ha concluido la rutina de servicio de
la interrupción.
2
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
3 (2 p) Explique razonadamente las ventajas y las desventajas que poseen los ficheros FIFO
frente a las tuberías sin nombre.
Solución:
Los ficheros FIFO poseen las siguientes ventajas sobre las tuberías sin nombre:
•
Tienen un nombre en el sistema de archivo.
•
Pueden ser accedidos por procesos sin ninguna relación familiar.
•
Son persistentes, es decir, continúan existiendo hasta que un proceso los
desenlaza explícitamente. Por tanto son útiles para mantener datos que deban
sobrevivir a los usuarios activos
Asimismo, los ficheros FIFO poseen las siguientes desventajas con respecto a las
tuberías sin nombre:
•
Deben ser borrados de forma explícita cuando no son usados.
•
Son menos seguros que las tuberías, puesto que cualquier proceso con los
privilegios adecuados puede acceder a ellos.
•
Son difíciles de configurar y consumen más recursos.
3
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
4. (1.5 p) Explique brevemente el significado de los elementos de la siguiente línea del fichero
/etc/passwd
apolo:*2Xc6QoVK024pR:506:302:Loreto Gracia:/home/apolo/work:/bin/bash
Solución:
El significado de los elementos de esta línea es el siguiente:
• apolo es el nombre de usuario.
• 2Xc6QoVK024pR es la clave encriptada. El asterisco * que aparece al principio de
la clave en esta línea está indicando que la cuenta de este usuario se encuentra
actualmente deshabilitada.
• 506 es el uid.
• 302 es el gid.
• Loreto Gracia es el nombre completo del usuario.
• /home/apolo/work es el directorio de trabajo inicial.
• /bin/bash es el intérprete de comandos inicial.
4
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
5. Conteste razonadamente a los siguientes apartados: a) (1.25 p) Explicar el significado de cada una las
sentencias marcadas con []de este código. b) (1.25 p) Si j06 es el ejecutable que resulta de compilar este
programa y al ejecutarlo se le asigna el pid 526, explique el funcionamiento del programa tras terminar de
ejecutar las siguientes dos ordenes desde la línea de comandos: 1) $ j06 &
2)$ kill -SIGUSR1 526
#include <signal.h>
void f1(int sig);
[1]
main()
{
long x;
int k,h;
struct sistema{
int A[2][2];
int b;
}uno,*sis;
[2]
[3]
[4]
[5]
[6]
[7]
sis=&uno;
sis->b=3;
signal(SIGUSR1,f1);
[8]
for (h=0;h<2;h++)
{
for (k=0;k<2;k++)
sis->A[h][k]=(k*h)%uno.b;
}
[9]
[10]
[11]
[12]
[13]
[14]
if (h<2)
uno.A[h-1][k-1]=12;
else
x=sigsetmask(sigmask(SIGUSR1));
[15]
[16]
pause();
printf("\n%d %d\n%d %d\n", uno.A[0][0],uno.A[0][1],uno.A[1][0],uno.A[1][1]);
[17]
[18]
}
{
void f1(int sig)
printf("\nAsd2341\n");
}
Solución:
a) El significado de cada una de las sentencias marcadas con [] de este código es el siguiente:
[1] Declaración de la función principal main del programa, que en este caso no posee
parámetros de entrada ni de salida.
[2] Declaración de la variable x de tipo entero largo.
[3] Declaración de la variables k y h de tipo entero.
[4] Se define el tipo de estructura sistema que consta de dos campos. El primer campo A es
una matriz o array bidimensional entero de dos filas y dos columnas. El segundo campo b es
un número entero. Asimismo en esta sentencia se declara la estructura uno del tipo sistema
y el puntero *sis a una estructura del tipo sistema.
5
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
[5] Se asigna al puntero sis la dirección de la estructura uno.
[6] Se asigna el valor 3 al campo b de la estructura uno, mediante el uso del puntero sis.
[7] Llamada al sistema signal que asigna el manejador f1 a las señales del tipo SIGSUR1
(Señal 1 definida por el usuario).
[8] Bucle for cuyo índice de control h se inicializa al valor h=0. La condición que debe ser
satisfecha para que se continúe la ejecución del bucle es que h sea menor de 2. El índice se
incrementa en una unidad (h++) al finalizar una ejecución del bucle. En cada ejecución del
bucle se ejecutan las sentencias [9] y [10].
[9] Bucle for cuyo índice de control k se inicializa al valor k=0. La condición que debe ser
satisfecha para que se continúe la ejecución del bucle es que k sea menor de 2. El índice se
incrementa en una unidad (k++) al finalizar una ejecución del bucle. En cada ejecución del
bucle se ejecuta la sentencia [10].
[10] Se multiplica k por h. Al valor obtenido se le divide por el valor del campo b de la
estructura uno. El resto de esta división entera se asigna al elemento [h][k] del campo A de
la estructura uno mediante el uso del puntero sis.
[11] Sentencia condicional if, para comprobar si el valor de h es menor de 2. En caso
afirmativo se ejecuta la sentencia [12].
[12] Se asigna el valor 12 al elemento [h-1][k-1] del campo A de la estructura uno.
[13] Sentencia condicional else asociada con la sentencia [11]. En el caso de que el valor de
h no sea menor de 2 se ejecuta [14].
[14] Llamada al sistema sigsetmask para bloquear la recepción de las señales del tipo
SIGUSR1. En la variable x se almacena la máscara de señales original que se tenía
especificada antes de invocar a esta llamada al sistema.
[15] Llamada al sistema pause, hace que el proceso que la invoca quede a la espera de la
recepción de una señal que no ignore o que no tenga bloqueada.
[16] Función printf, para escribir el valor de los cuatro elementos del campo A de la
estructura uno en el dispositivo de salida estándar (típicamente el monitor) de acuerdo con la
siguiente cadena de control “\n%d %d\n%d %d\n“. Es decir, en pantalla se mostraría lo
siguiente: un salto de línea, el valor entero de A[0][0], un espacio en blanco, el valor entero
de A[0][1], un salto de línea, el valor entero de A[1][0], un espacio en blanco, el valor
entero de A[1][1] y un salto de línea.
6
SISTEMAS OPERATIVOS II
Solución examen mayo 2006
[17] Declaración de la función f1, que no devuelve ningún parámetro de salida y que recibe
como entrada el número entero que identifica a una señal.
[18] Función printf para escribir en el dispositivo de salida estándar, de acuerdo, a la
siguiente cadena de control “\nAsd2341\n”. Es decir, en pantalla se mostraría lo siguiente:
un salto de línea, la cadena de caracteres Asd2341 y un salto de línea.
b) 1)La ejecución desde la línea de comandos de la orden $ j06 & hace que se comience a
ejecutar en segundo plano del terminal un proceso A instancia del fichero ejecutable j06, al que de
acuerdo con el enunciado se le asigna un pid=526. Dicho proceso en primer lugar asigna al puntero
sis la dirección de la estructura uno. En segundo lugar asigna el valor 3 al campo b de la
estructura uno, mediante el uso del puntero sis. En tercer lugar invoca a la llamada al sistema
signal que asigna el manejador f1 a las señales del tipo SIGSUR1.
En cuarto lugar, mediante el uso de dos bucles for anidados, asigna los siguientes valores a los
elementos del campo A de la estructura uno: A[0][0]=0,A[0][1]=0, A[1][0]=0,
A[1][1]=1.
En quinto lugar, comprueba si el valor de h es menor de 2. La comprobación es negativa, ya que
h=2, por lo que invoca a la llamada al sistema sigsetmask para bloquear la recepción de las
señales del tipo SIGUSR1.
Finalmente, invoca a la llamada al sistema pause que hace que el proceso A quede espera de la
recepción de una señal que no ignore o que no tenga bloqueada.
b) 2) La orden $ kill -SIGUSR1 526, envía al proceso con pid=526 (el proceso A) una señal
SIGUSR1. Como el proceso A tiene bloqueadas dicho tipo de señales, el proceso permanece en
segundo plano a la espera de recibir una señal que no ignore o que no tenga bloqueada.
7
Descargar