fbpx
Wikipedia

Archivo proyectado en memoria

Un archivo proyectado en memoria (en inglés memory-mapped file, a veces traducido también como archivo mapeado en memoria o archivo de memoria mapeada) es, en informática, una porción de memoria virtual en la que se establece una correlación directa byte a byte con una parte de un archivo o un recurso similar. Este recurso es, normalmente, un archivo presente en el disco duro, o bien un objeto de memoria compartida u otro tipo de recurso al que el sistema operativo puede referirse por medio del descriptor de archivo. Una vez disponible esta correlación entre el archivo y el espacio de memoria, las aplicaciones pueden gestionar el acceso a ese recurso exactamente igual que si se tratara de memoria primaria.

Ventajas

La principal ventaja de un archivo proyectado en memoria es aumentar las prestaciones de lectura y escritura, especialmente cuando se utilizan archivos de un tamaño reducido.[cita requerida] Acceder a archivos de mapa de memoria es más rápido que usar operaciones de lectura / escritura por dos motivos. En primer lugar, una llamada del sistema es varios órdenes de magnitud más lenta que un simple cambio en la memoria local del programa; en segundo lugar, en la mayoría de sistemas operativos la región de memoria proyectada es, de hecho, la caché de página (caché de archivo), lo que implica que no se necesitan copias en el espacio de usuario.

Algunas operaciones de archivos proyectados en memoria dentro de las aplicaciones presentan también ventajas de rendimiento con respecto a sus variantes sobre archivos físicos. Las aplicaciones pueden acceder y actualizar los datos en el archivo directamente, en lugar de buscar desde el comienzo del archivo o reescribir el contenido modificado en un lugar transitorio. Dado que el archivo proyectado en memoria se maneja de forma interna en páginas, el acceso lineal de archivos (como por ejemplo en el caso de almacenamiento de datos en el modelo de tabla o archivos de configuración) requiere acceso de disco sólo cuando se cruza una nueva frontera, y puede escribir secciones mayores del archivo en el disco en una única operación.

Un posible beneficio de los archivos proyectados en memoria es la "carga vaga", utilizando por tanto pequeñas cantidades de RAM incluso para un archivo de tamaño grande. Tratar de cargar el contenido completo de un archivo que es significativamente más grande que la cantidad de memoria disponible puede provocar una hiperpaginación severa cuando el sistema operativo lee desde el disco en la memoria y, simultáneamente, escribe páginas de memoria al disco. La proyección en memoria permite no sólo evitar completamente el archivo de página, sino también que el sistema únicamente requiera cargar secciones de paginación de menor tamaño cuando se editan los datos, un concepto similar a la paginación por demanda utilizada en los programas.

El proceso de proyección en memoria lo ejecuta el administrador virtual de memoria, el mismo subsistema responsable de la paginación de memoria. Los archivos proyectados en memoria cargan en la memoria una paginación completa de una vez. El tamaño de la paginación es determinado por el sistema operativo para conseguir un rendimiento óptimo. Dado que la administración de archivos de páginas es uno de los elementos más críticos de un sistema de memoria virtual, cargar secciones del tamaño de una página en memoria física es normalmente una función de sistema altamente optimizada.[1]

Desventajas

La razón principal para utilizar archivos proyectados en memoria para la lectura y escritura es la mejora en rendimiento, aunque pueden darse situaciones de compromiso. El planteamiento convencional de lectura y escritura de datos es costoso debido a los excesos de llamadas a funciones del sistema y las operaciones de copia de memoria. La estrategia de proyección en memoria tiene su punto débil en la aparición de fallos de página menores, que pueden ocurrir cuando un bloque de datos se ha cargado en la caché de paginación, pero aún no está cargado en el espacio de memoria virtual del proceso. En determinadas circunstancias, la lectura y escritura de archivos proyectados en memoria puede ser considerablemente más lenta que la lectura y escritura convencional de archivos.[2]

Otra desventaja de los archivos proyectados en memoria está relacionada con el espacio de direcciones de ciertas arquitecturas: un archivo de tamaño mayor que el espacio direccionable solo puede proyectarse en memoria por trozos, lo cual complica su lectura. Un ejemplo de esto se da en una arquitectura de 32 bits como la IA-32 de Intel, que solo puede establecer direcciones en memoria para un máximo de 4 GiB del tamaño del archivo. Esta desventaja desaparece en aquellos dispositivos dotados de una unidad de gestión de memoria de lectura y escritura de datos (IOMMU, input/output memory management unit en inglés).

Usos típicos

