Segmentación de la memoria


Segmentación de memoria es un sistema operativo de gestión de memoria técnica de la división de un ordenador 'es la memoria primaria en segmentos o secciones . En un sistema informático que usa segmentación, una referencia a una ubicación de memoria incluye un valor que identifica un segmento y un desplazamiento (ubicación de memoria) dentro de ese segmento. Los segmentos o secciones también se utilizan en archivos de objetos de programas compilados cuando están vinculados entre sí en una imagen de programa y cuando la imagen se carga en la memoria.

Los segmentos generalmente corresponden a divisiones naturales de un programa, como rutinas individuales o tablas de datos [1], por lo que la segmentación es generalmente más visible para el programador que la paginación sola. [2] Se pueden crear diferentes segmentos para diferentes módulos de programa o para diferentes clases de uso de memoria, como segmentos de código y datos . [3] Ciertos segmentos pueden compartirse entre programas. [1] [2]

La segmentación se inventó originalmente como un método mediante el cual el software del sistema podría aislar diferentes procesos de software ( tareas ) y datos que están utilizando. Su objetivo era aumentar la confiabilidad de los sistemas que ejecutan múltiples procesos simultáneamente. [4] En una arquitectura x86-64 se considera heredada y la mayoría del software de sistema moderno basado en x86-64 no utiliza la segmentación de memoria. En su lugar, manejan programas y sus datos utilizando paginación de memoria que también sirve como una forma de protección de la memoria. Sin embargo, la mayoría de las implementaciones x86-64 aún lo admiten por razones de compatibilidad con versiones anteriores. [4]

En un sistema que usa segmentación, las direcciones de memoria de la computadora consisten en una identificación de segmento y un desplazamiento dentro del segmento. [3] Una unidad de gestión de memoria de hardware (MMU) es responsable de traducir el segmento y el desplazamiento a una dirección física , y de realizar comprobaciones para asegurarse de que se pueda realizar la traducción y que la referencia a ese segmento y desplazamiento esté permitida.

Cada segmento tiene una longitud y un conjunto de permisos (por ejemplo, lectura , escritura , ejecución ) asociados a él. [3] Un proceso solo puede hacer una referencia en un segmento si el tipo de referencia está permitido por los permisos y si el desplazamiento dentro del segmento está dentro del rango especificado por la longitud del segmento. De lo contrario, se genera una excepción de hardware , como un error de segmentación .

Los segmentos también se pueden utilizar para implementar la memoria virtual . En este caso, cada segmento tiene una bandera asociada que indica si está presente en la memoria principal o no. Si se accede a un segmento que no está presente en la memoria principal, se genera una excepción y el sistema operativo leerá el segmento en la memoria desde el almacenamiento secundario.