Administración de Memoria

Sistemas operativos. Paginación de memoria. Fragmentación. Segmentación

  • Enviado por: Claridad
  • Idioma: castellano
  • País: España España
  • 26 páginas

publicidad
cursos destacados
Desarrollo de videojuegos para iOS, Android y BlackBerry 10
Desarrollo de videojuegos para iOS, Android y BlackBerry 10
En este curso único en toda la web aprenderás a crear videojuegos para iOS, Android, BlackBerry 10 y la...
Ver más información

jQuery con ejemplos prácticos
jQuery con ejemplos prácticos
Con este curso aprenderás a aplicar la librería jQuery para hacer juegos como de memoria o arrastrar y...
Ver más información


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