Tal vez la aplicación más habitual de los archivos proyectados en memoria sea el cargador de procesos de la mayor parte de los sistemas operativos modernos, como Microsoft Windows y los sistemas de tipo Unix. Al iniciarse un proceso, el sistema operativo proyecta sobre la memoria el contenido del archivo ejecutable, junto con los demás módulos o bibliotecas dinámicas de los que dependa para su ejecución. La mayoría de los sistemas de proyección en memoria utilizan una técnica denominada paginación por demanda, mediante la cual el archivo se va cargando en la memoria física a trozos, de página en página, y solo cada vez que se requiere el acceso a una página concreta.[3]​ En el caso concreto de los archivos ejecutables, esto permite al sistema operativo cargar de manera selectiva solamente aquellas porciones de la imagen del proceso que se van a ejecutar.

Otro uso típico de los archivos proyectados en memoria consiste en hacer que procesos diferentes puedan compartir un área de memoria común. En los sistemas operativos modernos de modo protegido, cada proceso no puede acceder al espacio de memoria asignado a otros procesos. Hay varias estrategias disponibles para compartir memoria con seguridad y el uso de archivos proyectados en memoria es una de ellas. Para ello, dos procesos (que pueden ser dos programas diferentes o dos instancias de un mismo programa), acceden a un archivo conocido por ambos que cada uno de los procesos proyecta sobre su respectivo espacio de memoria, de modo que cada proceso puede ir leyendo en su espacio de memoria las modificaciones que haya llevado a cabo el otro proceso. Por ejemplo, el sistema operativo Microsoft Windows proporciona un mecanismo para que las aplicaciones proyecten en memoria un segmento compartido del archivo de paginación del sistema, con lo que varios programas pueden compartir datos accediendo a ese segmento.

Disponibilidad por plataforma

La mayor parte de los sistemas operativos y entornos de ejecución modernos proporcionan algún tipo de acceso a archivos proyectados en memoria. En la especificación POSIX, existe la función en lenguaje C mmap(),[4]​ que crea un mapa o proyección de archivo a partir de tres parámetros: un descriptor de archivo, una posición dentro del archivo y una longitud de los datos. Al tratarse de una función POSIX, está disponible en todos los sistemas compatibles POSIX, tales como UNIX, Linux, Mac OS X y OpenVMS. En la biblioteca de programación de Microsoft para Windows, el API Win32, existe también un conjunto de funciones en C para gestionar archivos proyectados en memoria, como CreateFileMapping().[5]

Las bibliotecas Boost en lenguaje C++ proporcionan clases fachada que encapsulan una implementación interna en términos de POSIX y API de Windows que permiten el uso del mismo código fuente para múltiples plataformas.[6]

El lenguaje Java proporciona también clases para gestionar archivos proyectados en memoria, como FileChannel.

En el lenguaje Ruby, la gema o biblioteca Mmap es la que permite gestionar este tipo de proyecciones en memoria.

El lenguaje Python incorpora desde la versión 1.6 un módulo mmap en su biblioteca estándar,[7]​ cuyas particularidades varían ligeramente entre Windows y los sistemas de tipo Unix.

Para Perl, existen varios módulos disponibles en la red CPAN que permiten utilizar archivos proyectados en memoria, tales como Sys::Mmap[8]​ y File::Map.[9]

La plataforma Microsoft .NET proporciona de manera nativa acceso gestionado a archivos proyectados en memoria a partir de la versión 4 de su Common Language Runtime. En versiones anteriores, existían bibliotecas externas para ello.[10]

PHP proporciona funcionalidad de archivos proyectados en memoria a través de varias funciones nativas de acceso a archivos como, por ejemplo, file_get_contents().[11]

Referencias

  1. http://msdn2.microsoft.com/en-us/library/ms810613.aspx, What Do Memory-Mapped Files Have to Offer?.
  2. http://lists.freebsd.org/pipermail/freebsd-questions/2004-June/050371.html, read vs. mmap (or io vs. page faults). Mensaje en la lista de correo de freebsd.org de Matthew Dillon (en inglés).
  3. http://www.linux-tutorial.info/modules.php?name=Tutorial&pageid=89, Demand Paging (en inglés).
  4. Memory Mapped Files (en inglés)
  5. http://msdn2.microsoft.com/en-us/library/aa366537.aspx CreateFileMapping Function (Windows) (en inglés)
  6. http://www.boost.org/doc/libs/1_40_0/libs/iostreams/doc/classes/mapped_file.html
  7. . Archivado desde el original el 30 de diciembre de 2006. Consultado el 23 de diciembre de 2008. 
  8. «Sys::Mmap Perl Module». 
  9. «File::Map Perl Module». 
  10. . Archivado desde el original el 19 de abril de 2010. Consultado el 19 de octubre de 2009.  DotNet
  11. http://www.php.net/manual/es/function.file-get-contents.php

Enlaces externos

  •   Datos: Q657179

