Ejercicios
2. En un sistema operativo se ejecutan procesos en superficie (foreground) y en fondo (background). Los procesos de superficie son prioritarios a los de fondo y por ello se disponen de dos listas para conservar los procesos en estado de listo. Estas listas son mantenidas por medio de los punteros listo_for y listo_bac, respectivamente. Ellas se atienden de acuerdo con el algoritmo FCFS. Existe derecho de prioridad de los procesos de superficie sobre los de fondo. En cada entrada de la tabla de procesos se tiene un campo de tipo char que codifica si el proceso se ejecuta en superficie (‘F’) o en fondo (‘B’) y el puntero para ser encadenada en la lista correspondiente. Asuma la existencia de una función dispatcher(proceso) que realiza el despacho de un proceso para ejecutarlo y otra zombie() que hace caer al sistema operativo en un lazo de espera hasta que exista algún proceso que ejecutar. También asuma la existencia de un apuntador global de nombre proc_actual, que señala la entrada en la tabla de procesos del proceso corriente o en ejecución. Este apuntador estará en NIL si el proceso que se ejecutaba se bloqueó o terminó. Teniendo en cuenta el código del planificador mostrado a continuación responda: 2.a) Corrija argumentadamente el o los errores presentes en el código.2.b) Describa brevemente sin traducir línea a línea, cuál es la función de la porción de código señalada en el recuadro.
typedef struct{ ... PCB *nextp; char nivel; /* Se agrega a la definición de PCB */ ... } PCB; PCB *proc_actual, *listo_for, *listo_bac; proc_actual = listo_bac; listo_bac = listo_bac->nextp; proc_actual->nextp = NIL;
} else { if (listo_for != NIL) { proc_actual = listo_for; listo_for = listo_for->nextp; void planificador() proc_actual->nextp = NIL; { } PCB*temp; else { lock(); if (listo_bac != NIL) { if (proc_actual != NIL) { proc_actual = listo_bac; if ( (proc_actual->nivel == 'F') || listo_bac = listo_bac->nextp; (listo_for == NIL)) { proc_actual->nextp = NIL; unlock(); } dispatcher(proc_actual); } return; } } unlock(); if (listo_bac == NIL) listo_bac == proc_actual if (proc_actual != NIL) else { dispatcher(proc_actual) else zombie(); temp =listo_bac; } while (temp->nextp != NIL) temp = temp->nextp; temp->nextp = proc_actual; }
3. Un disco tiene las siguientes características: la cantidad de pistas es de 20, la atención de cada solicitud tiene una duración de 10 ms y el movimiento del cabezal de una pista a otra consecutiva tiene una duración de 5 ms. A partir de un momento en que el cabezal se encuentra en la pista 7, llegan las solicitudes de las pistas: 2, 15, 7, 3, 20 y 10, respectivamente en los siguientes instantes (ms): 0, 20, 50, 50, 80 y 130. Tenga en cuenta que no se cambia la próxima solicitud a atender después que está decidida. Responda la secuencia de solicitudes a atender y cuánto tiempo transcurre hasta que la última solicitud sea atendida si se utilizan los siguientes algoritmos: 3.a) FCFS 3.b) SSF 3.c) CLOOK (en sentido creciente). 4. Se tiene un sistema de operación que utiliza memoria virtual a través de paginado. Se dispone de cuatro marcos de páginas. Considere que se va a cargar un programa y ejecutarlo, estando al inicio todos los marcos de páginas libres y toda la información en el disco. Si las ...
Regístrate para leer el documento completo.