19Asignación de memoria dinámica

asignación de memoria

La asignación de memoria se refiere al proceso mediante el cual el sistema operativo administra la memoria de su computadora. En el sistema operativo, la memoria se divide en varias áreas de tamaño fijo llamadas páginas. Estas páginas se pueden asignar a procesos para almacenar su código, datos y mensajes de pila.
Principio de asignación:
1. Solicitar memoria: el proceso solicita memoria del sistema operativo y especifica el tamaño de memoria requerido.
2. Asignar memoria: el sistema operativo asigna una cierta cantidad de páginas de memoria al proceso y asigna sus direcciones al espacio de direcciones virtuales del proceso.
3. Usar memoria: los procesos usan la memoria asignada para almacenar su código, datos, pila y otra información.
4. Liberar memoria: el proceso libera páginas de memoria que ya no son necesarias y las devuelve al sistema operativo para su administración y asignación a otros procesos.

La conexión entre la memoria virtual y la asignación de almacenamiento
La memoria virtual es una tecnología en las computadoras que permite que un proceso acceda a una cantidad mayor de memoria de la que realmente está disponible. La memoria virtual utiliza espacio en el disco duro para expandir la memoria, lo que permite que el proceso utilice más memoria que la memoria física real, mejorando así el rendimiento y la eficiencia del sistema.

Pasos para utilizar la asignación de memoria para administrar la memoria virtual:
1. Traducción de direcciones de memoria virtual
2. Reemplazo de páginas
3. Paginación: debe considerar cómo asignar páginas de memoria física a los procesos para maximizar el rendimiento y la eficiencia del sistema.
4. Protección de página: necesidad de controlar el acceso del proceso a la memoria

Asignador de memoria dinámica

El asignador de memoria dinámica se refiere a un mecanismo que asigna y administra memoria dinámicamente mientras el programa se está ejecutando y generalmente se usa para asignar memoria dinámicamente en el montón. El montón se refiere a un área de memoria asignada dinámicamente administrada por el sistema operativo.

Pasos de implementación del asignador de memoria dinámica:
1. Asignación de memoria: el asignador de memoria dinámica administra un grupo de memoria y asigna estos bloques de memoria a objetos en el programa según sea necesario. Los algoritmos comunes de asignación de memoria incluyen la primera adaptación, la mejor adaptación y la peor adaptación.
2. Liberación de memoria: cuando un objeto en el programa ya no es necesario, el asignador de memoria dinámica liberará su bloque de memoria correspondiente al grupo de memoria para que otros objetos puedan usarlo.
3. Fusión de memoria: cuando se liberan bloques de memoria adyacentes, el asignador de memoria dinámica puede fusionarlos en un bloque de memoria más grande para que la memoria se pueda utilizar mejor durante las asignaciones posteriores.
4. Desfragmentación de la memoria: el asignador de memoria dinámica realizará operaciones frecuentes de asignación y liberación de memoria en el montón, lo que puede provocar que algunos pequeños bloques de memoria se dispersen en el montón y formen fragmentos. Para evitar que estas fragmentaciones afecten negativamente el rendimiento del asignador de memoria, el asignador de memoria dinámica generalmente realiza una operación de desfragmentación para fusionar pequeños bloques de memoria adyacentes en bloques de memoria más grandes.

Requisitos y objetivos del asignador

El asignador se utiliza para gestionar la asignación y liberación de memoria dinámica. Un buen asignador debe cumplir con los siguientes requisitos y objetivos:
1. Eficiencia: el asignador debe asignar y liberar memoria lo más rápido posible para minimizar el tiempo de espera de la aplicación.
2. Escalabilidad: el asignador debe poder administrar la memoria de manera eficiente y poder manejar múltiples solicitudes simultáneas. Además, se puede cambiar el tamaño de los asignadores dinámicamente para satisfacer las necesidades de diferentes aplicaciones.
3. Baja fragmentación: el asignador debe minimizar la generación de fragmentación de la memoria para que la memoria disponible pueda usarse de manera más eficiente.
4. Confiabilidad: el asignador debe poder garantizar la exactitud de las operaciones de asignación y liberación y evitar pérdidas de memoria y accesos ilegales a la memoria.
5. Portabilidad: el asignador debería poder ejecutarse en diferentes plataformas y sistemas operativos.

