Nombre alumno: Fila,columna: DNI: Grupo de...

12
Examen Final de Teoría Nombre alumno: Fila,columna: DNI: Grupo de teoría: 1 Preguntas Cortas (2 puntos) 1. Respecto a la optimización de gestión de memoria CoW, explica brevemente: a. ¿Qué soporte hardware utiliza el sistema para poder implementarla? b. ¿Qué permisos aplica el sistema a las páginas de memoria inicialmente? c. ¿Donde se almacena la información de los permisos reales de las páginas? 2. En un sistema de propósito general, la política de planificación se ejecuta periódicamente para evaluar si se debe cambiar de contexto. a. ¿Qué condición evalúa la política Round Robin para decidir si debe o no cambiar de proceso? b. En el caso de tener que cambiar de proceso, indica los pasos básicos que realiza el S.O. tanto a nivel de gestión de procesos como de gestión de memoria. 3. Dado el siguiente trozo de código, contesta las siguientes preguntas (justifica brevemente todas las respuestas):

Transcript of Nombre alumno: Fila,columna: DNI: Grupo de...

Page 1: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

1

Preguntas Cortas (2 puntos) 1. Respecto a la optimización de gestión de memoria CoW, explica brevemente:

a. ¿Qué soporte hardware utiliza el sistema para poder implementarla?

b. ¿Qué permisos aplica el sistema a las páginas de memoria inicialmente?

c. ¿Donde se almacena la información de los permisos reales de las páginas?

2. En un sistema de propósito general, la política de planificación se ejecuta periódicamente para

evaluar si se debe cambiar de contexto.

a. ¿Qué condición evalúa la política Round Robin para decidir si debe o no cambiar

de proceso?

b. En el caso de tener que cambiar de proceso, indica los pasos básicos que realiza el

S.O. tanto a nivel de gestión de procesos como de gestión de memoria.

3. Dado el siguiente trozo de código, contesta las siguientes preguntas (justifica brevemente

todas las respuestas):

Page 2: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

2

