SOLUCION EXAMEN junio 2006

Anuncio
SISTEMAS OPERATIVOS II
Solución examen junio 2006
SOLUCION EXAMEN junio 2006
1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas:
I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de
usuario y los procesos del núcleo.
II) (1 p) En UNIX, la caché de buffers de bloques utiliza una política de escritura del
tipo post-escritura.
Solución:
I) Los procesos en el sistema UNIX pueden ser de tres tipos: procesos de usuario, procesos
demonio y procesos del núcleo o del sistema. En conclusión la afirmación es FALSA.
II) Generalmente, una caché puede soportar dos políticas de escritura: inmediata y postescritura. La política de escritura inmediata consiste en que cuando hay que realizar una
operación de escritura ésta se realiza tanto en la copia de los datos almacenados en la caché
como en los datos originales situados en el almacenamiento de apoyo (el sistema de ficheros
en el disco).
La política de escritura inmediata no es apropiada para la caché de buffers de bloques, puesto
que el rendimiento del sistema se ve seriamente afectado. Se estima que en la operación
normal de un sistema cerca de un tercio de las operaciones de E/S son operaciones de
escritura, y muchas de ellas son transitorias. Por ejemplo, la sobreescritura de un dato o el
borrado del contenido de un fichero. Esto causaría muchas escrituras innecesarias,
relantizando al sistema tremendamente. Por esta razón, la caché de buffer de UNIX utiliza una
política de escritura del tipo post-escritura. Es decir, los bloques modificados son simplemente
marcados como “sucios”, y son escritos al disco cuando los buffers que los contienen son
seleccionados para ubicar otros bloques al no existir buffers libres en la caché.
En conclusión la afirmación es VERDADERA.
1
SISTEMAS OPERATIVOS II
Solución examen junio 2006
2. (2 p) Enumere y explique brevemente las principales circunstancias que motivan en UNIX la
realización de un cambio de contexto.
Solución:
Entre las principales circunstancias que motivan la realización de un cambio de contexto
se encuentran:
La entrada de un proceso en el estado dormido. La realización de un cambio de
contexto en esta circunstancia está plenamente justificada ya que puede transcurrir
una cierta cantidad de tiempo hasta que el proceso despierte, con lo que mientras
tanto se pueden ejecutar otros procesos.
La finalización de la ejecución de una llamada al sistema exit. Esta llamada al
sistema provoca la terminación del proceso en cuyo contexto se está ejecutando el
núcleo. Por lo tanto, puesto que el proceso actual ha sido finalizado el núcleo debe
hacer un cambio de contexto para continuar o iniciar la ejecución de otro proceso.
La vuelta al modo usuario tras ejecutarse una llamada al sistema y la existencia de
un proceso esperando para ser ejecutado con mayor prioridad de planificación que
el actual. En este caso se produce un cambio de contexto porque si hay otro
proceso con mayor prioridad de planificación, sería injusto mantenerle esperando.
La vuelta al modo usuario tras atenderse una interrupción y la existencia de un
proceso esperando para ser ejecutado con mayor prioridad de planificación que el
actual. La justificación del cambio de contexto en esta circunstancia es análoga al
caso anterior.
La finalización del tiempo de uso del procesador de un proceso ejecutándose en
modo usuario. En esta circunstancia se planifica otro proceso para ser ejecutado en
modo usuario y por tanto es necesario realizar un cambio de contexto.
2
SISTEMAS OPERATIVOS II
Solución examen junio 2006
3. Considérese la siguiente llamada al sistema: salida=shmat(par1,par2,par3). a) (0.4 p)
¿Para que se utiliza esta llamada al sistema?. b) (1.2 p) Explique el significado de par1, par2
y par3 c) (0.4 p) Explique los posibles valores que puede tomar salida.
Solución:
a) La llamada shmat asigna un espacio de direcciones virtuales al segmento de memoria cuyo
identificador ha sido dado por shmget. Por lo tanto shmat enlaza una región de memoria
compartida de la tabla de regiones con el espacio de direcciones de un proceso.
b) par1 es un identificador de una región de memoria compartida.
par2 es la dirección virtual del proceso donde se desea que empiece la región de memoria
compartida.
par3, es una máscara de bits que indica la forma de acceso a la memoria.
c) Si la llamada al sistema shmat tiene éxito en salida se almacena la dirección a la que
está unido el segmento de memoria compartida par1. En caso contrario en salida se
almacena el valor -1.
3
SISTEMAS OPERATIVOS II
Solución examen junio 2006
4. En la Figura se muestra la lista de callouts del núcleo del UNIX BSD en un cierto instante de tiempo. Se
pide: a) (0.5 p) Explicar brevemente que es un callout. b) (0.75 p) Determinar el tiempo de disparo (en tics)
de func1, func2, func5 y func12. c) (0.75 p) Supuesto que ha transcurrido un tic, dibujar la lista de
callout.
Cabecera
de la lista
de callouts
t=5
func12
t=2
func1
t=1
func5
t=3
func2
Solución:
a) Los callouts son un mecanismo interno del núcleo que le permite invocar funciones
transcurrido un cierto tiempo. Un callout típicamente almacena el nombre de la función que
debe ser invocada, un argumento para dicha función y el tiempo en tics transcurrido el cual
la función debe ser invocada.
b) En la figura del enunciado se muestra la lista de callouts en un cierto instante de tiempo. Se
observa que dicha lista contiene cuatro entradas asociados a cuatro callouts. En el UNIX
BSD la lista de callouts se ordena en función del tiempo que le resta al callout para ser
invocado. A este tiempo comúnmente se le denomina tiempo de disparo. Cada entrada de
la lista de callouts almacena la diferencia entre el tiempo de disparo de su callout asociado y
el tiempo de disparo del callout asociado a la entrada anterior. Por lo tanto
La primera entrada de la lista está asociada al callout para la función func12 y en ella
también se almacena su tiempo de disparo que es 5 tics.
La segunda entrada está asociada al callout para la función func1. En su entrada de la lista
se almacena el tiempo que resta para ser invocada con respecto a func12, en este caso es
2 tics. Su tiempo de disparo es la suma de los tiempos almacenados en esta segunda
entrada y en la primera entrada, es decir, 5+2= 7 tics.
La tercera entrada está asociada al callout para la función func5. En su entrada de la lista
se almacena el tiempo que resta para ser invocada con respecto a func1, en este caso es
1 tic. Su tiempo de disparo es la suma de los tiempos almacenados en esta tercera entrada
y en las dos entradas anteriores, es decir, 5+2+1= 8 tics.
La cuarta entrada está asociada al callout para la función func2. En su entrada de la lista
se almacena el tiempo que resta para ser invocada con respecto a func5, en este caso es
3 tics. Su tiempo de disparo es la suma de los tiempos almacenados en esta cuarta entrada
y en las tres entradas anteriores, es decir, 5+2+1+3= 11 tics.
4
SISTEMAS OPERATIVOS II
Solución examen junio 2006
c) En la figura inferior se representa la lista de callouts supuesto que ha transcurrido un tic
Cabecera
de la lista
de callouts
t=4
func12
t=2
func1
t=1
func5
t=3
func2
5. Al compilar el siguiente código C se crea el ejecutable j06. En el momento de ejecutar j06
existe en el sistema el siguiente rango de identificadores de procesos (pid) disponibles:
[5000-9000]. Conteste razonadamente a los siguientes apartados: a) (0.5 p) Explique el
significado de las sentencias del código marcadas con [ ]. b) (1.5 p) Explique el funcionamiento
de este programa supuesto que se invoca desde la línea de ordenes del terminal de la siguiente
forma: $ j06 17 20
[1] void main(int argc, char *argv[])
{
[2]
int X, Y, Z, h=0;
[3]
if (argc!=3)
[4]
exit(0);
else
{
[5]
X=atoi(argv[1]);
Y=atoi(argv[2]);
[6]
Z=X&Y;
[7]
for (h=0;h<2;h++) Z=Z>>1;
[8]
if (fork()==2) Z=Z<<2;
[9]
printf("%d %o %x\n",Z,Z,Z);
}
}
Solución:
En la contestación de los dos apartados se va a suponer que el sistema asocia el proceso A a
la ejecución del fichero ejecutable j06.
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 indica que el
ejecutable j06 podrá recibir argumentos desde la línea de comandos ($) cuando sea
invocado. El parámetro argc de tipo entero contendrá el número de argumentos que recibe
el ejecutable desde la línea de comandos, recuerde que el nombre del ejecutable es
considerado como argumento. Por otro lado *argv[]es un array de punteros a caracteres,
cada elemento del array apunta a un argumento de la línea de ordenes.
5
SISTEMAS OPERATIVOS II
Solución examen junio 2006
[2] Declaración de las variables X, Y, Z y h de tipo entero. De todas ellas, sólo la variable h
es inicializada, en este caso a 0.
[3] Sentencia condicional if, para comprobar si el número de argumentos argc que
recibe el ejecutable desde la línea de comandos es distinto de 3.
[4] Llamada al sistema exit para finalizar el proceso A. Posee un 0 como parámetro de
entrada, que es el código de retorno para el proceso padre de A.
[5] Función de librería atoi para convertir el primer argumento (argv[1]) que recibe
j06, a un número entero. Dicho valor entero se asigna a la variable X.
[6] Operación binaria AND entre las variables X e Y. El resultado se almacena en la variable
Z.
[7] 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 realiza la operación binaria Z=Z>>1, es decir, desplazar el número binario
almacenado en Z un bit a la derecha. El resultado de esta operación binaria se vuelve a
almacenar en Z.
[8] Sentencia condicional if, para evaluar si la llamada al sistema fork, que crea un
proceso hijo a partir del proceso A, devuelve el valor 2. En caso afirmativo se realiza la
operación binaria Z=Z>>2, es decir, desplazar el número binario almacenado en Z dos
bits a la derecha. El resultado de esta operación binaria se vuelve a almacenar en Z.
[9] Función printf, para escribir el valor de Z en el dispositivo de salida estándar
(típicamente el monitor) de acuerdo con la siguiente cadena de control “%d %o %x\n". Es
decir, en pantalla se mostraría lo siguiente: el valor entero de Z, un espacio en blanco, el
valor octal de Z, un espacio en blanco, el valor hexadecimal de Z y un salto de línea.
b) En primer lugar el proceso A comprueba si el número de argumentos que recibe el
ejecutable desde la línea de comandos es distinto de 3. La comprobación es negativa ya que la
orden j06 17 20 tiene tres argumentos (se debe recordar que el nombre del ejecutable se
cuenta como argumento).
En segundo lugar, convierte los argumentos 1 y 2 de la orden, de cadenas de caracteres a
números enteros. Luego X=17 e Y=20.
6
SISTEMAS OPERATIVOS II
Solución examen junio 2006
En tercer lugar, realiza la operación binaria AND entre las variables X e Y, y almacena el
resultado de la operación en Z. El número 17 en binario es 10001 y el 20 en binario es 10100.
Luego Z= (10001) & (10100) =10000, es decir, Z=16.
En cuarto lugar, de acuerdo con el bucle for, realiza dos veces la operación Z=Z>>1. Así,
para h=0, el resultado de la operación es Z=(10000>>1)=01000. Y para h=1, el resultado de la
operación es Z=(01000>>1)=00100. Luego al finalizar el bucle Z=4.
En quinto lugar se crea, mediante la invocación de la llamada al sistema fork, un proceso hijo
B del proceso padre A. Luego en este punto del programa se tienen dos procesos el padre A y
el hijo B. En consecuencia hay que diferenciar las acciones que realiza cada proceso:
- Proceso A: La llamada al sistema fork devuelve al proceso padre el pid del proceso hijo.
Este pid de acuerdo con el enunciado estará comprendido entre [5001-9000], supuesto que al
proceso A se le ha asociado el pid=5000. En consecuencia no se cumple la condición que
evalua el if. A continuación, imprime en la pantalla el texto
4 4 4
y finaliza.
- Proceso B: La llamada al sistema fork devuelve al proceso hijo el valor 0.. En consecuencia
no se cumple la condición que evalua el if. A continuación, imprime en la pantalla el texto
4 4 4
y finaliza.
Comentario: Es el planificador de UNIX es el que decidirá que proceso A o B se ejecuta en
primer lugar. De cara al usuario, en el caso de j06, este hecho es imperceptible ya que la
traza que genera la ejecución de j06 en pantalla es:
4 4 4
4 4 4
7
Descargar