Soluciones del examen de junio, curso 1995/96
Segunda parte

  1. Soluciones del examen de junio, curso 1995/96
    Primera parte
    1. Pregunta 1. TEST
    2. Pregunta 2. Cuestión práctica
    3. Pregunta 3. Cuestión práctica
    4. Pregunta 4. Cuestiones teóricas
  2. Pregunta 5. Ejercicio en C

PARTE PRIMERA DE CONTENIDOS BÁSICOS.

Pregunta 1. TEST

Responda cada uno de los apartados numerados señalando la opción correcta. La puntuación total de la pregunta se obtendrá aplicando lo siguiente:

- Cada apartado vale 0.15 pts.

- Los apartados contestados incorrectamente penalizan 0.05 pts.

Observe que los apartados no contestados no puntúan, y los contestados erróneamente penalizan.

Señale con bolígrafo sus respuestas sobre estas hojas de enunciado, rodeando la opción correcta. En caso de equivocación, tache y redondee la que considere correcta. Los apartados respondidos a lápiz o con múltiples redondeles se considerarán no respondidos.

1. De cara a la compartición de memoria el esquema más restrictivo es:

a. Particiones dinámicas.

b. Segmentado.

c. Paginado.

d. Segmentado/paginado.

2. Mediante la codificación independiente de la posición se resuelve:

a. Autorreferenciación de código compartido.

b. Autorrefernciación en directorios con estructura de grafo.

c. Protección de memoria.

d. Traducción dinámica de direcciones.

3. La técnica con menor recargo a la hora de resolver una dirección de memoria es:

a. Particiones dinámicas.

b. Segmentado.

c. Paginado.

d. Segmentado/paginado.

4. El MSDOS utiliza reubicación:

a. Estática.

b. Dinámica.

c. Paginada.

d. Mixta.

5. El esquema de gestión de memoria empleado por el sistema operativo del Windows-NT es:

a. Particiones dinámicas.

b. Segmentado.

c. Paginado.

d. Segmentado/paginado.

6. En un sistema paginado con memoria virtual mediante la política de asignación se decide:

a. Qué marco de página se asigna a un proceso.

b. Qué cantidad de memoria real se asigna a un proceso.

c. Cuando se incorpora una página a memoria.

d. Ninguna de las anteriores son correctas.

7. La anomalía de Belady se produce en la política de asignación:

a. LRU (Menos recientemente usada).

b. Óptimo.

c. NRU (No usada recientemente).

d. En Ninguna de las anteriores.

8. El método de tratamiento del interbloqueo que menos restricciones impone de cara al uso de los recursos es:

a. Prevención.

b. Detección.

c. Banquero.

d. Todos los anteriores por igual.

9. La ordenación lineal de recursos actúa sobre la condición de:

a. No apropiación.

b. Retención y espera.

c. Espera circular.

d. Exclusión mutua.

10. La declaración de las necesidades máximas de recursos por parte de los procesos se debe realizar en:

a. Detección del interbloqueo.

b. Algoritmo del banquero.

c. Prevención del interbloqueo mediante espera circular.

d. Prevención del interbloqueo mediante negación de retención y espera.

11. De cara a la flexibilidad de organización de archivos en un sistema, la mejor estructura de directorio es:

a. Lineal.

b. Árbol.

c. Grafo.

d. Jerárquica de doble nivel.

12. La fragmentación externa en disco se presenta con la asignación:

a. Contigua.

b. Enlazada.

c. Indexada.

d. En ninguna de las anteriores.

13. La política asignación de disco que más espacio requiere para su implementación es:

a. Contigua.

b. Enlazada.

c. Indexada.

d. Todas por igual.

14. En general un acceso directo a un archivo se realiza más rápidamente en sistemas con asignación:

a. Contigua.

b. Enlazada.

c. Indexada.

d. En todas las anteriores se tarda lo mismol.

15. En UNIX la estructura de control utilizada para controlar archivos abiertos se denomina:

a. Inode.

b. In core Inode.

c. Pfdata.

d. Área U.

16. En UNIX la estructura de control asociada a cada proceso y que se almacena en memoria de usuario se denomina:

a. Inode.

b. In core Inode.

c. Pfdata.

d. Área U.

17. En UNIX un proceso en estado de zombie es:

a. Un proceso bloqueado indefinidamente.

b. Un proceso finalizado que aún retiene su entrada en la tabla de procesos.

c. Un proceso ejecutándose en segundo plano.

d. Un proceso que no tiene proceso padre.

18. En MSDOS la estructura de control asociada a cada proceso y que se almacena en memoria de usuario se denomina:

a. Encabezado de programa.

b. Prefijo de segmento de programa.

c. Bloque de control de fichero.

d. Bloque de parámetros BIOS.

19. La unidad de asignación de memoria en MSDOS es:

a. Un segmento de tamaño arbitrario pero no mayor de 64 KBytes.

b. La página de tamaño fijo.

c. El párrafo o bloque de memoria de 16 bytes.

d. Ninguna de las anteriores son correctas.

