4. Administración de Memoria Flashcards
(36 cards)
Que es la administracion de memoria?
Es una de las tareas mas importantes del sistema operativo, ya que todos los procesos tienen que usar memoria para ejecutar, las instrucciones estan en memoria.
Es la parte del sistema operativo responsable de:
* mantener que partes de la memoria estan en uso y por que procesos
* decidir cuales procesos seran cargados a memoria cuando esista espacio de memoria disponible
* asignar y liberar espacio de moemoria segun se necesite
* proteger los datos y garantizar la integridad entre procesos
Como se prepara un programa para ejecutar?
Los programas son escritos en lenguajes de lato nivel y deben pasar por diferentes etapas antes de ser ejecutados:
1. Compilacion (compile): el compilador traduce del codigo de fuente del programa a un codigo objeto. El archivo objeto no es completo, ya que utiliza información de otros archivos.
2. Enlace (link): el linker enlaza varios codigos objeto de un programa en un unico archivo ejecutable
3. Carga (load): el loader asigna el archivo ejecutable a la memoria principal del sistema.
Compilador: traduce código fuente → código objeto.
Linker: combina códigos objeto y bibliotecas → ejecutable.
Loader: carga ejecutable en memoria y ajusta direcciones.
El sistema operativo carga los programas en memoria, permite compartir la memoria entre varios procesos y brinda mecanismos a los procesos para obtener más memoria en forma dinámica.
Cual es la funcion del linker?
Toma los distintos archivos objeto (si el programa es modular) y los combina en un ejecutable único, resolviendo las referencias externas.
Si usa bibliotecas, estas pueden:
* Incluirse directamente en el ejecutable (enlace estático).
* Referenciarse para ser cargadas en tiempo de ejecución (enlace dinámico).
El linker surgio ante la necesidad de modularizar y reutilizar codigo. Resuelve referencias externas y las posiciones relativas de los simbolos en los diferentes modulos, formando un modulo consolidado..
Cuales son las areas de memoria de un proceso?
Las areas de memoria de un proceso (en ejecucion) son:
(dir baja - base)
* codigo (instrucciones)
* datos (variables estaticas)
* biblotecas dinamicas locales
* biblotecas dinamicas compartidas
* mapeo de archivos
* heap (memoria dinamica)
….
* stack (pila de llamadas y variables locales)
(dir alta - limit)
Que es la carga dinamica (dynamic loading)?
Es una tenica en la que ciertas rutinas o modulos de un programa no se cargan completamente a memoria fisica hasta que realmente se usan.
- surge ante la limitaion de la cantidad de memoria fisica disponible
- para aprovecha mejor la momoria
- ahora memoria, ya que las rutinas que no son usadas no son cargadas, por lo que no consumen recursos innecesariamente
Que es un enlace dinamico (dynamic linking)?
Es una tecnica que consiste en posponer la incorporacion de las biblotecas compartidas hasta el momento de ejecución.
En los archivos ejecutable se incorporan las biblotecas estaticas y para las dinamicas se mantiene una referencia.
El enlace dinamico usado junto con la carga dinamica permite un uso mas eficiente de memoria, dado que las biblotecas se cargan una unica vez en memoria principal.
A diferencia de la carga dinámica, el enlace dinámico de bibliotecas compartidas generalmente requiere la intervención del sistema operativo.
Dado que la memoria de un proceso está protegida, solamente el sistema operativo puede verificar si la rutina necesaria está alojada en el espacio de memoria de otro proceso o si puede permitir que múltiples procesos accedan a las mismas direcciones de memoria.
En la etapa de enlace de un programa, pueden incorporarse las bibliotecas compartidas al archivo ejecutable generado (enlace estático, static linking).
Que es la asociacion de direcciones (address binding)?
El programa pasa por diferentes etapas antes de ejecutarse y durante esas etapas las direcciones de memoria se pueden representar de diferentes formas:
* programa fuente: simbolicas (variables)
* luego de compilar: direcciones reubicadas
* luego de cargarse: direcciones absolutas
describe cómo las direcciones simbólicas o lógicas de un programa se convierten finalmente en direcciones físicas en la memoria del sistema
En que etapas puede ocurrir la asociacion de direcciones?
La asociación de instrucciones y datos a direcciones de memoria se puede realizar en las diferentes etapas:
Tiempo de compilación (compile time)
* El programa se asigna a un lugar específico y conocido de la memoria física.
* Se genera código absoluto: las direcciones de memoria son referenciadas en forma absoluta.
* Si la ubicación de inicio cambia, debe recompilarse el código.
Tiempo de carga (load time)
* Si no se conoce la ubicación exacta al compilar, el compilador genera código reubicable.
* Las direcciones de memoria se referencian en forma relativa.
* La asociación se retrasa hasta el momento de la carga. Si la dirección inicial cambia, solo se necesita recargar el código de usuario para tomar en cuenta el valor modificado.
* el loader es el que calcula las direcciones fisicas reales
* no permite mover el proceso mientras se ejecuta
** Tiempo de ejecución** (execution time)
* Si el proceso puede moverse durante su ejecución (desde un segmento de memoria a otro), la asignación debe retrasarse hasta el tiempo de ejecución.
* Se requiere hardware especial disponible para que este esquema funcione, la unidad de gestion de memoria (MMU)
* La mayoría de los sistemas operativos de uso general utilizan este método.
Cuales son los diferentes tipos de direccionamiento?
Se definen 2 tipos de direccionamiento:
* Direccionamiento físico (physical address): La dirección física manipulada por la unidad de memoria. Generada por la MMU.
* Direccionamiento virtual o ** direccionamiento lógico** (virtual address): La dirección lógica generada por asociación de direcciones. Generada por la CPU.
Para la asociación de direcciones en tiempo de compilación y en tiempo de carga, las direcciones lógicas y físicas coinciden. No es así para la asociación en tiempo de ejecución.
En tiempo de ejecución resulta en direcciones lógicas y físicas diferentes. La dirección lógica pasa a ser una dirección virtual.
Quien se encarga de hacer las traducciones de direcciones logicas a direcciones fisicas?
La traducciones de direcciones lógicas a físicas son hechas por la Unidad de Manejo de Memoria (Memory Management Unit, MMU).
Los procesos solo manipulan direcciones lógicas y no visualizan las físicas, que solamente son vistas por la MMU.
Que es la reubicación?
Es una técnica que permite mover un proceso a diferentes lugares de la memoria física sin que el programa o proceso tenga que ser modificado.
Cuando el sistema operativo carga un proceso le asigna un segmento contiguo de memoria. La dirección física inicial (más baja) del proceso es la dirección base y la dirección física más grande a la que puede acceder el proceso es la dirección límite.
Existen dos métodos de reubicación: estática y dinámica.
Cuales son los metodos de reubicacion?
Existen 2 metodos:
Reubicación Estatica
* El sistema operativo ajusta la dirección de memoria de un proceso para reflejar su posición inicial en la memoria (compilacion o carga)
* el proceso ejecuta dentro del espacio asignado
* una vez el proceso es reubicado estaticamente, ya no puede reubicarse hasta que finalice
Reubicación Dinámica
* La ubicacion del proceso se ajusta constantemente.
* El hardware agrega un registro de reubicación (valor base) a la dirección virtual generada por el compilador.
* Cada vez que el proceso accede a memoria, la dirección lógica generada por la CPU se suma a un registro de base (o de reubicación) para obtener la dirección de memoria física.
* El hardware compara la dirección de memoria con el registro límite (valor más alto disponible en la sección asignada). Si la dirección de memoria es mayor que el límite ocurre un error de direccionamiento.
Cuales son las ventajas y desventajas de la reubicacion dinamica?
Ventajas
* permite mover procesos para mejor uso de memoria
* los proceso pueden crecer con el tiempo y ser reubicados a un espacio mas grande
* es simple y se realiza por hardware (optimo): requiere dos registros especiales, una adición simple y una comparación simple.
Desventajas
* Existe un overhead en el procesamiento.
* Los procesos no pueden compartir memoria entre si.
* Los procesos requieren una cantidad fija de memoria física, lo que puede limitar la multiprogramación porque cada proceso activo debe caber en la memoria.
Que propiedades tiene la reubicacion?
La reubicación tiene tres propiedades principales:
* Transparencia: los procesos no son conscientes de que están compartiendo el recurso memoria.
* Seguridad: las referencias a la memoria se verifican para garantizar que se encuentren entre los registros base y límite. Mantiene a otros procesos a salvo de errores.
* Eficiencia: los chequeos de memoria y rangos son rápidos porque se realizan en hardware. Sin embargo, si un proceso crece, moverlo es una operación que requiere tiempo.
Como es la asignacion de memoria a nivel del sistema?
La memoria está dividida en dos secciones:
Sistema operativo residente
* Parte fija de la memoria que contiene el núcleo del sistema operativo y sus estructuras esenciales.
* Generalmente ubicada en las direcciones bajas de la memoria física.
Procesos de usuarios
* El resto de la memoria se destina a los procesos de usuario y sus datos.
Es necesario un mecanismo de protección de memoria entre los procesos y con el sistema operativo. Se utiliza el registro de reubicación y el registro límite para realizar la verificación de accesos válidos a la memoria.
Toda dirección lógica debe ser menor al valor del registro límite.
Como se proteje la memoria entre procesos y el sistema operativo?
Para que un proceso no lea ni escriba en memoria ajena o del sistema, se usan dos registros en hardware:
- Registro base (reubicación): indica la dirección física inicial asignada al proceso.
- Registro límite: indica el tamaño del bloque asignado al proceso.
Cuando el proceso accede a una dirección lógica, el sistema operativo (o la MMU) verifica que: Dirección lógica < límite
y calcula: Dirección física = dirección lógica + base
Si intenta acceder fuera de su rango, el sistema genera una interrupción por violación de memoria y termina o bloquea el proceso.
Que y cuales son los esquemas de asignacion de particiones?
El sistema operativo define particiones de tamaño variable y las asigna a los procesos.
* Inicialmente, toda la memoria se considera disponible y asignable. Los procesos indican sus requerimientos de memoria y el sistema operativo les asigna particiones.
* El sistema operativo debe conocer las particiones ocupadas y libres (mapa de bits o la lista encadenada)
La asignacion de particiones puede ser:
* Asignacion Fija: el sistema reserva bloques de tamaño fijo
* Asignación Dinamica: los procesos pueden pedir más memoria durante la ejecución (por ejemplo, al crecer el heap o el stack).
Se genera fragmentación de la memoria.
Los sistemas operativos optan por delegar la administración de esta memoria a bibliotecas de usuario.
Los procesos liberan memoria (explícitamente o cuando terminan): se generan huecos en la memoria
Cuales son las estrategias de asignación de memoria?
Existen varias estrategias para la asignación de memoria a un proceso:
* First fit: Asigna el primer hueco de memoria libre que satisface la necesidad.
* Best fit: Asigna el mejor hueco de memoria libre que exista en la memoria principal.
* Worst fit: Asigna el requerimiento en el hueco más grande que exista en la memoria principal.
Estudios de simulación han mostrado que first fit y best fit logran mejores rendimientos en tiempo de asignación y utilización de la memoria que worst fit.
Que problemas sufren las estrategias de asignacion?
Las estrategias de asignación sufren el problema de fragmentación externa.
En la memoria se generan muchos huecos pequeños, que no son asignados. La memoria libre está fragmentada en una gran cantidad de huecos pequeños.
La fragmentación externa se da cuando existe suficiente memoria libre en el sistema para satisfacer un requerimiento de memoria, pero no es posible asignarla debido a que no es contigua.
Regla del 50 %. El análisis estadístico de first fit indica que, incluso optimizando, cada N bloques asignados se pierden 0.5 N bloques debido a la fragmentación (un tercio de la
memoria disponible).
Fragmentación interna. Sobrecarga por gestionar huecos muy pequeños. Dado un hueco de 18.464 B y un proceso que solicita 18.462 B. Se genera un hueco de 2 B, la sobrecarga de
gestionarlo será sustancialmente mayor que el beneficio.
Para evitar el problema, se divide la memoria física en bloques de tamaño fijo y se asigna la memoria en unidades del tamaño del bloque. La memoria asignada a un proceso
puede ser ligeramente mayor que la memoria solicitada. La diferencia es la fragmentación interna: memoria no utilizada, interna a una partición.
Como se soluciona el problema de fragmentacion?
Existen 2 soluciones al problema de fragmentacion:
Compatacion
* se mueve el contenido de memoria para juntar los espacios ibres en un bloque grande y contiguo.
* solo es posible si se aplica reubicacion dinamica en tiempo de ejecucion.
* puede ser costoso ya que requiere mover muchos datos
Espacion de direcciones no contiguo
* Permitir que el espacio de direcciones lógicas de los procesos sea no contiguo.
* Se permite asignar memoria física a un proceso siempre que exista memoria disponible
* Dos técnicas complementarias logran esta solución: la segmentación y la paginación.
Que es el swapping?
El swapping consiste en intercambiar un proceso completo desde la memoria principal (RAM) a memoria secundaria (backing store), a un área del disco llamada espacio de swap, y traer de vuelta otro proceso desde el swap a la RAM.
- Esto permite “liberar” memoria física para que otros procesos puedan ejecutarse.
- Más procesos pueden residir en el sistema, aunque no todos estén activos en la RAM al mismo tiempo.
Al mecanismo de llevar un proceso desde memoria principal a memoria secundaria se le denomina swap-out. Al mecanismo inverso se le denomina swap-in.
Que objetivos tiene el swapping?
- Aumentar la multiprogramación: más procesos en ejecución lógica.
- Maximizar el uso de CPU: no dejarla ociosa por falta de procesos listos.
- Liberar memoria física para procesos prioritarios.
Como funciona el swapping?
- El sistema operativo identifica un proceso en memoria que está inactivo o en espera.
- Copia su imagen completa al disco (swap out).
- Carga en su lugar otro proceso desde el disco (swap in).
- Cuando el proceso original vuelve a ser necesario, se vuelve a cargar en memoria física.
Para esto el sistema mantiene una cola de procesos listos para ejecutarse, cuyas imágenes están en la memoria o en el backing store.
El despachador:
1. verifica si el siguiente proceso en la cola está en la memoria que está inactivo o en espera
2. Si no está y no hay una región de memoria libre, intercambia un proceso actualmente en la memoria y el proceso deseado.
3. Recarga los registros y transfiere el control al proceso seleccionado.
Desventajas
* Es una operación lenta, porque implica acceso a disco (miles de veces más lento que la RAM).
* Si el sistema swapea demasiado frecuentemente (hiperpaginación), puede degradar severamente el rendimiento del sistema.
Que es la segmentacion?
La segmentación es una técnica que divide el espacio lógico de un proceso en segmentos lógicos de distinto tamaño, según su estructura lógica.