Primer control de teoría

Documentos relacionados
Para las sesiones de problemas. Sistemas Operativos Grau en Enginyeria Informàtica

Examen final de teoría QT

Segundo control de teoría

Examen Final de Teoría. Grupo de teoría:

Primer control de teoría

Examen final de teoría de SO-grado

SOLUCION EXAMEN junio 2006

Sistemas Operativos. Grado Ingeniería Informática. TGR Procesos.

Esquema de un programa en C: bloques básicos

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Apartado TGR Puntuación. No Presentado. EXAMEN DE SISTEMAS OPERATIVOS (Grado en Ing. Informática) 17/1/2013.

Procesos Definición y Estados

Sistemas Operativos Primer Recuperatorio Parcial 1

Definición Tareas del sistema operativo Concurrencia y paralelismo Estados de los procesos Propiedades de un proceso en Linux CONCEPTOS 1.

Nombre del estudiante: Gustavo Antonio González Morales. Nombre del trabajo: Tarea 2. Investigación sobre Paginación y Segmentacion.

Sistemas Operativos II Junio 2006 Nombre:

Ejercicios sobre gestión de memoria

- Bajo que condiciones el algoritmo de planifiación de procesos FIFO (FCFS) resultaría en el tiempo de respuesta promedio más pequeño?

Memoria física vs. Memoria lógica

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

SISTEMAS OPERATIVOS: PROCESOS. Planificación de procesos

Sistemas Operativos I Manual de prácticas

T5-multithreading. Indice

Sistemas Operativos. Procesos

Tarea 2. Descripción y Control de Procesos

Threads. Hilos - Lightweight process - Procesos ligeros

Proceso Prioridad inicial Duración CPU (M) Duración E/S (N) A 0 10 mseg 1 mseg. B 5 5 mseg 5 mseg. C 10 1 mseg 10 mseg

SISTEMAS OPERATIVOS: Lección 4: Planificación de Procesos

; hcomment.rc aa.es ;

Tema 4: Gestión de Procesos

Sistemas Operativos Práctica 3

Introducción a Sistemas Operativos: Ficheros

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Ejercicios de GESTION DE MEMORIA

1 Primitivas básicas de OpenMP

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Hilos Secciones Stallings:

ARQUITECTURA DE COMPUTADORES

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Teoría. Procesos. Escuela Politécnica Superior Universidad Autónoma de Madrid 1

Taller de Sistemas Operativos Introducción

1 ( 3,5 puntos) Responda, justificando sus respuestas, a las siguientes cuestiones:

Historia de un programa

1. Interfaz de llamadas a la librería de fluxes

Participantes: Avila Aida Betancourt Sioly Briceño Susana Rojas Alejandro

Temas. Taller III 2007 Gentile,Vazquez

Un ejemplo: UNIX PROCESOS UNIX

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Introducción a C++ y Code::Blocks

PROGRAMACION MODULAR FUNCIONES

Capítulo 2 Introducción a los sistemas operativos

Necesidad de Protección

Nombre Apellidos. DNI Titulación Grupo.

Ejercicios sobre tuberías

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Tema 6 Organización y gestión de la memoria

Espacio de direcciones de un proceso

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Conceptos de Planificación

El lenguaje de Programación C. Fernando J. Pereda

Concurrencia en UNIX / LINUX. Introducción: Procesos e Hilos POSIX

Tema 4: Padre e hijo

Programación I Funciones

Roberto Gómez Cárdenas ITESM-CEM

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Ingeniería Informática. Curso 3º. Sistemas Operativos Examen Final. TEORIA. 4 de Septiembre de 2009

Sistemas Operativos. Pedro Cabalar TEMA III. PROCESOS. Depto. de Computación Universidade da Coruña

Gestión de procesos en Linux

Sistemas Operativos. Práctica 2: Scheduling

Sistemas Operativos. Curso 2016 Administración de memoria II

Reglas básicas de la programación en lenguaje C

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla

1. Procesos vs Hilos 2. Cuando se ejecutan los procesos 3. Fork 4. Clone 5. Cómo se ejucuta el fork? 6. do_fork() 7. copy_process 8.

Procesos e Hilos en C

Hoja de ejercicios del Tema 9

Fundamentos de la programación

Escuela Politécnica Superior de Elche

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Herramientas Informáticas I Software: Sistemas Operativos

Archivos & Cadenas CURSO DE PROGRAMACIÓN EN C. Centro de Investigación y de Estudios Avanzados del IPN. CINVESTAV - Tamaulipas.

Prácticas de Sistemas operativos

Estructura de datos y Programación

Escuela Politécnica Superior de Elche

