E. U. de Informática Departamento de Informática Aplicada Examen Parcial de Sistemas Operativos IC 22 de Octubre de 2013 Apellidos ......................................................................................................................... Nombre ........................................................................................................................... EJERCICIO 2 SOLUCIÓN Hoja de respuesta (2) NUEVAS ESTRUCTURAS DE DATOS O MODIFICACIONES A LAS EXISTENTES Bastaría con incluir dos nuevos campos en el descriptor de proceso: float predicción; // Se inicializa a cero e indica la predicción de uso de CPU siguiente int // Se inicializa a cero e indica el tiempoDeCPU de última posesión de CPU tiempoDeCPU; (3) GESTIÓN DE LA COLA DE PREPARADOS. RAZONAR SOBRE SU EFICIENCIA En una primera aproximación parecen equivalentes. Un proceso, para obtener la CPU, se mete primero en preparados (debido a un fin de E/S o por expulsión de la CPU) y, cuando sea el más prioritario, se le saca de preparados para darle la CPU. Por cada inserción, habrá una extracción de la cola. Si se mantiene la cola de preparados ordenada, la inserción en preparados será una operación costosa, mientras que la elección del siguiente proceso a ejecutar será inmediato (elegir el primero de la cola). Por el contrario, si se insertan los procesos en la cola de preparados por el último (operación elemental y poco costosa en tiempo de ejecución), lo que será costoso es elegir el siguiente proceso a ejecutar (una búsqueda en la cola de preparados para localizar el proceso cuya predicción sea más baja). La inserción en una cola ordenada puede ser más eficiente (por término medio recorrer la mitad de la cola) que la búsqueda del menor en la cola (siempre recorrer toda la cola). Es por tanto algo más eficiente mantener la cola de preparados ordenada. (4) Acciones de rutinaReloj Inhibir interrupciones // Mecanismo de exclusión Salvar el estado del proceso enEjecucion procesos[enEjecucion].tiempoDeCPU++; Recuperar el estado del proceso enEjecucion RTE // Para continuar al proceso enEjecucion interrumpido (5) Acciones al ejecutar “wait (hijo)” Inhibir interrupciones // Mecanismo de exclusión Salvar el estado del proceso enEjecucion Determinar que se trata de wait y saltar a rutina que interpreta esta llamada Buscar al hijo en procesos => Sea índice “h” procesos[enEjecucion].siguiente = h; // Indicar por qué hijo se está esperando procesos[enEjecucion].estado = esperandoFinHijo; procesos[enEjecucion].prediccion = procesos[enEjecucion].prediccion * 0.5 + procesos[enEjecucion].tiempoDeCPU * 0.5; enEjecucion = planificar(); // Sacar de preparados el de predicción más baja procesos[enEjecucion].tiempoDeCPU = 0; Recuperar el estado del proceso enEjecucion RTE // Para continuar al proceso preparado con predicción de uso de CPU menor