Segmentación

De Wiki de Sistemas Operativos
Revisión del 17:29 13 ene 2013 de Juarolsal (discusión | contribuciones) (Añadidas formas de uso de descriptores, reordenado, adaptado al temario actual)
Saltar a: navegación, buscar

Definición

Un segmento es un espacio de memoria de tamaño variable, compuesto por:

  • Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).
  • Tamaño del segmento

Funcionamiento

Segmentos.png

Características

  • Cada proceso en ejecución (esté activo, bloqueado o preparado) tiene su tabla de segmentos.
  • Solapamiento: 2 segmentos pueden compartir zona de memoria. Ojo! problemas de concurrencia. Habría que usar algún método para su sincronización si se intenta.
  • Protección de memoria: añadir 3 bits a la tabla de descriptores de segmentos para los permisos ( r w x ).
  • Cuando un proceso requiere más memoria se crea un nuevo segmento.
  • Dos instancias de un mismo proceso pueden compartir segmentos de memoria de instrucciones/código, pero no para datos ya que esto complicaría la gestión.
  • No se redimensionan.
  • Gestión compleja, sobretodo por su tamaño variable
  • Permite la carga de segmentos a petición, de manera que no se disponga de todos los segmentos en memoria principal, que se puedan descargar a disco (en la zona de intercambio o swap) en base a un cierto criterio (ver Memoria virtual). Esta zona de intercambio puede ser:
    • Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar
    • Un fichero oculto de tamaño fijo o variable dependiendo de la configuración dada por el usuario (Windows).

Mecanismos

Los diferentes mecanismos que nos ofrece la segmentación de memoria son los siguientes.

Carga de segmentos a petición

Es un mecanismo que permite a un proceso no disponer de todos sus segmentos en memoria principal, se pueden descargar a disco (en la zona de intercambio o swap) segmentos en base a un cierto criterio (ver Memoria virtual).

Esta zona de intercambio puede ser:

  • Un lugar fijo en el disco (Linux, Unix). El administrador de memoria decide qué segmento se va a descargar
  • Un fichero oculto de tamaño fijo o variable dependiendo de la configuracion dada por el usuario (Windows).

Formas de uso de los descriptores

En cuanto a aspectos materiales, se plantea el problema de que no es habitual que la tabla de segmentos quepa en el dispositivo de traducción (MMU), por lo que se almacena la tabla en memoria, y el MMU contiene su dirección. El problema es que esta técnica hace que el tiempo de acceso se duplique, al haber un primer acceso al MMU y un segundo acceso a la dirección efectiva. Se plantean dos soluciones no excluyentes:

  • Uso de registros descriptores de segmento en MMU:

En MMU nos encontraremos varios registros que pueden contener descriptores, en los que se copiarán los que se vayan a usar en un futuro inmediato. Hay dos tipos de registros:

  • Registros de propósito general:

Registros sobre los que se cargan los próximos descriptores a usar, y dos tipos de direcciones:
- Las que hacen referencia a un descriptor en la tabla de memoria (y necesitan más bits para hacer referencia al descriptor)
- Las que hacen referencia a un descriptor en MMU (y necesitan menos bits para referir al descriptor)

  • Registros especializados:

Registros capaces de albergar a un descriptor concreto, como el DS (Para manejo de datos), SS (Para manipulación de pila) o el CS (Para instrucciones de salto y llamadas a rutinas). También existen dos tipos de direcciones:
- Las que hacen referencia a un descriptor en la tabla de memoria
- Las que no hacen referencia a ningún descriptor, y emplean descriptores de MMU, según el tipo de instrucción

  • Uso de descriptores en memoria asociativa (Cache):

La MMU contiene una memoria asociativa indexada por número de descriptor. Para cada acceso, se busca en la memoria asociativa el número de descriptor, y si no está, se carga a esta (Si se llena la memoria asociativa se lleva a cabo reemplazo). Este tipo de memoria es transparente, por lo que se puede usar en conjunción con registros descriptores de segmento en MMU.