El tiempo de búsqueda es de 3 + 0,04 x ms, siendo x el número de cilindros a recorrer.

8- LEX-Expresiones regulares

1. Para qué sirve un Descriptor de Dispositivo? Qué funciones del sistema operativo acceden a ellos y para qué?

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

GESTION DE LA MEMORIA

T1-Introducción. Índice

Funciones Definición de función

Tema 2: Gestión de la CPU

1. Sistema Operativo Unix

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Message Passing Interface (MPI)

Programación. Test Autoevaluación Tema 3

Sistemas Operativos I. Enxeñería Informática. Curso 2007/08. Práctica 2: Concurrencia de procesos: Productores/Consumidores.

Universidad Central de Venezuela. Facultad de Ciencias. Escuela de Computación. Proyecto #1 (Simulación de caché)

Si el fichero hashes existe, el script debe notificar el error y salir como corresponde. A continuación se muestra un ejemplo:

Introducción a C. Grupo de Sistemas y Comunicaciones. Febrero 2008 C 1. Programación imperativa estructurada.

Sistemas Operativos Gestión de memoria

Transcripción:

JUSTIFICA TODAS LAS RESPUESTAS. UNA RESPUESTA SIN JUSTIFICAR SE CONSIDERA INVALIDA EJERCICIO 1: Preguntas cortas (2,5 puntos) 1. Un usuario busca en google el código de la librería de sistema de Linux (para la misma arquitectura en que trabaja) que provoca la llamada a sistema write, lo copia en un programa suyo, lo compila y lo ejecuta pasándole unos parámetros correctos. Qué crees que pasará? (se ejecutará sin problemas o le dará un error de operación no permitida). Justifícalo 2. En un sistema que aplica una política de planificación tipo Round Robin, qué es el Quantum? Se puede ejecutar sin problemas un proceso que tiene ráfagas de CPU que duran, en media, la mitad del quantum? qué pasará al acabar su ráfaga si no ha acabado todavía el quantum? Continuará en la cpu hasta el final del quantum o abandonará la cpu? cuando vuelva a recibir la cpu recibirá un quantum completo o sólo lo que le quedaba? 3. Explica que mejoras supone la utilización de librerías compartidas. 1

4. Enumera y describe brevemente los pasos que debe hacer el SO para cargar un ejecutable desde disco a memoria para implementar la mutación de un proceso en el caso que después de la mutación el proceso continua ejecutándose. 5. Tenemos un sistema que ofrece memoria virtual, en el cual nos dicen que se está produciendo el problema de thrashing. Explica brevemente en qué consiste este problema e indica y justifica) que métrica veríamos claramente aumentar en esta situación si estuviéramos analizando los procesos: el tiempo de usuario o el tiempo de sistema. EJERCICIO 1: Procesos y memoria (4 puntos) Dado el siguiente código (se omite el control de errores para simplificar y podemos asumir que ninguna llamada a sistema devuelve error). 2

