Sistemas Operativos Clase 7: detección de interbloqueos y administración de memoria. Resumen: interbloqueos Cuando proceso solicita un recurso no disponible, el proceso pasa a estado de espera; pero es posible que nunca cambie de estado ya que dicho recurso solicitado no puede ser liberado debido a que lo tiene otro proceso en espera. Si sucede lo anterior, decimos que hay un interbloqueo o bloqueo mutuo. Resumen: interbloqueos Las condiciones necesarias para la existencia de interbloqueos son: • • • • Exclusión mutua. Retención y espera. No expropiación. Espera circular. Resumen: interbloqueos Básicamente existen tres formas de tratar con los interbloqueos: • Prevenirlos o no permitir que sucedan. • Evadirlos al solicitar información a los procesos. • Permitir que sucedan. Resumen: interbloqueos Si permitimos que sucedan los interbloqueos, en ocasiones es necesario conocer cuándo ha sucedido un interbloqueo, y de esta forma tomar alguna acción: • Informar. • Expropiar. • Interrumpir. Resumen: interbloqueos La detección de interbloqueos se realiza con ayuda del grafo de asignación de recursos o grafo de interbloqueos. El grafo de asignación de recursos es una “instantánea” del sistema, en donde los nodos representan recursos o procesos y las aristas la asignación o solicitud de recursos. Detección de interbloqueos El grafo de asignación de recursos, nos permite determinar la existencia de un bloqueo mutuo cuando existen ciclos en el grafo; sin embargo: • Un bloqueo mutuo se refleja en un ciclo en el grafo, • Pero la existencia de un ciclo, no necesariamente indica la existencia de un bloqueo mutuo. Detección de interbloqueos Algoritmo de detección de ciclos en grafos: P = Conjunto de todos los procesos. S = D = Conjunto de los procesos no bloqueados. Mientras (D!= ) { q = Un elemento de D; Reducir q; S <- q; Calcular nuevamente D; } Si (P=S) No hay bloqueo mutuo Otro Hay bloqueo mutuo de los procesos P – S. Detección de interbloqueos Otro método para la detección de interbloqueos es con matrices; dados p = |P| y r = |R|, definimos: • Matriz de asignación Ap x r. Cada elemento a[i, j] representa las instancias asignadas del recurso j al proceso i. • Matriz de solicitud Sp x r. s[i, j] indica las instancias solicitadas del recurso j por el proceso i. • Vector de instancias Er. E[j] indica el número de instancias del recurso j. Detección de interbloqueos • Vector de instancias disponibles Dr. D[j] indica el número de instancias no asignadas del recurso j. La idea es hacer operaciones con las matrices considerando las siguientes restricciones: Asignación: Solicitud: Detección de interbloqueos Al igual que son el grafo, la idea es hacer reducción: P = Conjunto de todos los procesos. Q = Salir = FALSO; Mientras (!Salir) { Buscar i Q tal que j, s[i, j] D[j]; si (existe i) { Reducir i, j D[j] = D[j] + a[i, j]; Q <- i; } otro Salir = TRUE; } Si (P=S) No hay bloqueo mutuo Otro Hay bloqueo mutuo de los procesos P – Q. Administración de la memoria Algunos conceptos importantes: • • • • • • • • Dirección base. Límite. Desplazamiento (offset). Espacio de direcciones lógico. Espacio de direcciones físico. Dirección virtual. Montaje dinámico y estático de bibliotecas. Intercambio (memoria virtual). Administración de memoria El manejo de memoria dentro de un microprocesador se basa en: • Segmentación. Segmentación pura o simple. Segmentación con descriptores. • Paginación. Administración de la memoria Uno de los recursos más importantes en una computadora es la memoria, ya que los procesos y sus datos ahí se almacenan durante su ejecución. El sistema operativo se debe encargar del reparto eficiente y transparente de la memoria. Recordemos que un sistema operativo puede ser monotarea o multitarea, lo cual define la manera en que la memoria sea repartida. Administración de la memoria En un sistema monotarea, la memoria se divide en dos partes: • Una zona de memoria para el sistema operativo. • Y una zona de memoria para el proceso y los datos del usuario. Por lo que la gestión o administración de memoria no resulta tan complicada. Administración de la memoria • Sin embargo, en un sistema multitarea o multiproceso, la administración de memoria resulta un poco más complicada. • El SO debe asegurarse de que cada proceso “crea” que tiene la maquina para el solo. • La repartición debe ser tal, que puedan entrar la mayor cantidad de procesos posibles. Administración de la memoria Independiente de la administración de memoria que se contemple, esta debe cumplir determinados objetivos: • • • • Cada proceso debe tener su propio espacio lógico. Protección entre procesos. Permitir que los procesos compartan memoria. Soporte a las distintas regiones de memoria de un proceso. • Maximizar el rendimiento (multiprogramación). • Proporciona mapas de memoria muy grandes. Administración de la memoria ¿Qué requisitos debe cumplir un gestor de memoria? • Reubicación. • Protección. • Compartición. Administración de la memoria Los mecanismos de gestión de memoria son los siguientes: • • • • • • Partición fija. Partición dinámica. Paginación simple. Segmentación simple. Memoria virtual paginada. Memoria virtual segmentada. Administración de la memoria Partición fija Este esquema de administración, divide la memoria en bloques que pueden ser de igual tamaño o de diferente tamaño, de tal manera que cada bloque posee una longitud fija. El ubicar un proceso en la memoria es extremadamente fácil, ya que mientras haya una partición se podrá acomodar un proceso en ella. Administración de la memoria Partición fija Es sencillo de implementar y no sobrecarga al SO, además es posible sacar algún proceso de alguna partición para dársela a otro. Sin embargo: • Para una partición fija, es posible no ubicar cualquier programa, ya que depende del tamaño. • Un programa pequeño desperdiciaría toda la partición, fragmentación interna. • Limita el número de procesos. Administración de la memoria Partición fija La solución a los problemas anteriores, consiste en proponer diferentes bloques de memoria para acomodar los procesos según su tamaño. Esto permite dos tipos de asignación: • Una fila de procesos por cada tamaño. • Una fila de procesos para todos los bloques. Administración de la memoria Partición fija Aun con el cambio anterior, el esquema no es optimo, ya que pueden haber bloques de memoria desperdiciados, cuando no se tienen procesos de todos los tamaños. Esto genera cambios en el gestor de memoria; por ejemplo: • Proponer esquemas de intercambio. • Acomodar procesos en particiones de mayor tamaño. Administración de la memoria Partición dinámica • Este esquema asigna la cantidad de memoria que se necesita y no más de la debida. • Sin embargo, a medida que pasa el tiempo, el proceso de asignación y liberación de memoria produce que se creen huecos de memoria, fragmentación externa. • Es necesario un proceso de compactación de memoria a fin de eliminar la fragmentación. Este proceso requiere tiempo de CPU. Administración de la memoria Partición dinámica Para la ubicar un proceso o datos en la memoria, este esquema de administración ofrece tres algoritmos: • Mejor ajuste. • Primer ajuste. • Peor ajuste. Administración de la memoria Partición dinámica La eficiencia de cada algoritmo depende de la secuencia de solicitudes de memoria; sin embargo, podemos mencionar que: • Primer ajuste: es el más sencillo y el más rápido, y generalmente es mejor que todos. • Mejor ajuste: reduce fragmentación interna, pero no es tan rápido como el anterior.. Administración de la memoria Partición dinámica: • Peor ajuste: tiene el peor desempeño, ya que llena la memoria con pequeños bloques que al ser liberados, requieren una mayor compactación. Administración de la memoria Paginación simple En general las técnicas de partición tienen malos resultados debido a la fragmentación, aunque en general su implementación es relativamente simple. La idea de la paginación es dividir la memoria en bloques de memoria de menor tamaño, de esta forma un proceso también se vera divido en bloques del mismo tamaño que la memoria. Administración de la memoria Paginación simple De esta manera, los trozos de memoria en los que se encuentra dividido un proceso, se le conoce como página, mientras que los trozos libres se conocen como marcos de página. Esto permite que la fragmentación interna solo se presente en la última página mientras que, no existe fragmentación externa. Administración de la memoria Paginación simple La paginación simple es muy semejante al esquema de partición, las diferencias son: • Las paginas son mucho mas pequeñas que los bloques de memoria. • Las paginas no tienen por que ser contiguas, como lo serian los bloques de memoria. Administración de la memoria Paginación simple El direccionamiento de la paginación es relativamente simple, además permite que este sea muy sencillo traducir una dirección lógica en una dirección física. Administración de la memoria Segmentación simple En este esquema, un programa y sus datos se dividen en segmentos. Un segmento es un bloque de memoria que puede ser de cualquier tamaño; puede medir unos cuantos bytes hasta varios megabytes. A diferencia de la paginación, para acceder a cualquier dirección de memoria, solo hace falta la dirección lógica. Administración de la memoria Segmentación simple Podemos comparar este esquema con el de partición dinámica (posee fragmentación externa), pero hay ligeras diferencias; por ejemplo, un programa podría ocupar más de una partición, tal y como sucede en paginación. La segmentación no es transparente al programador, ya que debe manejar los bloques de memoria que le son asignados. Administración de la memoria Segmentación simple Generalmente las dirección lógicas se componen de: Número de segmento : Desplazamiento El método para convertir una dirección lógica en una dirección física es el siguiente: Administración de la memoria Segmentación simple Algunos beneficios son: • • • • Simplifica el uso de estructuras de datos grandes. Permite recompilar y cargar programas. Permite que los procesos compartan. Es sencillo implementar esquemas de protección. Fin de clase 7