SISTEMA DE GESTION DE MEMORIA PARA LA REDUCCION DE LA FRAGMENTACION DE MEMORIA.
Sistema de gestión de memoria de un proceso elaborado en lenguaje C/C++ en una unidad de tratamiento,
comprendiendo este sistema: un asignador apropiado para asignar unos espacios de memoria para objetos utilizados por el proceso y para liberar unos espacios de memoria no utilizados por el proceso hacia el sistema de explotación de la unidad de tratamiento; un mecanismo asíncrono apropiado para definir una zona tampón constituida por un conjunto de bloques de memoria disponibles para el proceso, siendo todos los bloques de memoria de dicho mecanismo de un mismo tamaño igual a m*32 Ko, estando m comprendido entre 1 y 4; cada bloque de memoria de m*32 Ko, procedente de dicho mecanismo y utilizado por el proceso, es administrado en forma de regiones de memoria según la técnica de gestión de memoria "chunk" por el asignador; para grandes objetos cuyo tamaño está comprendido en un intervalo de tamaños predeterminado, cada bloque de memoria de m*32 Ko es considerado como una región de memoria "chunk" multitamaños que contiene varios de dichos grandes objetos de diferentes tamaños, comprendiendo dicha región de memoria "chunk" multitamaños un encabezamiento que indica que se trata de una región de memoria "chunk" que contiene grandes objetos, un campo de bits o "bit field" y una zona de datos que comprende bloques pequeños de memoria en curso de utilización y bloques pequeños de memoria libres, siendo todos los pequeños bloques de memoria de la región de memoria "chunk" multitamaños del mismo tamaño; comprendiendo el asignador unos medios de utilización del algoritmo de Bruijn en combinación con la técnica de campo de bits para determinar unos bloques adyacentes libres durante la liberación de un pequeño bloque de memoria por el proceso
Tipo: Resumen de patente/invención. Número de Solicitud: W07000491FR.
Solicitante: INFOVISTA SA.
Nacionalidad solicitante: Francia.
Dirección: 6, RUE DE LA TERRE DE FEU,91940 LES ULIS.
Inventor/es: CHEDRU,OLIVIER.
Fecha de Publicación: .
Fecha Concesión Europea: 30 de Septiembre de 2009.
Clasificación Internacional de Patentes:
- G06F12/02D2
Clasificación PCT:
- G06F12/02 FISICA. › G06 CALCULO; CONTEO. › G06F PROCESAMIENTO ELECTRICO DE DATOS DIGITALES (sistemas de computadores basados en modelos de cálculo específicos G06N). › G06F 12/00 Acceso, direccionamiento o asignación en sistemas o arquitecturas de memoria (entrada digital a partir de, o salida digital hacia soportes de registro, p. ej. hacia unidades de almacenamiento de disco G06F 3/06). › Direccionamiento o asignación; Traslado (secuenciación de direcciones de programa G06F 9/00; disposiciones para seleccionar una dirección en una memoria digital G11C 8/00).
Fragmento de la descripción:
Sistema de gestión de memoria para la reducción de la fragmentación de memoria.
La presente invención se refiere a un sistema de gestión de memoria de un proceso elaborado en lenguaje C/C++ en una unidad de tratamiento. Encuentra una aplicación particularmente interesante en programas o aplicaciones informáticas de ejecución de larga duración ("long-running application"), tales como aplicaciones de servidores. Estas aplicaciones deben mantener la utilización de su memoria estable en el tiempo.
De forma general, existen dos tipos de utilización de memoria:
- - la cantidad de memoria realmente utilizada por el proceso, denominado "heap usage", que debe ser estable, puesto que, en caso contrario, el proceso corre el riesgo de encontrar problemas de memoria.
- - la cantidad de memoria reservada por el sistema de explotación para el proceso, denominado "virtual memory usape". Comprende el "heap usage", así como las bibliotecas y el código de la aplicación.
La fragmentación de memoria es la diferencia entre la utilización de la memoria virtual y la utilización de pila ("heap usage"). Es la memoria reservada por el sistema y no contiene nada útil para el proceso. No puede ser nula, pero debe mantenerse tan baja como sea posible. Si la fragmentación de memoria continúa aumentando, pueden surgir serios problemas:
- - a medida que aumenta la memoria virtual, esto pone más presión sobre el sistema de explotación y degrada el conjunto de las prestaciones, a veces por un factor muy significativo;
- - para aplicaciones que funcionan a 32 bits, la cantidad de memoria virtual disponible está limitada a 4 gigaoctetos o menos, según la plataforma utilizada. En consecuencia, dicha aplicación carecería de memoria virtual y se interrumpiría.
Algunos lenguajes de programación, tales como Java o . NET resuelven el problema de fragmentación de memoria desplazando objetos en la memoria y así pueden "compactar" la pila ("heap"). Un sistema típico de asignación de memoria se describe en el documento US nº 6.182.089.
Esta solución no es posible con las aplicaciones C o C++ en las que los objetos tienen una dirección fija en la memoria hasta que sean liberados. Los asignadores C/C++ existentes tienen, en particular, una o varias de las debilidades siguientes:
- - el asignador de memoria por defecto no puede realizar correctamente la fragmentación interna en razón de un algoritmo de ensamblaje de bloque inadecuado. Si las clases de tamaño controladas por el asignador no se corresponden con los tamaños utilizados por el proceso, esto aumentará la fragmentación interna.
- - asimismo, no puede realizarse correctamente la fragmentación externa utilizando un pequeño algoritmo de ensamblaje, "coalescing algorithm" en lengua inglesa. El ensamblaje de bloques libres es generalmente muy consumidor, pero es una etapa obligatoria con el fin de limitar la fragmentación externa.
Por lo tanto, uno de los problemas técnicos es el hecho de que la fragmentación consume tiempo y recursos, lo que penaliza al final otras aplicaciones del sistema.
La presente invención tiene por objetivo remediar los inconvenientes citados anteriormente proponiendo un nuevo asignador de memoria de baja fragmentación para el C/C++. La invención tiene por objetivo sustituir el asignador de memoria por defecto suministrado con el sistema de explotación y evitar la fragmentación externa. La invención tiene todavía por objetivo mantener la memoria virtual lo más pequeña posible.
Se alcanza por lo menos uno de los objetivos citados anteriormente con un sistema de gestión de memoria de un proceso elaborado en lenguaje C/C++ en una unidad de tratamiento, comprendiendo este sistema:
- - un asignador apropiado para asignar unos espacios de memoria para objetos utilizados por el proceso y para liberar unos espacios de memoria no utilizados por el proceso hacia el sistema de explotación de la unidad de tratamiento;
- - un mecanismo asíncrono apropiado para definir una zona tampón constituida por un conjunto de bloques de memoria disponibles para el proceso, siendo todos los bloques de memoria de dicho mecanismo de un mismo tamaño igual a m*32 Ko, estando m comprendido entre 1 y 4;
- - cada bloque de memoria de m*32 Ko, procedente de dicho mecanismo y utilizado por el proceso, es administrado en forma de regiones de memoria según la técnica de gestión de memoria "chunk" por el asignador;
Para grandes objetos ("large object" en inglés) cuyo tamaño está comprendido en una gama de tamaños predeterminada, cada bloque de memoria de m*32 Ko es considerado como un chunk multitamaños que contiene varios de dichos grandes objetos de diferentes tamaños, comprendiendo dicho chunk multitamaños un encabezamiento que indica que se trata de un chunk que contiene grandes objetos, un campo de bits o "bit fields" y una zona de datos que comprende pequeños bloques de memoria en curso de utilización y pequeños bloques de memoria libres, siendo todos los pequeños bloques de memoria del chunk multitamaños de un mismo tamaño; comprendiendo el asignador unos medios de realización del algoritmo de Bruijn en combinación con la técnica de campo de bits para determinar unos bloques adyacentes libres durante la liberación de un pequeño bloque de memoria por el proceso.
Más precisamente, cuando un pequeño bloque de memoria es liberado por el proceso, el asignador busca si existen pequeños bloques adyacentes para ensamblarlos ("coalescing") y constituir así un bloque más grande a liberar. El algoritmo de Bruijn, que se puede encontrar en el documento "Using the Bruijn Sequences to Index a 1 in a Computer Word", Charles E. Leiserson, Harald Prokop, Keith H. Randall, MIT Laboratory for Computer Science, Cambridge, MA 02139 USA, 7 de julio de 1998, interviene en la búsqueda de bloques adyacentes libres en combinación con el campo de bits. Esta técnica permite acelerar la búsqueda y, por lo tanto, liberar rápidamente la memoria hacia el sistema de explotación, limitando al mismo tiempo la fragmentación.
La presente invención aporta ciertamente una respuesta técnica a un problema técnico.
Los denominados grandes objetos tienen un tamaño inferior a m*32 Ko (kilooctetos).
Con el sistema según la invención, el asignador reserva solamente pequeñas zonas de memoria y estas zonas son devueltas al sistema cuando se quedan vacías. Así, se conserva la memoria virtual del proceso tan baja como sea posible. Por el contrario, en los sistemas de la técnica anterior, los asignadores reservan una extensa zona de espacio de dirección y controlan sus bloques de memoria en esta zona. Esta zona de espacio de dirección ("heap") según la técnica anterior se desarrolla si fuera necesario; siendo el inconveniente el hecho de que la memoria no es reenviada nunca hacia el sistema, pudiendo aumentar así la utilización de la memoria virtual del proceso, lo que aumenta la presión de memoria por el lado del sistema.
En el sistema según la presente invención, el mecanismo asíncrono, denominado "free store", constituye una zona tampón en la que se guarda a disposición del asignador un conjunto de bloques de memoria. El número de estos bloques varía entre un valor mínimo y un valor máximo. Más precisamente, el mecanismo asíncrono comprende unos medios para reservar un bloque de memoria de m*32 Ko cuando se sobrepasa un umbral mínimo del número de bloques de memoria, y unos medios para liberar bloques de memoria de m*32 Ko hacia el sistema de explotación cuando se sobrepasa un umbral máximo del número de bloques de memoria.
La presente invención se detecta en particular por el hecho de que el mecanismo asíncrono reserva memoria por bloque de memoria de m*32 Ko, pudiendo m ser ventajosamente igual a 2. Se asigna memoria al proceso por bloque de memoria de 64 Ko. Así, trabajando con bloques de memoria de 64 Ko, por ejemplo, se utiliza poca memoria virtual y el asignador puede administrar estos bloques de memoria de manera más rápida. El tamaño del bloque de memoria puede ser parametrizado en función de las limitaciones del sistema de explotación y del tipo de aplicación. Por ejemplo, se pueden utilizar 128 Ko en lugar de 64 Ko para una aplicación de 64 bits.
Preferentemente, cada pequeño bloque de memoria presenta un tamaño de...
Reivindicaciones:
1. Sistema de gestión de memoria de un proceso elaborado en lenguaje C/C++ en una unidad de tratamiento, comprendiendo este sistema:
un asignador apropiado para asignar unos espacios de memoria para objetos utilizados por el proceso y para liberar unos espacios de memoria no utilizados por el proceso hacia el sistema de explotación de la unidad de tratamien- to;
un mecanismo asíncrono apropiado para definir una zona tampón constituida por un conjunto de bloques de memoria disponibles para el proceso, siendo todos los bloques de memoria de dicho mecanismo de un mismo tamaño igual a m*32 Ko, estando m comprendido entre 1 y 4;
cada bloque de memoria de m*32 Ko, procedente de dicho mecanismo y utilizado por el proceso, es administrado en forma de regiones de memoria según la técnica de gestión de memoria "chunk" por el asignador; para grandes objetos cuyo tamaño está comprendido en un intervalo de tamaños predeterminado, cada bloque de memoria de m*32 Ko es considerado como una región de memoria "chunk" multitamaños que contiene varios de dichos grandes objetos de diferentes tamaños, comprendiendo dicha región de memoria "chunk" multitamaños un encabezamiento que indica que se trata de una región de memoria "chunk" que contiene grandes objetos, un campo de bits o "bit field" y una zona de datos que comprende bloques pequeños de memoria en curso de utilización y bloques pequeños de memoria libres, siendo todos los pequeños bloques de memoria de la región de memoria "chunk" multitamaños del mismo tamaño; comprendiendo el asignador unos medios de utilización del algoritmo de Bruijn en combinación con la técnica de campo de bits para determinar unos bloques adyacentes libres durante la liberación de un pequeño bloque de memoria por el proceso.
2. Sistema según la reivindicación 1, caracterizado porque el mecanismo asíncrono comprende unos medios para reservar un bloque de memoria de m*32 Ko cuando se sobrepasa un umbral mínimo del número de bloques de memoria, y unos medios para liberar hacia el sistema de explotación unos bloques de memoria de m*32 Ko cuando se sobrepasa un umbral máximo del número de bloques de memoria.
3. Sistema según la reivindicación 1 ó 2, caracterizado porque m es igual a 2.
4. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque cada pequeño bloque de memoria presenta un tamaño de 8 octetos.
5. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque cada pequeño bloque de memoria en curso de utilización por el proceso comprende una zona que contiene el objeto en curso de utilización y un encabezamiento que indica el tamaño de dicho objeto en curso de utilización.
6. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque cada pequeño bloque de memoria libre comprende un vínculo hacia el pequeño bloque de memoria libre precedente, un vínculo hacia el pequeño bloque de memoria siguiente y un espacio de memoria libre para datos.
7. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque comprende además una lista denominada lista libre de grandes objetos en la que se establece, para cada tamaño de dicho intervalo de tamaños predeterminado, un repertorio de vínculos hacia pequeños bloques de memoria libres en regiones de memoria "chunk" multitamaños.
8. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque dicho intervalo de tamaños predeterminado consiste en un intervalo tal que 256 octetos < tamaño de objeto = m*32 Ko.
9. Sistema según la reivindicación 8, caracterizado porque para pequeños objetos cuyo tamaño es inferior o igual a 256 octetos, cada bloque de memoria de m*32 Ko que debe utilizarse es subdividido en una pluralidad de segmentos de memoria fijos denominados "páginas chunk"; comprendiendo cada segmento de memoria fijo "página chunk" un encabezamiento que contiene el tamaño de los objetos y una indicación del carácter vacío o no del segmento de memoria fijo "página chunk" y varios pequeños bloques de memoria del mismo tamaño, estando cada pequeño bloque de memoria libre o lleno de objetos.
10. Sistema según la reivindicación 9, caracterizado porque comprende además una primera lista libre de pequeños objetos asociada al conjunto de segmentos de memoria fijos "páginas chunk" de tal modo que para cada tamaño de objeto se establecen vínculos hacia pequeños bloques de memoria libre, y porque comprende además para cada segmento de memoria fijo "página chunk" una segunda lista libre interna de pequeños objetos, comprendiendo esta lista libre interna unos vínculos entre objetos y pequeños bloques de memoria libres en el seno de un mismo segmento de memoria fijo "página chunk"; siendo dichas primera y segunda listas libres de pequeños objetos administradas por el asignador para la asignación y la liberación de memoria.
11. Sistema según la reivindicación 9 ó 10, caracterizado porque, para liberar un objeto, el asignador comprende unos medios para realizar la operación de dirección del objeto a liberar módulo m*32 Ko de forma que se deduzca de ello el tamaño de dicho objeto a liberar.
12. Sistema según cualquiera de las reivindicaciones 9 a 11, caracterizado porque el asignador comprende unos medios para liberar un bloque de memoria de m*32 Ko hacia el sistema de explotación cuando el conjunto de los segmentos de memoria fijos "páginas chunk" de este bloque de memoria están vacíos.
13. Sistema según cualquiera de las reivindicaciones anteriores, caracterizado porque para objetos muy grandes de tamaños superiores a m*32 Ko, el asignador comprende unos medios para extraer del mecanismo asíncrono varios bloques de memoria de tamaño m*32 Ko cada uno con el fin de formar una región de memoria "chunk" sobredimensionada, comprendiendo cada región de memoria "chunk" sobredimensionada un encabezamiento que señala que se trata de una región de memoria "chunk" que comprende un objeto de tamaño muy grande.
Patentes similares o relacionadas:
PROCEDIMIENTO DE ASIGNACION DINAMICA DE MEMORIA POR BLOQUES DE MEMORIA ELEMENTALES EN UNA ESTRUCTURA DE DATOS, Y SISTEMA INTEGRADO CORRESPONDIENTE, del 6 de Abril de 2010, de CP8 TECHNOLOGIES: Método de asignación dinámica de memoria en una o varias estructuras de datos (ID_Aj) identificada(s) por un número de identificación y memorizada(s) […]
Almacenamiento de datos gráficos comprimidos en ancho de banda, del 6 de Noviembre de 2019, de QUALCOMM INCORPORATED: Un procedimiento, que comprende: almacenar, mediante al menos un procesador, una pluralidad de datos gráficos comprimidos en ancho de banda en una pluralidad respectiva […]
Método de procesado de datos, aparato de almacenamiento, disco de estado sólido y sistema de almacenamiento, del 28 de Agosto de 2019, de HUAWEI TECHNOLOGIES CO., LTD.: Un método de procesado de datos, aplicado a un sistema de almacenamiento, en donde el sistema de almacenamiento comprende un anfitrión, un controlador y un […]
Gestión de memoria automática que usa una unidad de gestión de memoria, del 24 de Julio de 2019, de aicas GmbH: Método implementado por ordenador , para actuar sobre un módulo automático de gestión de memoria en un sistema informático que tiene una memoria de acceso […]
Uso de compresión de memoria para reducir la carga de compromiso de memoria, del 6 de Mayo de 2019, de Microsoft Technology Licensing, LLC: Un método de reducir una cantidad de compromiso de memoria para un programa en un dispositivo de cálculo , comprendiendo el método: determinar […]
Controlador de acceso a memoria, sistemas y procedimientos para optimizar los tiempos de acceso a memoria, del 9 de Enero de 2019, de QUALCOMM INCORPORATED: Un controlador de memoria , que comprende: un controlador configurado para acceder al menos a una ubicación de memoria correspondiente […]
Sistema de gestión de datos y método, del 30 de Noviembre de 2018, de LIFESCAN SCOTLAND LIMITED: Un sistema de gestión de datos que comprende: - una primera sección de memoria no volátil dividida en una pluralidad de ubicaciones […]
Método de obtención anticipada de datos para un sistema de almacenamiento de tabla hash distribuida DHT, nodo y sistema, del 21 de Noviembre de 2018, de HUAWEI TECHNOLOGIES CO., LTD.: Un método de obtención anticipada de datos para un sistema de almacenamiento de tabla hash distribuida DHT que comprende un primer nodo de almacenamiento y un segundo […]