1. int *pids; 2. void usage() 3. { 4. char b[128]; 5. sprintf(b,"./mtarea procesosnivel1(cuantos) procesosnivel2(0=no/1=si)\n"); 6. write(1,b,strlen(b)); 7. exit(0); 8. } 9. void realizatarea(int i){ 10. // Omitimos su código por simplicidad pero no hay ninguna llamada a sistema relevante 11. // para el ejercicio 12. } 13. 14. void procesardatos(int i, int multiproceso) 15. { 16. int it; 17. if (multiproceso>0){ it=0; while((fork()>0) && (it<2)) it++;} 18. realizatarea(i); 19. exit(1); 20. } 21. void main(int argc,char *argv[]) 22. { 23. int i,ret,procesos; 24. char buff[128]; 25. if (argc!=3) usage(); 26. procesos=atoi(argv[1]); 27. pids=sbrk(procesos*sizeof(int)); 28. for(i=0;i<procesos;i++){ 29. ret=fork(); 30. if (ret==0) procesardatos(i,atoi(argv[2])); 31. pids[i]=ret; 32. } 33. while((ret=waitpid(-1,null,0))>0){ 34. for(i=0;i<procesos;i++){ 35. if (pids[i]==ret){ 36. sprintf(buff,"acaba el proceso num %d con pid %d \n",i,ret); 37. write(1,buff,strlen(buff)); 38. } 39. } 40. } 41. } 1. (1,5 puntos) Dibuja la jerarquía de procesos que se genera si ejecutamos este programa de las dos formas siguientes (asigna identificadores a los procesos para poder referirte después a ellos): a../mtarea 5 0 3

b../mtarea 5 1 2. (0,5 puntos) Indica, para cada una de las dos ejecuciones Será suficiente el tamaño del vector de pids que hemos reservado para gestionar los procesos hijos del proceso inicial? (Justifícalo y en caso negativo indica que habría que hacer). EJECUCIÓN./Mtarea 5 0 EJECUCIÓN./Mtarea 5 1 3. (0,5 puntos) Indica que procesos ejecutarán: a. Las líneas 36+37 EJECUCIÓN./Mtarea 5 0 EJECUCIÓN./Mtarea 5 1 4

b. La función realizartarea EJECUCIÓN./Mtarea 5 0 EJECUCIÓN./Mtarea 5 1 4. (1,5 puntos) Sabemos que una vez cargado en memoria, el proceso inicial de este programa, tal y como está ahora, ocupa: 2Kb de código, 4bytes de datos, 4kb de pila y el tamaño del heap depende de argv[1] (asumid que como mucho será 4kb). Si ejecutamos este programa en un sistema Linux con una gestión de memoria basada en paginación, sabiendo que una página son 4kb, que las páginas no se comparten entre diferentes regiones y que ofrece la optimización COW a nivel de página. Sin tener en cuenta en las posibles librerías compartidas, CALCULA (desglosa las respuesta en función de cada región de memoria): a. El espacio lógico que ocupará cada instancia del programa Mtarea (número de páginas) b. El espacio físico que necesitaremos para ejecutar los dos casos que hemos tratado: i../mtarea 5 0 ii../mtarea 5 1 5

EJERCICIO 3: Procesos y signals (3,5 puntos) Dado el siguiente código del programa ejercicio_exec (se omite el control de errores para simplificar y podemos asumir que ninguna llamada a sistema provoca un error). 1. int sigchld_recibido = 0; 2. int pid_h; 3. void trat_sigalrm(int signum) { 4. char buff[128]; 5. if (!sigchld_recibido) kill(pid_h, SIGKILL); 6. strcpy(buff, Timeout! ); 7. write(1,buff,strlen(buff)); 8. exit(1); 9. } 10. void trat_sigchld(int signum) { 11. sigchld_recibido = 1; 12. } 13. void main(int argc,char *argv[]) 14. { 15. int ret,n; 16. int nhijos = 0; 17. char buff[128]; 18. n=atoi(argv[1]); 19. signal(sigchld, trat_sigchld); 20. if (n>0) { 21. pid_h = fork(); 22. if (pid_h == 0){ 23. n--; 24. signal(sigalrm,trat_sigalrm); 25. sprintf(buff, "%d", n); 26. execlp("./ejercicio_exec", "ejercicio_exec", buff, (char *)0); 27. } 28. strcpy(buff,"voy a trabajar \n"); 29. write(1,buff,strlen(buff)); 30. alarm (10); 31. hago_algo_de_trabajo();/*no ejecuta nada relevante para el problema */ 32. alarm(0); 33. while(((ret=waitpid(-1,null,0))>0) &&!recibida){ 34. nhijos++; 35. } 36. sprintf(buff,"fin de ejecución. Hijos esperados: %d\n",nhijos); 37. write(1,buff,strlen(buff)); 38. } else { 39. strcpy(buff,"voy a trabajar \n"); 40. write(1,buff,strlen(buff)); 41. alarm(10); 42. hago_algo_de_trabajo();/*no ejecuta nada relevante para el problema */ 43. alarm(0); 44. strcpy(buff, Fin de ejecución\n ); 45. write(1,buff, strlen(buff)); 46. } 47. } Contesta a las siguientes preguntas justificando todas tus respuestas, suponiendo que ejecutamos el programa de la siguiente manera: 6

%./ejercicio_exec 4 1. Dibuja la jerarquía de procesos que se crea y asigna a cada proceso un identificador para poder referirte a ellos en las siguientes preguntas. 2. Suponiendo que la ejecución de la función hago_algo_de trabajo() dura siempre MENOS de 10 segundos: a. Para cada proceso, indica qué mensajes mostrará en pantalla: b. Para cada proceso, indica qué signals recibirá: c. Supón que movemos la sentencia de la línea 24 a la posición entre la línea 17 y 18, afectaría de alguna manera a las respuestas del apartado a y b? Cómo? 7

3. Suponiendo que la ejecución de la función hago_algo_de trabajo() dura siempre MÁS de 10 segundos: a. Para cada proceso, indica qué mensajes mostrará en pantalla: b. Para cada proceso, indica qué signals recibirá: c. Supón que movemos la sentencia de la línea 24 a la posición entre la línea 17 y 18, afectaría de alguna manera a las respuestas del apartado a y b? Cómo? Es posible garantizar que el resultado será siempre el mismo? 8