Restricciones:
1. La implementación interna del asignador debe ser segura para subprocesos para admitir aplicaciones de subprocesos múltiples
2. El asignador debe administrar el diseño y la alineación de la memoria para garantizar la corrección y eficiencia de la asignación de memoria
3. El asignador debe admitir el grupo de memoria tecnología para evitar operaciones frecuentes de asignación y liberación de memoria.
4. El asignador debe admitir la tecnología de compresión de memoria para minimizar la fragmentación de la memoria y mejorar su utilización.

Medición del rendimiento: velocidad y eficiencia de la memoria
La velocidad a menudo se mide en términos de rendimiento, que es la cantidad de bloques de memoria asignados y liberados en un período de tiempo determinado. Cuanto mayor sea el rendimiento, mejor será el rendimiento del asignador.
La eficiencia de la memoria se mide por la utilización de la memoria, que es la relación entre la memoria asignada y la memoria total. Cuanto mayor sea la utilización de la memoria, mejor será el rendimiento del asignador.

Para maximizar el rendimiento y la utilización de la memoria, se toman medidas:
1. Reducir la generación de fragmentos de memoria tanto como sea posible, mediante tecnología de grupo de memoria y tecnología de compresión de memoria
2. Bloquear la memoria caché tanto como sea posible, lo que se puede lograr rápidamente utilizando Allocator y grupo de caché para lograr
3. Reducir la cantidad de asignación y liberación de memoria tanto como sea posible, lo que se puede lograr mediante el uso de tecnología de bloqueo y tecnología de preasignación.
4. Optimice el algoritmo de asignación y liberación de bloques de memoria. Se pueden utilizar algoritmos apropiados para maximizar el rendimiento de la hoja y la utilización de la memoria.
5. Utilice implementaciones seguras para subprocesos para admitir aplicaciones de subprocesos múltiples.

Fragmentación de la memoria, fragmentación externa.

La fragmentación interna se refiere a la memoria desperdiciada en el bloque de memoria asignado al proceso porque el tamaño asignado es mayor que el tamaño solicitado y hay más espacio libre. Por ejemplo, si un proceso solicita la asignación de un bloque de memoria de 20 bytes, pero el sistema solo tiene 24 bytes de bloque de memoria libre disponibles para su asignación, entonces el proceso asignará todo el bloque de memoria de 24 bytes, de los cuales 4 bytes ser asignado Es memoria desperdiciada, es fragmentación interna.

La fragmentación externa se refiere al espacio en la memoria que no se ha asignado pero que es demasiado pequeño para asignarlo al proceso que solicita la asignación. Estos espacios pueden ser demasiado pequeños para satisfacer los requisitos de memoria de cualquier proceso. Por ejemplo, si un proceso necesita asignar un bloque de memoria de 1000 bytes, pero solo hay algunos espacios dispersos en el sistema, cada uno de los cuales tiene menos de 1000 bytes, entonces el proceso no puede satisfacerse, incluso si el espacio total es menor. Más de 1000 bytes. Si son más grandes, estos espacios no se utilizarán, lo cual es fragmentación externa.

Tanto la fragmentación interna como la fragmentación externa desperdician recursos de memoria y son un tema importante para la gestión de la memoria del sistema. Por lo tanto, el administrador de memoria necesita reducir la fragmentación interna y externa tanto como sea posible para mejorar la utilización de la memoria y el rendimiento del sistema.

Supongo que te gusta

Origin blog.csdn.net/m0_56898461/article/details/130200062
Recomendado
Clasificación