Gestión de memoria: Segmentación

Posted by Adrián Manso | Posted in | Posted on 2:38

0

• La segmentación y la paginación permiten dividir a los procesos
en partes ocupando varias zonas dispersas de la memoria.

• El espacio lógico de direcciones está formado por un conjunto
de segmentos, definidos por la dirección base y su longitud.

• Se utilizan direcciones lógicas de 2 dimensiones: segmento y
desplazamiento dentro del mismo


Gestión de memoria:segmentación


– Cada segmento tiene propiedades
diferentes: L, L/E, privado,
compartido...

– Se suelen utilizar como mínimo
segmentos de datos, código y pila

– Tienen tamaños diferentes

– Los módulos del programa usan
segmentos diferentes, que se
enlazan empezando en la dirección
lógica de origen 0.


Traducción de direcciones


• La traducción de direcciones es el proceso por el cual se
convierten las direcciones lógicas (de dos dimensiones: segmento, desplazamiento) a una dirección física de una
dimensión.


Gestión de memoria:segmentación


– Existe una estructura de n
datos auxiliar: la Tabla
de Segmentos (TdS)

– La tabla tiene una
entrada para cada
segmento del proceso

– Existe una tabla para
cada proceso más otra
general para almacenar
las descripciones
comunes a varios
procesos.


Implementación


• La TdS se puede implementar en memoria o con registros

  – Registros:

     • La comprobación y el cálculo de direcciones se realiza en paralelo,
por lo que la traducción de direcciones es muy rápida.

     • Debe limitarse el número de segmentos para no usar muchos
registros

  – En memoria:

      • Adicionalmente se tiene un registro que apunta al comienzo de la
tabla (Registro Base de la TdS – RBTdS) y otro que contiene la
longitud de dicha tabla (Registro Longitud de la TdS – RLTdS).

     • Para traducir la dirección: Se comprueba que s < RLTdS y se forma la
dirección de acceso a la TdS mediante: RBTdS + s

     • Problema: Para acceder a memoria se requieren dos accesos (uno a
la TdS y otro a la dirección especificada). Se ralentiza el proceso.

     • Solución:

       – Usar registros que guardan las entradas usadas más recientemente

        – Usar registros que guardan las entradas necesarias para la ejecución


Protección


• Se asocian diferentes tipos de protección a los diferentes tipos
de segmento

Gestión de memoria:segmentación


Memoria Compartida


• El modelo segmentado permite que varios procesos compartan

áreas de memoria física.

  – Para el acceso a la memoria compartida, los procesos pueden utilizar
direcciones lógicas diferentes e incluso segmentos diferentes

  – Las referencias dentro de la zona compartida deben ser relativas (al
segmento actual o al contador de programa)

  – El código puede compartirse en modo de sólo lectura


Gestión de memoria:segmentación


Análisis del modelo segmentado


• Este modelo presenta desaprovechamiento de memoria (aunque
menor que con la asignación contigua)

  – Fragmentación externa: huecos pequeños entre segmentos

  – Espacio ocupado por las TdS de los procesos residentes en memoria

• Gestor de procesos:

  – Cuando se crea un proceso, el planificador realiza las tareas:

    • Comprobar que existe espacio para el nuevo proceso. Para ello debe
encontrar un hueco apropiado para cada segmento del mismo

    • Crea una TdS para el proceso

    • Guarda el RBTdS y el RLTdS en el BCP del proceso

    • Para cada segmento copia su contenido en la memoria que le ha sido
asignada y actualiza la entrada en la TdS

    • Incluye al proceso en la cola de procesos listos

  – En el cambio de contexto

    • Se guardan los registros con segmentos

    • Se restauran los registros con segmentos, el RBTdS y el RLTdS


Ejemplo de implementación:
procesadores “x86” de intel


• Disponen de registros especializados

  – para almacenar descripciones de segmentos (entradas en la TdS,
denominada “Tabla de Descriptores de Segmentos”)

    • CS: código, DS: datos, SS: pila

    • ES, FS, GS: uso general

  – para localizar las tablas de segmentos

    • GDTR, para localizar la GDT, Global Descriptor Table

    • LDTR, para localizar la LDT, Local Descriptor Table

• Cada dirección lógica se divide en:

  – Segmento: 16 bits

    • tabla (GDT/LDT), 1 bit

    • indice en la tabla, 13 bits (8192 segmentos por tabla)

    • Requested Privilege Level (RPL), 2 bits

  – Desplazamiento: 32 bits

• El espacio lógico de direcciones con segmentación es de:

  – 21 x 213 x 232 = 246 = 64 TB