Segmentación

De Wiki de Sistemas Operativos
Revisión del 03:33 6 ene 2012 de Jesgonbel (discusión | contribuciones) (Enlace dinámico: ampliación contenido.)
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 ).
  • Aspectos materiales : Hay 2 registros que funcionan como dispositivos de traducción segmentada; uno de dirección de comienzo de la tabla de segmentos, y otro para el número de entradas en ella.
  • Esto supone dos accesos a memoria física real. La tabla de segmentos ocupa memoria, siendo deseable que permanezcan en cache.
  • 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

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).

Enlace dinámico

Uso de llamadas a funciones que están en disco.

El uso de esta técnica nos aporta ventajas como reducir el trabajo del montador de enlaces (y por tanto el tiempo necesario para sus operaciones) además de que podemos tener referencias a funciones o bibliotecas que no estén en memoria principal (permite ir cargando bajo demanda los segmentos que contengan el código necesario).

Enlazado estático VS enlazado dinámico:

Los montadores de enlaces convencionales (estáticos) deben enlazar en tiempo de compilación todos los módulos, segmentos y referencias de un programa para completar sus instrucciones (si el número de instrucciones es muy elevado la cantidad de trabajo del montador será enorme) mientras que los montadores de enlaces dinámicos realizarán el enlazado durante la ejecución o durante la carga del programa.

  • Pros y contras:

La ventaja de usar enlaces dinámicos es que los programas serán más livianos, aunque se crea una cierta dependencia del programa el cual no funcionará correctamente si se modifica algún módulo, segmento o referencia (en windows los errores debidos a actualizaciones de librerías dinámicas .dll son bastante comunes). Por otro lado la ventaja de usar enlaces estáticos es que los problemas son totalmente independientes, lo que facilita su distribución.

  • Enlazado dinámico durante la carga:

En los ss.oo. de este tipo los ejecutables incluyen una relación de los objetos externos que necesita. Al cargar el programa se buscan los segmentos ya cargados y los que se necesitan y se resuelven los enlaces.

  • Enlazado dinámino durante la ejecución:

El enlazado dinámico durante la ejecución se basa en emplear referencias indirectas (la referencia apunta a una dirección de memoria la cual contiene la referencia al objeto) y en dotar al procesador de un tipo especial de interrupción llamado excepción de enlace. El compilador establece de forma indirecta las referencias a elementos de otros segmentos, utilizando como objeto intermedio un puntero con el bit de excepción de enlace activado y que apunta hacia el identificador del elemento referido. Cuando se alcanza una referencia de este tipo se lanza la excepción de enlace y el ss.oo. la atrapa el cual busca el objeto y localiza su dirección segmentada, con esa información el ss.oo. modifica el puntero asignandole la dirección hallada y desactivando el bit de excepción (el enlace especial se reduce a una referencia indirecta normal). Para facilitar la ejecución las referencias a un mismo objeto se concentran en un único puntero (así la excepción de enlace se producirá una sola vez) y todos los enlaces se concentran en un segmento especial llamado segmento de enlace.