Red de conocimiento informático - Conocimiento informático - Cómo evitar la fragmentación de la memoria

Cómo evitar la fragmentación de la memoria

Solicitar y liberar con frecuencia memoria de diferentes tamaños conducirá inevitablemente a problemas de fragmentación de la memoria. El resultado es que cuando se solicita nuevamente la asignación de memoria contigua, incluso si la memoria total es suficiente, no se puede satisfacer la demanda de memoria contigua. Este problema también se conoce como fragmentación externa.

Solución:

Hay dos formas de evitar la fragmentación externa:

1. Utilice unidades de paginación para asignar un conjunto de marcos de página libres no contiguos a marcos de página contiguos.

2. Desarrolle una técnica adecuada para rastrear bloques existentes de marcos de página libres contiguos para tratar de evitar dividir bloques libres grandes para satisfacer solicitudes de bloques pequeños.

El primer escenario significa que la memoria general es insuficiente para satisfacer solicitudes de memoria consecutivas.

La segunda opción implica desarrollar una técnica de asignación específica para rastrear la memoria libre y así resolver el problema de fragmentación de la memoria.

Linux utiliza la segunda opción porque en algunos casos el sistema sí requiere direcciones físicas contiguas (el procesador DMA tiene acceso directo al bus).

Linux utiliza el conocido algoritmo del sistema de amigos para resolver problemas de fragmentación externa. Todos los marcos de página libres están agrupados en 11 listas de bloqueo, cada lista de bloqueo contiene 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 bloques de tamaño 1, 2, 4, 8, 16, 32. , 64, 128, 256, 512, 1024 marcos de página contiguos La solicitud máxima de 1024 marcos de página equivale a 4 MB de RAM contigua (4 KB por página) La dirección física del primer marco de página de cada bloque es un múltiplo entero de. el tamaño del bloque. Por ejemplo, la dirección inicial de un bloque de tamaño 16 marcos de página es un múltiplo de 16*2^12.

A continuación damos un ejemplo para ilustrar el principio de funcionamiento del algoritmo asociado. Supongamos que ahora se solicita un bloque de 256 marcos de página (1 MB). Los pasos del algoritmo son los siguientes:

. > ? Consulte la lista de cadenas de marcos de 256 páginas. ¿Existe un ayuno gratuito? Si no, busque el siguiente bloque más grande y, si lo hay, satisfaga la solicitud.

Compruebe si hay un bloque libre en la lista de cadenas de marcos de 512 páginas; de ser así, divida el bloque libre de marcos de 512 páginas en dos, el primero se utiliza para satisfacer la solicitud y el segundo. está vinculado a 256 Lista vinculada de marcos de página. Si no hay ningún bloque libre, continúa buscando el siguiente bloque más grande.

El proceso inverso al proceso anterior es el proceso de liberar el bloque del marco de la página, que también es el origen del nombre del algoritmo. El núcleo intentará fusionar un par de bloques de amigos libres de tamaño B en un bloque de tamaño 2B. Dos bloques que cumplen las siguientes condiciones se denominan bloques de amigos: ¿Los dos bloques son del mismo tamaño

? Sus direcciones físicas son consecutivas

La dirección física del primer marco de página del primer bloque es 2 * B * 2^12

El algoritmo es recursivo si B se fusiona con éxito. , intentará continuar fusionando 2B para intentar nuevamente formar un bloque más grande.