En los sistemas operativos , la gestión de memoria es la función responsable de administrar la memoria principal del ordenador . [ 1 ] : 105–208
La función de gestión de memoria realiza un seguimiento del estado de cada ubicación de memoria, ya sea asignada o libre . Determina cómo se distribuye la memoria entre los procesos que compiten entre sí, decidiendo cuál la recibe, cuándo y cuánta se le permite. Cuando se asigna memoria, determina qué ubicaciones de memoria se asignarán. Realiza un seguimiento de cuándo se libera o no se asigna memoria y actualiza su estado.
Esto es distinto de la gestión de la memoria de la aplicación , que es la forma en que un proceso gestiona la memoria que le asigna el sistema operativo.
Técnicas de gestión de la memoria
Asignación única contigua
La asignación única es la técnica de gestión de memoria más sencilla. Toda la memoria del ordenador, generalmente con la excepción de una pequeña porción reservada para el sistema operativo, está disponible para una sola aplicación. MS-DOS es un ejemplo de un sistema que asigna memoria de esta manera. Un sistema embebido que ejecuta una sola aplicación también podría utilizar esta técnica.
Un sistema que utiliza una única asignación contigua aún puede realizar múltiples tareas intercambiando el contenido de la memoria para alternar entre usuarios. Las primeras versiones del sistema operativo MUSIC utilizaban esta técnica.
Asignación particionada
La asignación particionada divide la memoria principal en múltiples particiones , generalmente áreas contiguas. Cada partición puede contener toda la información necesaria para una tarea o trabajo específico . La gestión de memoria consiste en asignar una partición a un trabajo al inicio y liberarla al finalizar.
La asignación particionada generalmente requiere soporte de hardware para evitar que las tareas interfieran entre sí o con el sistema operativo. El IBM System/360 utiliza una técnica de bloqueo y llave . Las series UNIVAC 1108 , PDP-6 y PDP-10 , y GE-600 utilizan registros base y de límites para indicar los rangos de memoria accesible.
Las particiones pueden ser estáticas , es decir, definidas durante la carga inicial del programa (IPL) o el arranque , o por el operador del ordenador , o dinámicas , es decir, creadas automáticamente para una tarea específica. El sistema operativo IBM System/360 Multiprogramming with a Fixed Number of Tasks (MFT) es un ejemplo de particionamiento estático, y Multiprogramming with a Variable Number of Tasks (MVT) es un ejemplo de particionamiento dinámico. MVT y sus sucesores utilizan el término región para distinguir las particiones dinámicas de las estáticas en otros sistemas. [ 2 ]
Las particiones pueden ser reubicables con registros base, como en las series UNIVAC 1108, PDP-6 y PDP-10, y GE-600. Las particiones reubicables se pueden compactar para proporcionar bloques más grandes de memoria física contigua. La compactación mueve áreas de memoria "en uso" para eliminar "huecos" o áreas de memoria no utilizadas causadas por la terminación de procesos, con el fin de crear áreas libres contiguas más grandes. [ 3 ]
Algunos sistemas permiten intercambiar particiones a almacenamiento secundario para liberar memoria adicional. Las primeras versiones de la opción de tiempo compartido (TSO) de IBM intercambiaban usuarios dentro y fuera de las particiones de tiempo compartido . [ 4 ] [ a ]
Gestión de memoria paginada
La asignación paginada divide la memoria principal del ordenador en unidades de tamaño fijo llamadas marcos de página , y el espacio de direcciones virtuales del programa en páginas del mismo tamaño. La unidad de gestión de memoria del hardware asigna las páginas a los marcos. La memoria física se puede asignar página por página, mientras que el espacio de direcciones parece contiguo.
Normalmente, con la gestión de memoria paginada, cada tarea se ejecuta en su propio espacio de direcciones. Sin embargo, existen algunos sistemas operativos de espacio de direcciones único que ejecutan todos los procesos dentro de un único espacio de direcciones, como IBM i , que ejecuta todos los procesos dentro de un espacio de direcciones grande, e IBM OS/VS1 y OS/VS2 (SVS) , que ejecutaban todas las tareas en un único espacio de direcciones virtuales de 16 MiB.
La memoria paginada puede paginarse bajo demanda cuando el sistema puede mover las páginas según sea necesario entre la memoria primaria y la secundaria.
Gestión de memoria segmentada
La memoria segmentada es la única técnica de administración de memoria que no proporciona al programa del usuario un "espacio de direcciones lineal y contiguo". [ 1 ] : 165 Los segmentos son áreas de memoria que generalmente corresponden a una agrupación lógica de información, como un procedimiento de código o una matriz de datos. Los segmentos requieren soporte de hardware en forma de una tabla de segmentos que generalmente contiene la dirección física del segmento en memoria, su tamaño y otros datos como bits de protección de acceso y estado (intercambiado, intercambiado, etc.).
La segmentación permite una mejor protección de acceso que otros esquemas, ya que las referencias a la memoria son relativas a un segmento específico y el hardware no permitirá que la aplicación haga referencia a memoria no definida para ese segmento.
Es posible implementar la segmentación con o sin paginación. Sin soporte para paginación, el segmento es la unidad física que se intercambia dentro y fuera de la memoria según sea necesario. Con soporte para paginación, las páginas suelen ser la unidad de intercambio y la segmentación solo añade un nivel adicional de seguridad.
En un sistema segmentado, las direcciones suelen constar del identificador del segmento y un desplazamiento relativo a la dirección base del segmento, definido como desplazamiento cero.
La arquitectura Intel IA-32 (x86) permite que un proceso tenga hasta 16 383 segmentos de hasta 4 GiB cada uno. Los segmentos IA-32 son subdivisiones del espacio de direcciones lineal del ordenador , el espacio de direcciones virtuales proporcionado por el hardware de paginación. [ 5 ]
El sistema operativo Multics es probablemente el sistema más conocido que implementa memoria segmentada. Los segmentos de Multics son subdivisiones de la memoria física del ordenador de hasta 256 páginas, cada una de ellas de 1 KB (palabras de 36 bits), lo que resulta en un tamaño máximo de segmento de 1 MiB (con bytes de 9 bits, como se usa en Multics). Un proceso puede tener hasta 4046 segmentos. [ 6 ]
Despliegue/despliegue
El despliegue/despliegue (RO/RI) es una técnica de gestión de memoria del sistema operativo en la que todo el código y los datos no compartidos de un programa en ejecución se intercambian a la memoria auxiliar (disco o tambor) para liberar el almacenamiento principal para otra tarea. Los programas pueden desplegarse "por demanda o... cuando se espera algún evento prolongado". [ 7 ] El despliegue/despliegue se utilizaba comúnmente en sistemas de tiempo compartido , [ 8 ] donde el "tiempo de espera" del usuario era relativamente largo en comparación con el tiempo necesario para realizar el intercambio.
A diferencia del almacenamiento virtual (paginación o segmentación), el proceso de redistribución de memoria (rollout/rollin) no requiere hardware especial para la gestión de memoria; sin embargo, a menos que el sistema cuente con hardware de reubicación, como un mapa de memoria o registros base y de límites , el programa debe redistribuirse a sus ubicaciones de memoria originales. El proceso de redistribución de memoria ha sido ampliamente reemplazado por la memoria virtual.
La función Rollout/rollin era una característica opcional de la multiprogramación de OS/360 con un número variable de tareas (MVT).
El despliegue/despliegue permite la expansión temporal y dinámica de un trabajo específico más allá de su región originalmente especificada. Cuando un trabajo necesita más espacio, el despliegue/despliegue intenta obtener almacenamiento no asignado para su uso. Si no hay almacenamiento no asignado disponible, se despliega otro trabajo (es decir, se transfiere al almacenamiento auxiliar) para que su región pueda ser utilizada por el primer trabajo. Cuando el primer trabajo libera este almacenamiento adicional, este vuelve a estar disponible, ya sea (1) como almacenamiento no asignado, si ese era su origen, o (2) para recibir el trabajo que se transferirá de nuevo al almacenamiento principal (despliegue). [ 9 ]
En OS/360, el rollout/rollin se utilizaba únicamente para trabajos por lotes, y el rollin no se producía hasta que finalizaba el paso del trabajo que tomaba prestada la región.
Véase también
Notas
- ↑ Conocidas como regiones TSO
Referencias
- 1 2 Madnick, Stuart; Donovan, John (1974). Sistemas operativos . McGraw-Hill Book Company. ISBN 0-07-039455-5.
- ↑ IBM Corporation (1970). Sistema operativo IBM System/360: conceptos y funcionalidades (PDF) . pág. 73.
- ↑ Samanta, D. (2004). Estructuras de datos clásicas . PHI Learning Pvt. Ltd. pág. 94. ISBN 8120318749.
- ↑ IBM Corporation (1972). Guía de opciones de tiempo compartido del sistema operativo IBM System/360 (PDF) . pág. 10. (GC28-6698-5)
- ↑ Intel Corporation. IA-32 Manual del desarrollador de software de la arquitectura Intel Volumen 1: Arquitectura básica .
- ↑ Green, Paul. "Multics Virtual Memory – Tutorial and Reflections" . Archivado del original el 5 de marzo de 2001. Consultado el 9 de mayo de 2012 .
- ↑ Walraet, Bob (2014). Programación: El desafío imposible . Elsevier. pág. 124. ISBN 978-0-444-87128-2. Consultado el 24 de agosto de 2018 .
- ↑ "rollin/rollout" Simposio Internacional sobre Modelado, Medición y Evaluación del Rendimiento Informático . Asociación para la Maquinaria de Computación. 29-31 de marzo de 1976. pág. 137. Consultado el 24 de agosto de 2018 .
- ↑ IBM Corporation (junio de 1970). Sistema operativo IBM System/360: conceptos y funcionalidades (PDF) . pág. 55. Consultado el 24 de agosto de 2018 .
- Gestión de la memoria
- Sistemas operativos