Ingeniero en Informática
Administración de Memoria
TEMA 7 ADMINISTRACIÓN DE LA MEMORIA
JERARQUÍA DE ALMACENAMIENTO
Cuando el diseñador se plantea lo que es la gestión de memoria del sistema debe tener en cuenta que la memoria es unos de los recursos críticos del sistema, es crítica porque un programa al ejecutarse debe estar cargado en M. entonces cuanta más memoria tengamos o mejora la optimicemos más programas podremos guardar en ella.
¿Qué quiere un diseñador?Que sea barata, gran capacidad y muy rápida.
Pero no se pueden conseguir las tres cosas.
A mayor capacidad el tiempo de acceso es mucho mayor, es más lenta.
Se observa que ha mayor capacidad menor coste por bit, comparamos Módulo de memoria y disco duro, no cuesta lo mismo un disco duro de 8 gigas que 8 gigas de memoria Ram.
A menor tiempo de acceso, si queremos memoria más rápida, el coste se nos dispara.
Los diseñadores del sistema no pueden tener un solo tipo de memoria donde alojar todoas las memorias, existe una jerarquía de memoria.
Esa jerarquía intenta solucionar esos inconvenientes a la hora de diseñar el esquema de memoria.
Registros | Jerarquía tradicional de memoria | ||||||||
Caché | |||||||||
Memoria principal | |||||||||
Disco Magnético | |||||||||
Cinta Magnética |
Registros | |||||
Caché | |||||
Volátil | Memoria principal | Interna | |||
Caché de disco | |||||
No volatil | Disco Magnético | Externa | |||
Cinta Magnética | |||||
Cinta mgnética | Disco óptico Jerarquía moderna de memoria |
En esa jerarquía podemos ver que se cumplen una seria de condiciones:
-
Al bajar de nivel aumenta la capacidad de la memoria.
-
Al bajar de nivel disminuye el coste por bit.
-
El registro es el más caro, luego la cache...
-
Al bajar de nivel se observa que el tiempo de acceso aumenta. Acceder a un disco óptico es más lento que a un disco magnético.
-
Si seguimos bajando de nivel, disminuye la frecuencia de acceso:no es lo mismo que el tiempo que es el tiempo que trae el dato, es el nº de veces que accede a esa memoria.
Esta es la clave del funcionamiento de la jerarquía de memoria, esa disminución de frecuencia se debe sobre todo a lo que se llama como principio de localidad o cercanía de referencia.
Sin embargo ese conjunto va cambiando a lo largo del tiempo.
Ese principio lo que establece es que un proceso durante su funcionamiento hacer referencia a muchas funciones, pero durante un breve espacio de tiempo el proceso hace referencia a un pequeño grupo de referencias.
La caché va a intentar que el tiempo de acceso sea mucho más rapido para no tener que acceder a disco o Mp, distinguimos entre M.interna y M.externa, normalmente lo que es el disco magnético se le suele conocer como M.secundaria.
Vamos a ver los pasos que hay que realizar para la carga de un programa en M.p:
Programa
fuente
Compilador
otros o ensamblador
módulos biblioteca
objeto Módulo del
objeto sistema
Enlazador
biblioteca Módulo
del sistema de carga
cargada
dinámicamente
Cargador
Imagen del proceso
en memoria
Tenemos un programa fuente, cuando lo compilamos obtenemos un módulo objeto que luego necesita ser enlazado con el resto del los módulos objetos que tenga el sistema, para formar un módulo de carga que es el que finalmente se introduce en memoria, una vez cargado de memoria es cuando verdaderamente podemos decir que es un proceso, entonces tenemos toda la imagen del proceso.
Una vez cargado en memoria se puede enlazar con bibliotecas del sistema de forma dinámica.
Esas son las fases por las que pasa el programa para convertirse en proceso.
El proceso está definido por la imagen que si recordamos tenía:
-
El Bloque de control de procesos
-
Datos relativas
-
Instrucciones Referencias a datos fisicas
Referencias a intrucciones: lógicas o simbólicas:
-
La Pilas
Si se observa, consta de datos e intrucciones que tienen referencias a memoria, referencias a datos y referencias a sus propias instrucciones.
Esas referencias, o direcciones, en realidad pueden ser de tres tipos:
Lógicas, relativas o absolutas.
Direcciones simbólicas | Direcciones relativas | Direcciones absolutas | |||
i j | PROGRAM JUMP I LOAD J DATA | 0 400 1200 | PROGRAM JUMp 400 LOAD 1200 DATA | 1024 1424 2224 | PROGRAM JUMP 1424 LOAD 2224 DATA |
Dir simbólicas: no tienen nada que ver con la posterior ubicación física de ese dato, son normalmente las direcciones que emplea el programador.
Dir relativa: vienen expresadas respecto a un conjunto determinado, normalmente al principio del programa.
Estas direciones normalmente son las que utiliza el cargador y el enlazador.
JUMP 400: desde el principio saltar 400.
Dir. absolutas o físicas: son las que realmente ocupan de memoria real, de memoria física.
Son las que realmente se usan en ejecución, el programa solo entiende de direciones físicas, para ellos necesitamos hacer una traducción de las simbólicas y relativas a las físicas.
Esa traducción de direcciones, también conocida como ligadura de direcciones se puede hacer en distintos instantes, en cualquiera de las fases que hemos vistos, por las que pasa el programa a proceso.
-
Tiempo de compilación
-
Tiempo de carga
-
Tiempo de ejecución.
Traducción en tiempo de compilación
En tiempo de compilación o enlazado, observar que lo que tenemos que hacer es generar ya un módulo de carga con direcciones físicas, eso implica que el programador, el cargador o el enlazador tenga que tener conocimiento de la gestión de memoria, qué partes están libres y qué partes están ocupadas.
Por otro lado, el modo de carga que se genera, solamente se puede ejecutar en la zona que se haya especificado, no puede cambiar de lugar, si varía de zona tiene que volver a compilarlo de nuevo.
Si un proceso sale de memoria y luego entra de nuevo debe ser en la misma zona de memoria.
Para solventar esos problemas la otra manera es que se realice en tiempo de carga.
Traducción en tiempo de carga
En tiempo de carga por un lado elimina que el programador conozca como se está gestionando la memoria.
En este caso la gestión de memoria la va a realizar el cargador que decide donde va a ubicar el proceso, pero estamos en lo mismo de antes. Puede que yo introduzca el programa en memoria física, y ya tenga las direcciones físicas, por lo que no puedo cambiarlo de sitio.
Si un proceso se suspende, cuando se vuelve a activar se situa en la misma zona de memoria.
Traducción en tiempo de ejecución
En el último momento.
Cuando yo vaya a ejecutar la instrucción es cuando se va a traducir la dirección.
Este esquema es un método muy flexible, porque el proceso puede estar ubicado en cualquier parte, ya que es justo cuando voy a ejecutarlo es cuando lo traduzco.
Esa traducción necesita la ayuda del hardware, y tampoo es un hardware muy complejo, el criterio concedía el hardware necesario para realizar esa traducción en tiempo de ejecución.
dirección base límite
dirección dirección
relativa absoluta si
CPU + <= Memoria
no
error de direccionamiento
El programa que está hubicado en memoria sólo tiene direcciones relativas, entonces las CPU va generando todas la direcciones relativas, y nosotros le sumamos el contenido de un registro hardware que contiene el inicio donde está ubicado el proceso, entonces obtenemos la dirección absoluta, posteriormente podemos comparar esa dir absoluta con otro registro hardware que lo que contiene es el límite de la zona de memoria ocupada por el proceso, si está dentro del límite podremos acceder a memoira, si está fuera del límite provocaremos un error de direccionamiento.
Observar que con dos registros hardware y una suma y comparación podemos realizar la traducción
Proporciona un mecanismo de protección de la memoria porque si se pasa del límite que tiene cada proceso daríamos un error de direccionamiento.
Con este esquema el proceso lo puedo poner en cualquier parte de la memoria, porque la traducción la hago justo cuando lo voy a ejecutar.
Cada vez que cambiemos de proceso o de contesto, esos registros límite y base deben actualizarse, y deben almacenarse en el BCP para que cada vez que cambiemos de proceso tengamos un valor válido.
FUNCIONES DEL ADMINISTRADOR DE MEMORIA
Debe conocer:
Qué zonas de la memoria están libres y qué zonas ocupadas.
Introducir los procesos en memoria.
Se encarga de asignar y desasignar memoria a los procesos conforme vayan necesitando y liberando.
Debe controlar el intercambio entre Mp y Ms.
Además de esas funciones, el administrador de memoria debe cumplir 3 requisitos:
Protección:
No solo debe proteger la zona de memoria del proceso, sino de la memoria del sistema operativo u otro proceso.
Compartición de memoria:
cuando se ejecutan dos procesos iguales, debe permitir que dos procesos compartan la memoria.
Reubicacion:
Un proceso puede cambiar de zona de memoria durante su ejecución.
Este requisito tiene sentido evidentemente es sistema multiprogramado.
En un sistema monoprogramado no tiene sentido porque si solo hay un proceso, ¿para qué lo voy a cambiar de sitio.
Distintos esquemas de asignación de memoria
Esquemas de gestión de memoria
-
Asignación completa y contigua: el proceso se ejectua en una zona continua
-
Máquina desnuda
-
Monoprogramación
-
Particiones mútiples:
-
Particiones fijas
-
Sistema compañero
-
Particiones variables.
-
Asignación completa y no contigua:
-
Paginación
-
Segmentación
-
Segmentación-paginación
-
Asignación parical y no contigua:
-
Memoria Virtual
Asignación completa y contigua:
El proceso se ejectua en una zona continua
Máquina desnuda:Es un sistema donde no hay S.O y no hay gestor de Memoria, quien lleva la cuenta es el propio programador.
Suelen ser pequeños microprocesadores, señales de humo, dedicados a una sola cosa.
Monoprogramación: La Memoria. dividida en dos partes:
Una parte en el S.O. en un exremos de la memoria, zona alta o baja, y el resto se deja para procesos de usuarios, ejMSDOS.
La elección de donde se debe encontrar el S.O. vendrá dada por donde se encuentra el vector de interrupciones, lo normal es situarlo junto al vector de interrupciones, parte alta o baja, algunos sitemas prefieren separarlo.
Es un sistema simple que requiere de una protección del S.O, que el proceso de usuario no pueda acceder al S.O. Para ello necesita un registro hardware, ya sea un único registro o dos registros.
¿qué le pasa al MS-DOS? no hay registro límite y cualquier proceso puede cargarse el S.O facilmente, observar que la proecci´´on tampoco es muy complicada, las direcciones que se generan se recuperan con el registro límite.
Ej. IBM1120 y Spectrum : zona baja y 2115B: zona alta
Particiones mútiples:
Particiones fijas
Sistema compañero
Particiones variables.
Registro límite | Sistema Operativo + Vector de interrupciones | Usuario | Límite Superior | Sistema Operativo | |
Usuario | Registro Límite | Límite inferior | Usuario | ||
Libre | |||||
Sistema Operativo + Vector de interrupciones | Libre | ||||
Libre | Vector de Interrupciones |
Zona baja Zona Alta Sin vector de interrupciones
MULTIPROGRAMACIÓN CON PARTICIONES FIJAS
Es la estrategia más simple, consiste en dividir la memoria en una serie de particiones, en cada una de esas particiones se aloja un proceso.
El nº y tamaño de esas particiones se caracteriza porque es un número fijo que se establece en la fase de generación del sistema.
Selección del tamaño de la partición
El diseñador del sistema antes de implementar el sistema debe establecer los valores.
Hay que tener en cuenta:
-
el nº de particiones va a determinar el grado de multiprogramación del sistema, ya que si en cada particion hay un proceso y hay 3 particiones solo podré tener 3 procesos simultaneamen-te, si quiero un grado de multiprogramación elevado necesitaré muchas particiones.
-
el tamaño determina dos aspectos:
-
el tamaño máximo de un proceso, para que se pueda ejecutar un proceso necesito asignarlo a una partición, por lo tanto el tamaño máximo de un proceso es el tamaño máximo de la partición.
-
el tamaño tb va a afectar a la cantidad de memoria que asigne a un proceso, es decir, una vez que establezca las particiones cuando tengo el proceso le asigno un proceso, y ese proceso puede o no ocuparla entera, si no ocupa toda la partición, hay un desperdicio de memoria que se conoce como fragmentación interna.
Tenemos 2 alternativas:
Todas las particiones del mismo tamaño: Es una estrategia más simple, pero es poco flexible,
Particiones de distinto tamaño
ALGORITMOS DE COLOCACIÓN
Yo tengo una serie de procesos, ¿dónde ubico cada proceso?
Estos algoritmos dependen de la particion que hayamos elegido.
Particiones iguales: es trivial el algoritmo, se mete en cualquier partición de forma automática.
Particiones distintas: hay varias alternativas.
Una cola de procesos por partición: llega el proceso y lo sitúo en la cola donde menor fragmentación interna genere. Cuando la partición queda libre seleciono el primero de la cola
Inconveniente: puede haber particiones libres con procesos esperando en otra cola porque su partición está ocupada
Sistema Operativo | |||||||||
Procesos Nuevos | |||||||||
| |||||||||
Otra alternativa es tener una única cola de procesos:
Sistema Operativo | |||||||||||
Procesos nuevos | |||||||||||
Llega un proceso y lo situo en la cola, cuando una partición queda libre tendré que selecciónar que proceso de la cola va en esa partición, es digamos la selección de un proceso.
Para seleccionar ese proceso hay diversos algoritmos, los que más se suelen emplear son:
Mejor ajuste: Cuando una partición queda libre, elegimos el proceso que menor fragmenta-ción interna produzca.
Primer ajuste: Vamos recorriendo la cola hasta encontrar el primer proceso que quepa en la partición.
Si se observa, toda esta función de colocar procesos en memoria, en una partición determinar es en hacer que un proceso sea aceptado en el sistema, que pase de ese estado de nuevo a un estado de listo, esa transición de nuevo a listo es del planificador a largo plazo.
Todos estos algoritmos es el planificador a largo plazo.
Protección entre particiones: debo evitar que un proceso acceda a zonas de memoria fuera de su partición:
Hay dos alternativas:
dos registros límites, zona superior y zona inferior de la partición: parto de una dirección absoluta.
límite inferior límite superior
dir. absoluta
CPU >= < si Memoria
no no
error de direccionamiento
partimos de una dirección absoluta, y a hay que comprobar que la dirección se encuentre entre los dos límites
Dos registros,un registro base y otro longitud:
longitud base
dir. relativa dir. absoluta
CPU <= + Memoria
Si Sí
no
error de direccionamiento
Partimos de una dirección relativa, se compara con la longitud, si está dentro de la partición se puede acceder a el.
¿Cuál es mejor?El de base y longitud: Al ejecutarse direcciones relativas la traducción de direcciones se produce en el momento de ejecución, por lo cual el proceso es reubicable y puede cambiar de partición, mientras que con uno de registro límite la traducción debe ser previa a la ejecución del proceso.
Con el registro longitud y base, la ventaja que tiene es que al partir de una dirección relativa mientras realiza la protección hace la traducción direcciones en tiempo de ejecución y con eso se puede reubicar el proceso en otra partición.
El otro aspecto son los elementos de control que necesitamos para llevar a cabo el control de la memoria, qué zona de la memoria están libres y qué zonas están ocupadas.
En este caso el único elemento que necesitamos en usa tabla de particiones, que tiene una entrada por particion, y contiene la dirección base de la partición el tamaño y como se encuentra.
Número de la partición | Base de la partición | Tamaño de la partición | Estado de la partición |
0 | 0K | 100K | ASIGNADA |
1 | 100K | 300K | LIBRE |
2 | 400K | 100K | ASIGNADA |
3 | 500K | 250K | ASIGNADA |
4 | 750K | 150K | ASIGNADA |
5 | 900K | 100K | LIBRE |
Esa tabla es la que se crea en el momento de la generación del sistema.
Inconvenientes: Por un lado, presenta fragmentación interna, si el proceso no ocupa toda la partición se desperdicia espacio.
El tamaño de la partición es fijo. Si quiero cambiar el tamaño tengo que volver a generar el sistema, esto implica que el grado de multiprogramación del sistema sea también fijo.
El tamaño del proceso está limitado a la máxima partición.
Sistema que lo usan:
IBM
OS/MFT (Operative System Multiprograming with a Fixed Number o Task)
MULTIPROGRAMACIÓN CON PARTICIONES VARIABLES O DINÁMICAS
El sistema IBM o OS/MUT,
Intenta vencer los inconvenientes anteriores.
Usa la memoria que él necesite, se va creando lo que necesita.
Si un sistema se suspende o bloquea se va de memoria y deja ese espacio para otro proceso.
Con este esquema las particiones en nº y tamaño van cambiando a lo largo del tiempo.
Los procesos son reubicables.
Sistema Operativo | 128k | Sistema Operativo | 128k | Sistema Operativo | 128k | Sistema Operativo | 128k | |||||
Espacio de procesos | Proceso1 | Proceso1 | Proceso1 | |||||||||
320k | 320k | 320k | ||||||||||
896k |
Enviado por: | Claridad |
Idioma: | castellano |
País: | España |