a. ¿Qué procesos ejecutarán la llamada execlp (padre/hijo/los dos?

b. ¿Qué procesos ejecutarán la llamada exit (padre/hijo/los dos)?

c. ¿Qué procesos continuarán iterando en el bucle (padre/hijo/los dos) y por lo tanto

creando nuevos procesos ?

while(1){

fork();

execlp(“ls”,”ls,null);

exit(1);

}

Page 3: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

3

Ejercicio 1: cuentaDigitos (5 puntos) Se quiere implementar un programa que cuente el número de dígitos que aparecen en un fichero.

El programa recibirá como parámetros el nombre del fichero y el número de procesos que se

quieren crear para hacer este recuento. El programa principal creará el número de procesos hijo

requerido, cada proceso hijo se encargará de contar el número de dígitos que aparecen en un

conjunto de bytes consecutivos del fichero y enviará al proceso padre el número de dígitos que ha

encontrado en su fragmento (cada hijo tratará un conjunto diferente). Por su parte, el padre una

vez creados todos los procesos hijo se quedará a la espera de recibir los resultados parciales,

calcular la suma de todos ellos y mostrar el resultado final por salida estándar. Para la

comunicación entre el proceso padre y los procesos hijo se va a utilizar pipes sin nombre. A

continuación tienes una propuesta de código incompleta. Por simplicidad, asumiremos que el

tamaño del fichero es múltiplo del número de procesos.

Se pide que contestes razonadamente a las siguientes preguntas.

Page 4: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

4

1. Representa la jerarquía de procesos que se creará cuando ejecutemos este código de la

siguiente manera:

% cuentaDigitos fichero 3

1. main(int argc, char *argv[]){ 2. 3. int i, nproc, ret, salir; 4. int pids[MAX_PROCS]; 5. int tam, tamxproc, pos_inic, nbytes; 6. int fd; 7. int parcial = 0, ndigitos = 0, final=0; 8. char c; 9. char buffer[80]; 10. 11. nproc = atoi (argv[2]); 12. 13. / * CODIGO NECESARIO PARA CALCULAR tam (tamaño fichero)*/ 14. 15. tamxproc = tam /nproc; 16. 17. i=0; 18. salir = 0; 19. while (i<nproc) { 20. pos_inic = i*tamxproc; 21. pids[i]=fork(); 22. if (pids[i]== 0) { 23. fd = open (argv[1], O_RDONLY); 24. lseek(fd,pos_inic,SEEK_SET); 25. nbytes = 0; 26. ret = read(fd,&c,sizeof(c)); 27. while ((ret > 0) && (nbytes<tamxproc)){ 28. nbytes ++; 29. if ((c >= '0') && (c <= '9')) { 30. ndigitos++; 31. } 32. ret = read(fd,&c,sizeof(char)); 33. } 34. /* PIPE representa el canal adecuado de una pipe sin nombre */ 35. write(PIPE,&ndigitos, sizeof(int)); 36. exit(0); 37. } else { 38. i++; 39. } 40. } 41. /* PIPE representa el canal adecuado de una pipe sin nombre */ 42. while ((ret = read(PIPE, &parcial, sizeof(int))) > 0) { 43. final = final + parcial; 44. } 45. sprintf(buffer, "El número de digitos es: %d\n", final); 46. write (1, buffer, strlen(buffer)); 47. 48. while (waitpid(-1, NULL, 0) > 0); 49. 50. } 51.

Page 5: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

5

2. ¿Qué líneas de código añadirías en la posición 12 para calcular el tamaño del fichero?

3. En esta implementación, ¿se garantiza que cada proceso hijo va a acceder a un fragmento

del fichero diferente? En caso afirmativo indica qué líneas de código y porqué. En caso

negativo indica que cambiarías/añadirías y donde.

4. En esta implementación, ¿crees que es necesario usar pipes para que el padre obtenga el

resultado parcial de cada hijo? ¿O podríamos hacerlo haciendo que el padre acceda

directamente a la variable ndigitos que calcula cada hijo?

Page 6: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

6

5. Tal y como hemos implementado el código para que los hijos envíen el resultado al padre,

¿es suficiente crear una sola pipe para implementar la comunicación descrita en el

enunciado? ¿Por qué?

6. Escribe el código necesario para crear y configurar la(s) pipe(s). Para cada línea de código

que añadas, indica en qué posición del programa la añadirías. Indica además cual sería el

primer parámetro de la escritura de la línea 35 y de la lectura de la línea 42 de acuerdo a

tu código.

7. Supón ahora que queremos que el padre controle el orden en el que los hijos envían la

información al padre. Queremos hacerlo mediante signals: el padre mandará un signal de

tipo SIGUSR1 al proceso hijo que tiene el turno para mandar la información, quedará a la

espera de recibir el resultado del hijo y a continuación le enviará el signal al siguiente hijo.

Cada proceso hijo esperará a recibir el signal antes de escribir en la pipe. Suponiendo que

el orden del turno de los hijos es el orden de creación, escribe el código que añadirías o

modificarías, indicando la posición en la que lo harías.

Page 7: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

7

8. Una vez completo el programa, observamos que su código ocupa 9Kb. Supón que

ejecutamos el programa tal y como indicábamos en el apartado 1 (cuentaDigitos fichero 3)

en una máquina cuya gestión de memoria está basada en paginación con un tamaño de

página es 4Kb. Al cargar en memoria los procesos, no se permite que el código comparta

páginas con los datos, para poder especificar diferentes permisos de acceso. ¿Cuánta

memoria necesitaremos poder cargar al mismo tiempo el código de todos los procesos, si

no disponemos de copy-on-write,? ¿Y si tenemos copy-on-write?

Page 8: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

8

Page 9: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

9

Ejercicio 2: Sistema de ficheros (3 puntos) Disponemos de un sistema de ficheros Linux completamente vacío, en el cual hay únicamente el

directorio raíz implementado con el siguiente inodo y bloque de datos:

Suponed que ejecutamos los siguientes comandos en un terminal:

Recordad que: el comando mv mueve un fichero (origen-destino), ln –s crea un soft link y ln crea

un hard link. Los inodos y los bloques de datos se van ocupando y numerando a medida que se

necesitan. Responded a las siguientes preguntas:

1. Dibujad el árbol de ficheros resultante, poniendo al lado de cada nombre (entre

paréntesis) el número de inodo que implementa.

% mkdir A

% mkdir B

% mkdir C

% cd /A

% echo “123” > f1

% cp f1 f2

% echo “456” > f3

% cd /C

% mv /A/f1 .

% ln –s /A/f3 f4

% ln /A/f3 f5

. 1

.. 1

Inodo #1 Bloc de dades #1

n refs:

1er bloc:

tipus:

2

1

dir

Page 10: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

10

2. ¿Cuantos inodos nuevos se crean? Indicad en que comando de los anteriores se crea cada

uno, y el tipo de archivo que hay en el inodo (data, dir o link)

3. Dibujad el inodo y el bloque de datos (especificando los números) asociado a f3.

4. Dibujad el inodo y el bloque de datos (especificando los números) asociado a f4.

5. Dibujad el inodo y el bloque de datos (especificando los números) asociado a f5.

Bloc de dades #

Bloc de dades #

Inode #

n refs:

1er bloc:

tipus:

Bloc de dades #

Inode #

n refs:

1er bloc:

tipus:

Inode #

n refs:

1er bloc:

tipus:

Page 11: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

11

6. Dibujad el bloque de datos asociado al directorio C.

7. Dibuixeu l’inode i el bloc de dades associats al directori arrel.

Suponed que ejecutamos a continuación los comandos siguientes:

8. ¿Cuál será el resultado de ejecutar el comando cat /C/f4? Justifica la respuesta.

9. ¿Cuál será el resultado de ejecutar el comando cat /C/f5? Justifica la respuesta.

% rm /A/f3

% echo “789” > /A/f3

Bloc de dades #

Bloc de dades #1

Inode #1

n refs:

1er bloc:

tipus:

Page 12: Nombre alumno: Fila,columna: DNI: Grupo de teoríadocencia.ac.upc.edu/FIB/grau/.../ExamenesAntiguos/...b. En el caso de tener que cambiar de proceso, indica los pasos básicos que

Examen Final de Teoría

Nombre alumno: Fila,columna: DNI: Grupo de teoría:

12

10. Calcula que accesos a a disco hará la siguiente llamada a sistema

open(“/C/f4”,O_RDONLY), sabiendo que el sistema no dispone de buffer cache y que

no hay ningún inodo cargado previamente en memoria.