E.U. de Informática Departamento de Informática Aplicada Examen final de Sistemas Operativos I 10 de septiembre de 2003 EJERCICIO 2 (puntuación 3´5 puntos) Solución Tiempo Estimado 60 m 1) Dibuje el cronograma relativo a los procesos P1, P2 y el proceso ocioso para los casos siguientes: Preparado Ejecutándose Bloqueado a) El proceso P1 es monohilo. 70 Ocioso 30 P2 50 100 40 P1 0 50 100 150 200 250 (ms) b) El proceso P1 tiene dos hilos: el hilo P1A ejecuta las tres primeras instrucciones (1, 2 y 3) y el hilo P1B ejecuta la última (4). Se supone que P1A está antes que P1B en la cola de preparados. 70 Ocioso 30 P2 30 P1B 50 100 10 P1A 0 50 100 150 200 250 (ms) Obsérvese que el sistema operativo bloquea al proceso P1 cuando el thread de usuario P1A realiza una llamada al sistema bloqueante. Como el thread P1B forma parte del proceso P1 no podrá ejecutarse hasta que P1A complete esta llamada, cuya consecuencia será que el sistema operativo ponga en la cola de preparados al proceso P1. La biblioteca del usuario elegirá según la política de planificación local el thread a ejecutar. 2) a) Indique todos los campos de las estructuras que introduciría o modificaría para que el núcleo pueda soportar threads. Dentro de cada BCP hay que añadir un campo ThreadInicial que referencie una entrada de la tabla de BCT´s. Este campo indicará cual es el primer thread creado por un proceso. Además, como la planificación se hace sobre threads, la información relativa a la planificación de procesos hay que eliminarla. Por su parte, la tabla de BCT´s contendrá un bloque para cada thread con los siguientes campos: Nombre IdThread Estado PP SiguienteThread Tipo del dato que contiene Entero Preparado, Ejecutandose, bloqueado Dirección de memoria virtual del proceso Puntero a una entrada del BCT ProcesoPadre ThreadHermano Puntero a un elemento del BCP Puntero a una entrada del BCT Utilidad Identificador del thread Indica el estado del proceso Puntero de pila Para implementar colas (preparados, bloqueados) Puntero a la entrada del padre Apunta al sgte. thread del mismo proceso padre. Ficheros abiertos Puntero a una tabla local de ficheros Control de los ficheros abiertos por el thead abiertos localmente. b) Proponga las especificaciones de las llamadas al sistema que permitan crear y destruir threads. identificador CrearThread( direcciónDeComienzoDelProcedimiento) Esta llamada permite crear un nuevo thread cuyo identificador se devolverá como resultado de la llamada. Este thread ejecutará el código de la rutina cuya dirección de comienzo se especifica como parámetro. DestruirThread() Permite que el thread que invoca la llamada acabe su ejecución. No se ha tenido en cuenta que se produzcan errores de ejecución en las llamadas, ni tampoco que al morir un thread indique las circunstancias en las que muere (por ejemplo, mediante un parámetro de estado). Normalmente, el estado suele interesar al thread padre del thread que acaba, por lo que el sistema operativo ofrece una llamada que permita al proceso padre recoger dicho estado. c) Repita el cronograma para el proceso P1 multihilo y P2, siendo el orden inicial en la cola de preparados P1A, P1B y P2. 40 Ocioso 30 P2 30 P1B 50 100 10 P1A 0 50 100 150 200 250 (ms) 3) Explique razonadamente qué ventajas e inconvenientes ve en el uso de los threads: a) Implementados en el espacio de usuario. En cuanto a las ventajas, el tiempo empleado para la creación de nuevos threads, para el cambio de contexto y sincronización es menor que si se utilizasen threads del sistema, ya que en este modelo se utilizan llamadas a procedimiento en vez de llamadas al sistema. Por otra parte, la biblioteca de threads permite al usuario establecer una política planificación específica al margen de la usada por el sistema operativo. En cuanto a los inconvenientes, el más destacable es que al ser los threads de usuario invisibles al sistema operativo, puede que éste no haga la planificación más adecuada. Por ejemplo, bloqueando a un proceso que tenga un thread que haya iniciado una llamada al sistema bloqueante aunque tenga otros threads listos (cronograma apartado 1.b), o planificando threads ociosos de procesos de usuario. b) Implementados dentro del sistema operativo. Las ventajas que presentan los threads de usuario se vuelven desventajas si se implementan como threads del sistema operativo y viceversa. Las operaciones sobre threads se realizan ahora mediante llamadas al sistema, que son mucho más costosas en tiempo que una llamada a procedimiento. Los cambios de contexto también son más costosos. Al estar bajo control del sistema operativo la política de planificación es más eficaz y se aprovechan mejor todos los recursos del sistema, pero ya no se permite que el usuario decida la política a utilizar.