SO APUNTES Y EXAMENES (2014)

Examen Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería Informática - 5º curso
Asignatura SO
Año del apunte 2014
Páginas 12
Fecha de subida 10/09/2014
Descargas 0
Subido por

Descripción

Examenes resueltos y apuntes y ejercicios

Vista previa del texto

Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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): 1 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: while(1){ fork(); execlp(“ls”,”ls,null); exit(1); } 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 ? 2 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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.
3 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
main(int argc, char *argv[]){ int i, nproc, ret, salir; int pids[MAX_PROCS]; int tam, tamxproc, pos_inic, nbytes; int fd; int parcial = 0, ndigitos = 0, final=0; char c; char buffer[80]; nproc = atoi (argv[2]); / * CODIGO NECESARIO PARA CALCULAR tam (tamaño fichero)*/ tamxproc = tam /nproc; i=0; salir = 0; while (i<nproc) { pos_inic = i*tamxproc; pids[i]=fork(); if (pids[i]== 0) { fd = open (argv[1], O_RDONLY); lseek(fd,pos_inic,SEEK_SET); nbytes = 0; ret = read(fd,&c,sizeof(c)); while ((ret > 0) && (nbytes<tamxproc)){ nbytes ++; if ((c >= '0') && (c <= '9')) { ndigitos++; } ret = read(fd,&c,sizeof(char)); } /* PIPE representa el canal adecuado de una pipe sin nombre */ write(PIPE,&ndigitos, sizeof(int)); exit(0); } else { i++; } } /* PIPE representa el canal adecuado de una pipe sin nombre */ while ((ret = read(PIPE, &parcial, sizeof(int))) > 0) { final = final + parcial; } sprintf(buffer, "El número de digitos es: %d\n", final); write (1, buffer, strlen(buffer)); while (waitpid(-1, NULL, 0) > 0); } 1. Representa la jerarquía de procesos que se creará cuando ejecutemos este código de la siguiente manera: % cuentaDigitos fichero 3 4 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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? 5 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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.
6 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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? 7 Examen Final de Teoría Nombre alumno: DNI: 8 Fila,columna: Grupo de teoría: Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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: Inodo #1 Bloc de dades #1 n refs: tipus: 2 .
1 dir ..
1 1er bloc: 1 Suponed que ejecutamos los siguientes comandos en un terminal: % % % % % % % % % % % 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 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.
9 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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.
Inode # Bloc de dades # n refs: tipus: 1er bloc: 4.
Dibujad el inodo y el bloque de datos (especificando los números) asociado a f4.
Inode # Bloc de dades # n refs: tipus: 1er bloc: 5.
Dibujad el inodo y el bloque de datos (especificando los números) asociado a f5.
Inode # n refs: tipus: 1er bloc: 10 Bloc de dades # Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 6. Dibujad el bloque de datos asociado al directorio C.
Bloc de dades # 7. Dibuixeu l’inode i el bloc de dades associats al directori arrel.
Bloc de dades #1 Inode #1 n refs: tipus: 1er bloc: Suponed que ejecutamos a continuación los comandos siguientes: % rm /A/f3 % echo “789” > /A/f3 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.
11 Examen Final de Teoría Nombre alumno: DNI: Fila,columna: Grupo de teoría: 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.
12 ...