20. Las características físicas de un disco formateado MSDOS se almacenan en una estructura de control llamada:

a. Directorio raíz.

b. FAT.

c. Bloque de parámetros BIOS.

d. Memory Arena.

Pregunta 2. Cuestión práctica

Suponga un subsistema de archivos parecido al empleado por UNIX. Los bloques de datos a asignar a los ficheros poseen un tamaño de 1024 bytes, cada archivo posee un vector con 9 entradas para controlar los bloques de datos que le han sido asignado, siendo las 8 primeras de tipo directo y la novena de tipo indirecto y los punteros a los bloques de datos tienen un tamaño de 16 bits. Se pide:

A. ¿Cuál será el tamaño máximo expresado en bytes que podrá tener un fichero? (0.50 ptos).

Respuesta:

Bloques directos: 8

1 bloque indirecto contendrá 512( 1024/2) punteros a bloques de datos

Tamaño máximo en bytes: 520 * 1024

B. Especifique los pasos y cálculos a realizar para convertir una dirección de byte de archivo expresado como desplazamiento desde el origen a dirección de bloque de datos y desplazamiento dentro de éste (1 pto).

Respuesta:

Sea punt la direccion de comienzo del dato a partir del origen del fichero

1. Cálculo del bloque relativo:

Bloque relativo: blq_rel = Ent( punt / 1024)

Desplazamiento dentro de bloque: desp_blq = punt % 1024

2. Cálculo de la dirección de bloque de sistema de ficheros:

Si ( blq_rel <= 7 ) Entonces

blq_fs = vect[blq_rel];

si no

Acceder al array de punteros contenido en vect[8] y volcarlo en aux;

blq_fd = aux[blq_rel-8];

fin si

3. Retornar blq_fd y desp_blq.

Pregunta 3. Cuestión práctica

Un sistema operativo soporta memoria virtual mediante paginación por demanda. La política de sustitución empleada es la NRU. Suponga que la tabla de páginas del proceso es la siguiente:

      Página                Marco         Bit de Validez       Bit de Referencia    
         0                  3156          1                    0                    
         1                  xxxx          0                    0                    
         2                  xxxx          0                    0                    
         3                  35C3          1                    1                    
         4                  2A4E          1                    1                    
         5                  xxxx          0                    0                    
         6                  2D27                   1           0                    
         7                  3728          1                    1                    

Desde la situación mostrada en la tabla se han referenciado por el proceso las páginas: 0, 4, 5 y 2. Se pide mostrar las variaciones que experimenta la tabla de páginas teniendo en cuenta que:

a) la sustición de páginas es local, siendo 5 el número máximo de marcos asignados que puede tener el proceso.

b) La última página víctima de la tabla fue la 2.

Referencia 0: como se trata de una página válida y su bit de referencia está a 0 entonces se modificacría dicho bit , quedando la tabla de la siguiente manera:

      Página                Marco         Bit de Validez       Bit de Referencia    
         0                  3156          1                             1           
         1                  xxxx          0                             0           
         2                  xxxx          0                             0           
       3(*)                 35C3          1                             1           
         4                  2A4E          1                             1           
         5                  xxxx          0                             0           
         6                  2D27          1                             0           
         7                  3728          1                    1                    

(*) Indica posición del puntero

Referencia 4: Como se trata de una página que es válida y además su bit de referencia está a 1, entonces la tabla no sufriría modificación alguna con respecto al estado anterior.

Referencia 5: Se trata de una página no válida, por tanto como el proceso ya tiene ocupados 5 marcos en memoria se debe ejecutar la política NRU, una vez ejecutada la tabla quedaría:

      Página                Marco         Bit de Validez       Bit de Referencia    
         0                  3156          1                    1                    
         1                  xxxx          0                    0                    
         2                  xxxx                   0                    0           
         3                  35C3                   1                    0           
         4                  2A4E                   1                    0           
         5                  2D27                   1                    0           
         6                  xxxx                   0                    1           
       7 (*)                3728          1                    1                    

Observar como varían los bits de referencia de las páginas 3 y 4 como resultado de la ejecución de la NRU y como se pone a 1 el de la página recien entrada, además se ha asumido que la página 5 ocupa el marco que tenía la página 6 elegida como víctima.

Referencia 2: Se trata de una página no válida, por tanto como el proceso ya tiene ocupados 5 marcos en memoria se debe ejecutar la política NRU, una vez ejecutada la tabla quedaría:

      Página                Marco         Bit de Validez       Bit de Referencia    
         0                  3156          1                    0                    
         1                  xxxx          0                    0                    
         2                  35C3          1                    0                    
         3                  xxxx          0                    0                    
       4(*)                 2A4E          1                             0           
         5                  2D27          1                             0           
         6                  xxxx          0                             0           
         7                  3728          1                    0                    

Observar como varían los bits de referencia de las páginas 7 y 0 como resultado de la ejecución de la NRU y como se pone a 0 el de la página recien entrada, además se ha asumido que la página 2 ocupa el marco que tenía la página 3 elegida como víctima.

