Red de conocimiento informático - Material del sitio web - ¿Cómo asignar una parte de la memoria a un archivo?

¿Cómo asignar una parte de la memoria a un archivo?

Los archivos mapeados en memoria son algo similares a la memoria virtual. Puede reservar un área de espacio de direcciones y enviar memoria física a esta área. Sin embargo, la memoria física asignada por el archivo de memoria proviene de un archivo que ya existe en el disco, en lugar de un archivo de página del sistema. ser mapeado antes de la operación, al igual que cargar el archivo completo desde el disco a la memoria. Se puede ver que cuando se utilizan archivos asignados en memoria para procesar archivos almacenados en el disco, ya no serán necesarias operaciones de E/S en los archivos, lo que significa que al procesar archivos, ya no será necesario solicitar y asignar caché. para los archivos. Todas Todas las operaciones de almacenamiento en caché de archivos serán administradas directamente por el sistema. Debido a que se eliminan los pasos de cargar datos de archivos en la memoria, escribir datos de la memoria en el archivo y liberar bloques de memoria, los archivos mapeados en memoria pueden desempeñar un papel muy importante al procesar archivos con grandes cantidades de datos. Además, los sistemas de ingeniería real a menudo necesitan compartir datos entre múltiples procesos. Si la cantidad de datos es pequeña, el método de procesamiento es flexible. Si la cantidad de datos es enorme, es necesario completarla con la ayuda de archivos asignados en memoria. De hecho, los archivos mapeados en memoria son la forma más eficaz de resolver el problema del intercambio de datos entre múltiples procesos locales.

Los archivos asignados en memoria no son simples operaciones de E/S de archivos. En realidad, utilizan la tecnología de programación central de la administración de memoria de Windows. Por lo tanto, si desea tener una comprensión más profunda de los archivos mapeados en memoria, debe tener una comprensión clara del mecanismo de administración de memoria del sistema operativo Windows. El siguiente es el método general para usar archivos asignados en memoria:

Primero, cree o abra un objeto del núcleo del archivo a través de la función CreateFile(), que identifica el archivo en el disco que se usará como memoria. archivo mapeado. Después de usar CreateFile() para notificar al sistema operativo la ubicación de la imagen del archivo en la memoria física, solo se especifica la ruta al archivo de imagen y no se especifica la longitud de la imagen. Para especificar cuánto espacio de almacenamiento físico requiere un objeto de mapeo de archivos, se debe crear un objeto kernel de mapeo de archivos a través de la función CreateFileMapping() para indicarle al sistema el tamaño del archivo y cómo acceder al mismo. Después de crear un objeto de asignación de archivos, se debe reservar una región del espacio de direcciones para los datos del archivo y los datos del archivo se deben confirmar como memoria física asignada a esa región. La función MapViewOfFile () es responsable de asignar todo o parte del objeto de asignación de archivos al espacio de direcciones del proceso a través de la administración del sistema. En este punto, el uso y procesamiento de archivos mapeados en memoria es básicamente el mismo que el de los datos de archivos normalmente cargados en la memoria. Cuando se utiliza un archivo asignado en memoria, se debe borrar mediante una serie de operaciones y se liberan los recursos utilizados. Esta parte es relativamente fácil. Puede desasignar los datos del archivo del espacio de direcciones del proceso a través de UnmapViewOfFile() y cerrar los objetos de mapeo de archivos y los objetos de archivo creados previamente a través de CloseHandle().