Upload
ngothuy
View
222
Download
0
Embed Size (px)
Citation preview
Nombre TitulaciónS O L U C I O N E S
Dispone de tres horas y media para realizar el examen
1Responda brevemente a estas preguntas:(1,50 puntos) Definir breve y específicamente: a) procesamiento asimétrico; b) esperaactiva; c) consistencia (entre niveles de memoria); d) microkernel (micronúcleo); e)polling; f) bootstrap; g) independencia de dispositivo de E/S.
a) Procesamiento asimétrico: Modelo de procesamiento con múltiples procesadores,en el que a cada procesador se le asigna una tarea específica, existiendo unprocesador maestro que controla el sistema y es el responsable de asignar tareas alresto de procesadores.b) Espera activa: Espera en la que incurren los programas cuando necesitanconocer la ocurrencia de un evento en el sistema y lo hacen interrogandopermanentemente al procesador, de esta forma y mientras no ocurra el evento, elprograma no avanza y hace que el procesador esté ocupado permanentemente.c) Consistencia (entre niveles de memoria): En una estructura jerárquica dealmacenamiento, los mismos datos pueden aparecer en diferentes niveles delsistema. En un ambiente multitarea, en donde la CPU se conmuta de un lado a otroentre los diversos procesos, se debe tener extremo cuidado para asegurar que, sivarios procesos quieren acceder a un dato, cada uno de ellos obtenga el valor dedicho dato actualizado más recientemente. Podría ocurrir en un cierto dato A esté envarios distintos niveles de memoria (soporte magnético, memoria principal, caché,registro). La consistencia consiste en asegurar que si un dato ha sido modificado enuno de los niveles de memoria (por ejemplo, en un registro), el resto de los nivelesde memoria en los que también está copiado el dato sea modificado también, deforma que los procesos puedan acceder al verdadero valor del dato modificado.d) Microkernel: Este método estructura al SO removiendo todos los componentes noesenciales del kernel, e implementándolos como programas del sistema y de nivelde usuario. El resultado es un kernel más pequeño. No hay mucho consenso entorno a cuáles servicios deben permanecer en el kernel y cuáles debenimplementarse en el espacio de usuario. En general, sin embargo, los microkernels
SISTEMAS OPERATIVOSConvocatoria extraordinaria, 13 de septiembre de 2006
Calificación
1 42 53 6
Nombre
típicamente proporcionan una administración mínima de los procesos y de lamemoria, además de un servicio de comunicaciones.e) Polling: En un sistema basado en interrupciones, cuando un dispositivointerrumpe a la CPU, ha de averiguarse cuál de los dispositivos del sistema harealizado dicha interrupción. La técnica del Polling consiste en “preguntar” uno poruno a todos los dispositivos para averiguar la procedencia de dicha interrupción.f) BootStrap: Es un sencillo programa de arranque inicial del sistema. Además, sirvepara inicializar todos los aspectos del sistema, desde los registros de la CPU y loscontroladores de dispositivos, hasta los contenidos de la memoria. Debe saber cómocargar el sistema operativo y empezar a ejecutar dicho sistema; para lograrlo elprograma debe localizar y cargar en la memoria el kernel del sistema operativo. g) Independencia del dispositivo de E/S: Objetivo que consiste en dar a losprogramas canales genéricos de E/S en los que éstos realizan sus operaciones deE/S mediante primitivas genéricas. De esta manera, los programadores estánliberados de hacer referencias a dispositivos concretos, por lo que los programas nodependen de dispositivos concretos de E/S.
(0,25 puntos) Dada la frase: «según el algoritmo del banquero, un sistema es insegurocuando en él existe interbloqueo». ¿Es dicha afirmación cierta? Justificardetalladamente la respuesta.
El algoritmo del banquero nos proporciona una forma de garantizar que existe lo quese llama un “estado seguro del sistema”, es decir, que existe al menos una forma degestionar (asignar/desasignar) recursos del sistema de forma que puedan ejecutarsesin problema todas los procesos del sistema. El hecho de que no exista un “estadoseguro” no implica que el sistema esté en interbloqueo. Simplemente que no segarantiza la ejecución de todos los procesos del sistema.
(0,25 puntos) ¿Cuál es el propósito de las llamadas al sistema? ¿Y de los programasdel sistema? ¿Qué diferencias hay entre ambos?
Las llamadas al sistema son instrucciones especiales que utilizan los usuarios parasolicitar al sistema operativo la utilización de un recurso del sistema.En cambio, los programas del sistema son programas que forman parte del sistemaoperativo pero que no forman parte del monitor residente, como por ejemplo loseditores, intérpretes de comando, etc.En realidad, los programas del sistema utilizan llamadas al sistema para utilizarrecursos.
Nombre
(0,50 puntos) Indicar detalladamente el proceso de carga del sistema operativo guiadopor interrupciones en un sistema de cómputo, indicando cómo quedaría la memoriaprincipal al final de la carga.
Al encender el sistema informático, lo primero que se ejecuta es un programallamado BIOS, ubicado en la placa base del sistema en memoria ROM. Esteprograma se encarga de detectar todos los dispositivos hardware que hay en elsistema y almacena sus características y parámetros en memoria principal, dando laposibilidad de inicializar o modificar los parámetros a través de un programa queposee denominado SETUP. Una vez finalizada esta primera inicialización se buscaal programa cargador del sistema operativo, el Bootstrap, ubicado en el primersector del dispositivo de arranque, normalmente floppy, disco duro o CDROM, y trascargarlo en las direcciones más bajas de memoria, lo ejecuta. Este programaBootstrap es el encargado de leer el sistema operativo desde el dispositivo dondese encuentra, ubicarlo en memoria principal y ejecutarlo.Una vez que se da paso al sistema operativo, una de las primeras funciones de estees instalar el vector de interrupciones que contiene todas las direcciones de lasrutinas que atienden a las interrupciones. Después de cargar todos los manejadoresde dispositivos, los servidores y de inicializar todo el sistema, el sistema operativoqueda en espera hasta que alguna tarea del sistema o algún programa de usuariodemande trabajo y le ceda la CPU.
La memoria podíra quedar como sigue:
Nombre
0000
Monitorresidente
FFFF
Vector deinterrupcionesInterprete de JCLCargador deprogramasManejadores dedispositivos E/SMemoriasintermediasbuffersRutinas detratamiento deerrores
Memoria deusuario
2(1,5 puntos) Muchos sistemas operativos requieren que, antes de leer o escribir en unfichero, se invoque a una operación de «abrir fichero», que devuelve un identificadorque luego puede ser utilizado para acceder al fichero. Cuando se termina de trabajar conel fichero, se invoca a una operación de «cerrar fichero», como en este ejemplo enUNIX: char texto[] = "hola", otroTexto[] = “adios”; int longitudTexto = 4, otraLongitud = 4;
int fich = open ("mifichero.txt",O_RDONLY); write (fich, texto, longitudTexto); write (fich, otroTexto, otraLongitud); close (fich);
Alguien afirma que las operaciones de abrir y cerrar son un artificio innecesario, ya quelas operaciones de lectura y escritura podrían trabajar directamente con el nombre delfichero, como en este ejemplo:
Nombre
write ( "mifichero.txt", posicionEnElFichero, texto, longitudTexto );
posicionEnElFichero indica el lugar dentro del fichero donde se pretende guardar eltexto. Con este mecanismo, no sería necesario ni abrir ni cerrar los ficheros con los quetrabajamos.¿Es cierta esta tesis de que abrir y cerrar son operaciones innecesarias? ¿Perderíamosalgo si las operaciones de acceso a los archivos fueran siempre directas, como en elúltimo ejemplo propuesto?
Es perfectamente posible trabajar con ficheros sin recurrir a operaciones de abrir ycerrar. Pero esto no significa que estas dos operaciones no aporten nada. En elejemplo propuesto sin «open», cada vez que quisiéramos hacer una escrituratendríamos que pasar el nombre del archivo. Eso significa que en cada escritura elsistema operativo debe localizar esa ruta en el disco, comprobar que el ficheroexiste, que el usuario tiene privilegios suficientes para realizar la operación, etc.Todas estas acciones se realizan una sola vez cuando se abre el fichero, pero si laoperación de abrir no está disponible, hay que realizarlas continuamente, con ungran impacto en el rendimiento del sistema. Por tanto la operación de abrir ahorratrabajo al sistema operativo. Otra cuestión es que las operaciones de abrir y cerrar sirven para ofrecer accesosecuencial a los ficheros, tal y como se muestra en el primer ejemplo. Si no existenlas operaciones de abrir y cerrar, los usuarios tendrán que implementar el accesosecuencial manualmente.
3(0,75 puntos) Te dan a elegir tres tamaños de página para un sistema operativo: 16bytes, 800 bytes y 2048 bytes. El sistema trabaja con direcciones de 32 bits y el tamañomedio de un programa es de 4 megabytes. ¿Con qué tamaño de página te quedarías ypor qué?
El tamaño de 800 bytes hay que descartarlo de antemano, porque no es potencia dedos. Requeriría un hardware de traducción de direcciones mucho más complejo queun sistema de paginación convencional: para calcular el número de página, no bastacon quedarse con los bits más significativos de la dirección, sino que hay querealizar una división.El tamaño de 16 bytes tampoco es recomendable, porque genera mucho espacio entablas de páginas. Un programa de cuatro megabytes (un tamaño típico, según elenunciado) ocuparía 222 ÷ 24 = 218 = 256 Kpáginas, que necesitarían en torno a unmegabyte de espacio (suponiendo cuatro bytes por cada entrada de la tabla depáginas). No parece sensato dedicar a estructuras de gestión una cantidad dememoria similar a la que necesita el programa. Además, para garantizar una tasa deaciertos alta en la TLB, ésta probablemente necesitaría bastantes entradas.
Nombre
Por su parte, si usamos páginas de 2048 bytes, un programa de cuatro megabytesrequerirá 2048 páginas, 128 veces menos espacio que en el caso anterior. El únicoinconveniente de este tamaño de página es la mayor fragmentación interna, peroestamos hablando, en el peor de los casos, de 2047 bytes desperdiciados, queserían menos de un 0,05% de un programa de tamaño típico de 4 megas. Es decir,irrelevante. Así que la mejor opción es el tamaño de 2048 bytes.
4 (1,25 puntos) Se dispone de un sistema operativo con gestión de memoria virtual pordemanda de páginas. El tamaño de la página es de 1KB y el sistema posee 32KB dememoria física disponible para programas de usuario. Supongamos que en un instantedado, un programa que ocupa 9 páginas se carga para su ejecución. Además, es el únicoproceso en ese momento en el sistema. El sistema le asigna cuatro marcos de memoria.Inicialmente se cargan las páginas 0, 4, 5 y 8 en los marcos 9,3, 8 y 5 respectivamente.
a) Dibujar la tabla de páginas para esta situación inicial. ¿Cuál es la dirección físicapara la dirección virtual (2,50) dada en el formato (página, desplazamiento)? ¿Ypara la dirección (5,20)? Explica claramente el proceso de traducción dedirecciones.
Tabla de páginas
Marco Físico Bit de validez0 9 v1 i2 i3 i4 3 v5 8 v6 i7 i8 5 v
Dirección virtual (2,50):Página lógica 2 => De entrada lo primero que se comprobaría es si tenemos unregistro en la TLB para dicha página lógica, pero dado que en el enunciado no senos indica nada acerca de la TLB, ignoraremos este paso. Accedemos a la tabla depáginas (entrada de la página lógica 2) y vemos que el bit de validez indica quedicha página lógica no está cargada en memoria. Por tanto se generará una
Nombre
excepción de fallo de página que conllevará traer la página desde disco a memoria.A modo de ejemplo, supongamos que el SO decide ubicarla en el marco 5. A partirde ese momento el proceso de traducción continuaría de la siguiente forma:Dirección física del marco 5: 5 × 1024 = 5120Desplazamiento: 50 Dirección física: 5120 + 50 = 5170
Dirección virtual (5,20):Página lógica 5 => La tabla de páginas indica que está cargada en memoria en elmarco 8.Dirección física del marco 8: 8 × 1024 = 8192Desplazamiento: 20Dirección física: 8192 + 20 = 8212
b) Si la política de reemplazo de páginas es global y partiendo del estado inicialaquí descrito, calcular los fallos de página que se producen con los algoritmosLRU y segunda oportunidad para la siguiente cadena de referencias del proceso:
7 5 6 1 0 8 3 4 3 3 1 2 8 6 2 3 5 3 4
La situación de partida en relación a la ocupación de memoria es la siguiente: existeun solo proceso cargado en memoria que ocupa 4 marcos, quedando por tanto aúnlibres 28 marcos de memoria (32Kb de memoria principal con páginas de 1Kb dan32 marcos de página, de los cuales inicialmente están ocupados 4). Según elenunciado, existe un solo proceso en memoria y la política de reemplazo es global,así que estarán disponibles para dicho proceso todos los 28 marcos libres. Por tanto,para la cadena de referencias dada, únicamente se generarán 5 fallos de página,uno por cada referencia a una nueva página (es conveniente recordar que ya estáncargadas 4 páginas de las 9 a las que se hace referencia en dicha cadena). Yademás podemos afirmar que esto será así con independencia de la política desustitución, ya que la memoria libre no se llega a agotar.
c) ¿Se te ocurre alguna explicación que justifique la decisión del sistema operativode cargar inicialmente las páginas 0, 4, 5 y 8, y no por ejemplo las páginas 0, 1,2 y 3?
Una razón podría ser para intentar cargar páginas que el cargador pueda sospecharque se van a necesitar inicialmente al comienzo de la ejecución del proceso y deesta forma generar el menor número de fallos de página al inicio. El cargador,conociendo la estructura del fichero ejecutable podría intentar precargar por ejemplo
Nombre
las primeras páginas de código y datos. El cargador también puede haberse basadoen anteriores ejecuciones del mismo programa.
5 (2 puntos) «Parque Jurásico» consiste en un museo y un parque para hacer rutassafari. Hay m pasajeros y n coches monoplazas. Los pasajeros deambulan por el museodurante un rato y luego hacen cola para dar un paseo en coche por el safari. Cuando hayun coche disponible se monta en él un pasajero y el coche realiza un recorridoprogramado hasta llegar nuevamente al punto de recogida donde el pasajero debe bajar.Si los n vehículos están todos de paseo por el parque con un pasajero a bordo, entoncesel pasajero que quiere un coche se espera; si un coche está listo para cargar pero no haypasajeros esperando, entonces el coche se espera. Use semáforos para sincronizar los mprocesos pasajero con los n procesos coche.
Primero mostraremos una solución simple que sólo funciona bajo ciertasrestricciones. (nota: para superar esta pregunta, basta con aproximarse a estaprimera versión).
Variables globalesSemaphore coche_libre(0);Semaphore pasajero_a_bordo(0);Semaphore final_de_recorrido(0);
Proceso pasajerovoid Pasajero() { ... DEAMBULA POR EL MUSEO ...
// Espera por un coche libre P (coche_libre); // Se sube al coche V (pasajero_a_bordo);
// disfruta del paseo
// El coche le notifica que se acabó el paseo P (final_de_recorrido);}
Proceso cochevoid Coche() { // hace el recorrido una y otra vez
Nombre
loop {// Indica que está libreV (coche_libre);// Espera por un pasajeroP (pasajero_a_bordo);
... HACE EL RECORRIDO ...
// Termina el paseo y se lo indica al pasajero V (final_de_recorrido);
}}
Como decíamos, esta solución sólo funciona correctamente si los semáforos sonFIFO y los coches terminan el recorrido en el mismo orden en el que lo comenzaron.Si un coche A arranca antes que B, pero B finaliza antes el recorrido, laV (final_de_recorrido) puede ser recibida por el pasajero que está montado en elcoche A, lo cual es erróneo. Si se quiere evitar estos problemas, hay que elaboraruna solución más compleja. A continuación se muestra otro algoritmo que funciona correctamente incluso si loscoches no siguen un orden perfecto, y que es independiente de la implementaciónde los semáforos. Este algoritmo se basa en que los pasajeros y los coches tienenidentificadores únicos. Cada pasajero sabe cuál es el identificador de su coche, yviceversa. Dos vectores de semáforos se emplean para el diálogo pasajerocoche aliniciar y terminar el recorrido.
Variables globales// semáforo para indicar a los pasajeros que hay algún coche libreSemáforo coche_libre = 0;
// identificador del primer coche libre de la filaint primer_coche;
// Cerrojo para acceder de forma controlada a "primer_coche"Semaphore cerrojo_primer_coche = 1;
// pasajero[i] indica el pasajero que está montado // sobre el coche "i"int pasajero[N];
// semáforos para señalizar a los coches // que pueden empezar el recorrido
Nombre
Semaphore pasajero_montado[N] = {todos a cero};
// semáforos para señalizar a los pasajeros // que su recorrido terminóSemaphore fin_de_trayecto[M] = {todos a cero};
Proceso pasajero void pasajero (int ID) {
// identificador del coche que le toca a este pasajero int mi_coche;
... DEAMBULA POR EL MUSEO ...
// espera por un coche libre P (coche_libre); // recoge el identificador del primer coche libre mi_coche = primer_coche; // permite al siguiente coche indicar que está libre V (cerrojo_primer_coche);
// informa al coche de que ya se ha montado pasajero[mi_coche] = ID; V (pasajero_montado[mi_coche]);
// disfruta del paseo
// espera a que el coche finalice el recorrido P (fin_del_trayecto[ID]);
}
Proceso cochevoid coche (int ID) {
int mi_pasajero;
// hace el recorrido una y otra vez loop { // se registra como el primer coche libre de la fila P (cerrojo_primer_coche); primer_coche = ID; // avisa a los pasajeros
Nombre
V (coche_libre);
// espera a que un pasajero se monte y le avise P (pasajero_montado[ID]); mi_pasajero = pasajero[ID];
... HACE EL RECORRIDO ...
// señaliza al pasajero que el recorrido terminó V (fin_del_trayecto[mi_pasajero]); }}
6(2 puntos) La política de «rifa» es una técnica aleatoria de planificación de procesos.Cada proceso dispone de una cantidad de «boletos» numerados. Cuando un procesoentra en CPU, se le otorga una rodaja de tiempo. Cuando expira esta rodaja, o cuando elproceso abandona voluntariamente la CPU, el planificador extrae uno de los números deun «bombo» virtual y escoge para la CPU al proceso que tiene ese número. Cadaproceso tiene al menos un boleto y el sorteo no puede quedar desierto. Por ejemplo: elproceso A tiene los números 1 y 2. El proceso B tiene el número 3. El planificadorescoge un número al azar entre 1 y 3. Si sale el 1 y el 2, entra el proceso A. Si sale el 3,entra el B.
a) ¿Qué efecto tiene darle más o menos boletos a un proceso?
Cuantos más boletos tiene un proceso, más probabilidad tiene de ser escogido porel planificador y por tanto gozará, en promedio, de más tiempo de CPU.
b) ¿Cuál es el comportamiento del sistema si todos los procesos tienen exactamenteun boleto?
Si todos los procesos tienen igual cantidad de boletos, la planificación es unaespecie de Round Robin en el que cada vez que hay un cambio de contexto, entraun proceso al azar.
c) ¿Esta técnica puede provocar inanición?
La técnica puede en teoría provocar inanición, ya que no hay una garantía absolutade que un proceso sea escogido para entrar en CPU (en teoría, sus boletos puedenno salir nunca elegidos). No obstante, si el sorteo sigue una distribución aleatoriauniforme, la probabilidad de que cualquier proceso acabe entrando en la CPU tiendeal 100%.
d) ¿Se puede construir un algoritmo no aleatorio que produzca los mismos efectosque el aquí planteado?
Nombre
Algo parecido a este método se podría conseguir haciendo una cola de preparadosen la que cada proceso apareciera tantas veces como boletos tiene en estealgoritmo. También haciendo que cuando un proceso termine su rodaja de tiempo,en lugar de ingresar en el final de la cola de preparados, se insertara en un puntointermedio, más cercano al principio de la cola cuantos más boletos tuviera elproceso.