2[[ordfeminine]] PARTE: CONCEPTOS AVANZADOS

Pregunta 4. Cuestiones teóricas

Conteste utilizando 4 líneas como máximo a las siguientes preguntas:

1. (0.50 ptos) Especifique un caso de sistema operativo que soporte varias políticas de asignación, explicando de qué manera lo hace.

Respuesta: El ejemplo lo tenemos en el sistema MSDOS que permite mediante una llamada al sistema por parte del proceso que se ejecuta seleccionar una política de asignación entre: primer ajuste, mejor ajuste y último ajuste.

2. (0.75 ptos) Suponga un sistema que utiliza el algoritmo del banquero para solucionar el problema del interbloqueo ¿puede la declaración de las necesidades máximas por parte de los procesos llevar al sistema a un estado inseguro?, justifique su respuesta.

Respuesta: NO. Ya que al partir de un estado seguro (se asume pues se utiliza el algoritmo del banquero) la mera declaración de necesidades máximas por un nuevo proceso, Pn, mantendrá al sistema en un estado seguro, pues siempre la secuencia <P0,P1, ..., Pn> será segura, siendo <P0,P1, .., Pn-1> la secuencia segura encontrada antes de la declaración de Pn .

3. ( 0.50 ptos) Explique como se soporta la compartición de memoria en Windows-NT, si lo desea utilice un dibujo en su respuesta.

Respuesta: El Windows NT soporta memoria virtual utilizando además un esquema paginado, la compartición de memoria se soporta mediante el uso de una estructura de control llamada "entrada prototipo de la tabla de página" de forma que cada página compartida tendrá su entrada en la tabla de páginas apuntado a una entrada Prototipo de la tabla de páginas.

Pregunta 5. Cuestión práctica Utilizando semáforos UNIX systen V implemente un semáforo entero clásico mediante las siguientes funciones:

int crea_sem( key_t key, int val)

Crea un semáforo cuyo identificador es key y lo inicializa a un valor entero indicado por val, retornará 0 si la función se ejecuta con exito y -1 si un error ha ocurrido. En el caso de que el semáforo a crear ya exista retornará -1.

int abre_sema(key_t key)

Retorna un descriptor de semáforo asociado a key_t que deberá utilizarse en las sucesivas operaciones P y V que se describen a continuación, si un error ocurre entonces retornará -1. Si el semáforo referenciado por key_t no existe entonces retornará -1.

int P( int sem_id )

Ejecuta la primitica P sobre el semáforo especificado por el descriptor sem_id, retornará 0 si la función se ha ejecutado sin error y -1 si un error ha ocurrido.

int V( int sem_id )

Ejecuta la primitica V sobre el semáforo especificado por el descriptor sem_id, retornará 0 si la función se ha ejecutado sin error y -1 si un error ha ocurrido.

Prototipos de funciones para operar con semáforos UNIX System V:

#include <sys/sem.h>

int semget( key_t key, int nsems, int semflg)

Valores admisibles de semflg: 0, IPC_CREAT, IPC_EXCL

int semctl( int semid, int senum, int cmd, .... )

Valores admisibles de cmd: GETVAL, SETVAL, GETPID, GETNCNT y GETZCNT para acceder a semáforos individuales. GETVALL y SETALL para acceder al array de semáforos. IPC_STAT y IPC_SET para acceder a información global de control del array de semáforos.

int semop( int semid, struct sembuf *sops, unsigned int nsops)

struct sembuf {

ushort sem_num; /* Número de semáforo */

short sem_op; /* operación */

short sem_flag; /* flag de operación */

}

Valores admisibles de sem_flag: 0, IPC_NOWAIT, SEM_UNDO

Repuesta :

int crea_sem( key_t Key, int val)

{

int sem_id;

sem_id = semget( key, 1, IPC_CREAT|IPC_EXCL);

if ( sem_id < 0 ) return(-1);

if ( (val < 0) || (val > MAX_USHORT) ) return(-1);

if ( semctl( sem_id, 0, SETVAL, (ushort)val) < 0 ) return(-1);

return(0);

}

int abre_sem( key_t key )

{

int sem_id;

sem_desc = semget( key, 1, 0);

return( sem_id );

}

int P( int sem_id )

{

struct sembuf p_sembuf;

p_sembuf.sem_num = 0;

p_sembuf.sem_op = -1;

p_sembuf.sem_flg = 0;

return( semop(sem_id, &p_sembuf, 1) );

}

int V( int sem_id )

{

struct sembuf v_sembuf;

v_sembuf.sem_num = 0;

v_sembuf.sem_op = 1;

v_sembuf.sem_flg = 0;

return( semop( sem_id, &v_sembuf, 1) );

}

TIEMPO PARA REALIZAR EL EXAMEN (AMBAS PARTES) : 2 HORAS.

PUNTUACIÓN MÍNIMA A ALCANZAR EN LA PRIMERA PARTE PARA OPTAR A APROBAR: 3.50