archivo, proyectado, memoria, archivo, proyectado, memoria, inglés, memory, mapped, file, veces, traducido, también, como, archivo, mapeado, memoria, archivo, memoria, mapeada, informática, porción, memoria, virtual, establece, correlación, directa, byte, byte. Un archivo proyectado en memoria en ingles memory mapped file a veces traducido tambien como archivo mapeado en memoria o archivo de memoria mapeada es en informatica una porcion de memoria virtual en la que se establece una correlacion directa byte a byte con una parte de un archivo o un recurso similar Este recurso es normalmente un archivo presente en el disco duro o bien un objeto de memoria compartida u otro tipo de recurso al que el sistema operativo puede referirse por medio del descriptor de archivo Una vez disponible esta correlacion entre el archivo y el espacio de memoria las aplicaciones pueden gestionar el acceso a ese recurso exactamente igual que si se tratara de memoria primaria Indice 1 Ventajas 2 Desventajas 3 Usos tipicos 4 Disponibilidad por plataforma 5 Referencias 6 Enlaces externosVentajas EditarLa principal ventaja de un archivo proyectado en memoria es aumentar las prestaciones de lectura y escritura especialmente cuando se utilizan archivos de un tamano reducido cita requerida Acceder a archivos de mapa de memoria es mas rapido que usar operaciones de lectura escritura por dos motivos En primer lugar una llamada del sistema es varios ordenes de magnitud mas lenta que un simple cambio en la memoria local del programa en segundo lugar en la mayoria de sistemas operativos la region de memoria proyectada es de hecho la cache de pagina cache de archivo lo que implica que no se necesitan copias en el espacio de usuario Algunas operaciones de archivos proyectados en memoria dentro de las aplicaciones presentan tambien ventajas de rendimiento con respecto a sus variantes sobre archivos fisicos Las aplicaciones pueden acceder y actualizar los datos en el archivo directamente en lugar de buscar desde el comienzo del archivo o reescribir el contenido modificado en un lugar transitorio Dado que el archivo proyectado en memoria se maneja de forma interna en paginas el acceso lineal de archivos como por ejemplo en el caso de almacenamiento de datos en el modelo de tabla o archivos de configuracion requiere acceso de disco solo cuando se cruza una nueva frontera y puede escribir secciones mayores del archivo en el disco en una unica operacion Un posible beneficio de los archivos proyectados en memoria es la carga vaga utilizando por tanto pequenas cantidades de RAM incluso para un archivo de tamano grande Tratar de cargar el contenido completo de un archivo que es significativamente mas grande que la cantidad de memoria disponible puede provocar una hiperpaginacion severa cuando el sistema operativo lee desde el disco en la memoria y simultaneamente escribe paginas de memoria al disco La proyeccion en memoria permite no solo evitar completamente el archivo de pagina sino tambien que el sistema unicamente requiera cargar secciones de paginacion de menor tamano cuando se editan los datos un concepto similar a la paginacion por demanda utilizada en los programas El proceso de proyeccion en memoria lo ejecuta el administrador virtual de memoria el mismo subsistema responsable de la paginacion de memoria Los archivos proyectados en memoria cargan en la memoria una paginacion completa de una vez El tamano de la paginacion es determinado por el sistema operativo para conseguir un rendimiento optimo Dado que la administracion de archivos de paginas es uno de los elementos mas criticos de un sistema de memoria virtual cargar secciones del tamano de una pagina en memoria fisica es normalmente una funcion de sistema altamente optimizada 1 Desventajas EditarLa razon principal para utilizar archivos proyectados en memoria para la lectura y escritura es la mejora en rendimiento aunque pueden darse situaciones de compromiso El planteamiento convencional de lectura y escritura de datos es costoso debido a los excesos de llamadas a funciones del sistema y las operaciones de copia de memoria La estrategia de proyeccion en memoria tiene su punto debil en la aparicion de fallos de pagina menores que pueden ocurrir cuando un bloque de datos se ha cargado en la cache de paginacion pero aun no esta cargado en el espacio de memoria virtual del proceso En determinadas circunstancias la lectura y escritura de archivos proyectados en memoria puede ser considerablemente mas lenta que la lectura y escritura convencional de archivos 2 Otra desventaja de los archivos proyectados en memoria esta relacionada con el espacio de direcciones de ciertas arquitecturas un archivo de tamano mayor que el espacio direccionable solo puede proyectarse en memoria por trozos lo cual complica su lectura Un ejemplo de esto se da en una arquitectura de 32 bits como la IA 32 de Intel que solo puede establecer direcciones en memoria para un maximo de 4 GiB del tamano del archivo Esta desventaja desaparece en aquellos dispositivos dotados de una unidad de gestion de memoria de lectura y escritura de datos IOMMU input output memory management unit en ingles Usos tipicos EditarTal vez la aplicacion mas habitual de los archivos proyectados en memoria sea el cargador de procesos de la mayor parte de los sistemas operativos modernos como Microsoft Windows y los sistemas de tipo Unix Al iniciarse un proceso el sistema operativo proyecta sobre la memoria el contenido del archivo ejecutable junto con los demas modulos o bibliotecas dinamicas de los que dependa para su ejecucion La mayoria de los sistemas de proyeccion en memoria utilizan una tecnica denominada paginacion por demanda mediante la cual el archivo se va cargando en la memoria fisica a trozos de pagina en pagina y solo cada vez que se requiere el acceso a una pagina concreta 3 En el caso concreto de los archivos ejecutables esto permite al sistema operativo cargar de manera selectiva solamente aquellas porciones de la imagen del proceso que se van a ejecutar Otro uso tipico de los archivos proyectados en memoria consiste en hacer que procesos diferentes puedan compartir un area de memoria comun En los sistemas operativos modernos de modo protegido cada proceso no puede acceder al espacio de memoria asignado a otros procesos Hay varias estrategias disponibles para compartir memoria con seguridad y el uso de archivos proyectados en memoria es una de ellas Para ello dos procesos que pueden ser dos programas diferentes o dos instancias de un mismo programa acceden a un archivo conocido por ambos que cada uno de los procesos proyecta sobre su respectivo espacio de memoria de modo que cada proceso puede ir leyendo en su espacio de memoria las modificaciones que haya llevado a cabo el otro proceso Por ejemplo el sistema operativo Microsoft Windows proporciona un mecanismo para que las aplicaciones proyecten en memoria un segmento compartido del archivo de paginacion del sistema con lo que varios programas pueden compartir datos accediendo a ese segmento Disponibilidad por plataforma EditarLa mayor parte de los sistemas operativos y entornos de ejecucion modernos proporcionan algun tipo de acceso a archivos proyectados en memoria En la especificacion POSIX existe la funcion en lenguaje C mmap 4 que crea un mapa o proyeccion de archivo a partir de tres parametros un descriptor de archivo una posicion dentro del archivo y una longitud de los datos Al tratarse de una funcion POSIX esta disponible en todos los sistemas compatibles POSIX tales como UNIX Linux Mac OS X y OpenVMS En la biblioteca de programacion de Microsoft para Windows el API Win32 existe tambien un conjunto de funciones en C para gestionar archivos proyectados en memoria como CreateFileMapping 5 Las bibliotecas Boost en lenguaje C proporcionan clases fachada que encapsulan una implementacion interna en terminos de POSIX y API de Windows que permiten el uso del mismo codigo fuente para multiples plataformas 6 El lenguaje Java proporciona tambien clases para gestionar archivos proyectados en memoria como FileChannel En el lenguaje Ruby la gema o biblioteca Mmap es la que permite gestionar este tipo de proyecciones en memoria El lenguaje Python incorpora desde la version 1 6 un modulo mmap en su biblioteca estandar 7 cuyas particularidades varian ligeramente entre Windows y los sistemas de tipo Unix Para Perl existen varios modulos disponibles en la red CPAN que permiten utilizar archivos proyectados en memoria tales como Sys Mmap 8 y File Map 9 La plataforma Microsoft NET proporciona de manera nativa acceso gestionado a archivos proyectados en memoria a partir de la version 4 de su Common Language Runtime En versiones anteriores existian bibliotecas externas para ello 10 PHP proporciona funcionalidad de archivos proyectados en memoria a traves de varias funciones nativas de acceso a archivos como por ejemplo file get contents 11 Referencias Editar http msdn2 microsoft com en us library ms810613 aspx What Do Memory Mapped Files Have to Offer http lists freebsd org pipermail freebsd questions 2004 June 050371 html read vs mmap or io vs page faults Mensaje en la lista de correo de freebsd org de Matthew Dillon en ingles http www linux tutorial info modules php name Tutorial amp pageid 89 Demand Paging en ingles https web archive org web 20091007083754 http www ecst csuchico edu beej guide ipc mmap html Memory Mapped Files en ingles http msdn2 microsoft com en us library aa366537 aspx CreateFileMapping Function Windows en ingles http www boost org doc libs 1 40 0 libs iostreams doc classes mapped file html New Modules in 1 6 Archivado desde el original el 30 de diciembre de 2006 Consultado el 23 de diciembre de 2008 Sys Mmap Perl Module File Map Perl Module Copia archivada Archivado desde el original el 19 de abril de 2010 Consultado el 19 de octubre de 2009 DotNet http www php net manual es function file get contents phpEnlaces externos EditarEsta obra contiene una traduccion derivada de Memory mapped file de la Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Memory map I O in Boost Datos Q657179Obtenido de https es wikipedia org w index php title Archivo proyectado en memoria amp oldid 117434443, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos