En informática , ejecutar en el lugar ( XIP ) es un método para ejecutar programas directamente desde el almacenamiento a largo plazo en lugar de copiarlo en la RAM . Es una extensión del uso de memoria compartida para reducir la cantidad total de memoria requerida.
Su efecto general es que el texto del programa no consume memoria de escritura, lo que lo guarda para datos dinámicos y que todas las instancias del programa se ejecutan desde una única copia.
Para que esto funcione, se deben cumplir varios criterios:
- El almacenamiento debe proporcionar una interfaz similar a la CPU como la memoria normal (o debe estar presente una capa adaptativa).
- Esta interfaz debe proporcionar operaciones de lectura suficientemente rápidas con un patrón de acceso aleatorio .
- El sistema de archivos , si se usa uno, necesita exponer las funciones de mapeo apropiadas.
- El programa debe estar vinculado para conocer la dirección en la que aparece el almacenamiento en el sistema o ser independiente de la posición .
- El programa no debe modificar datos dentro de la imagen cargada.
Los requisitos de almacenamiento generalmente se cumplen mediante el uso de memoria flash NOR o EEPROM , que se pueden direccionar como palabras individuales para operaciones de lectura, aunque es un poco más lento que la RAM normal del sistema en la mayoría de las configuraciones.
XIP durante la carga de arranque
Por lo general, el cargador de arranque de la primera etapa es un programa XIP que está vinculado para ejecutarse en la dirección en la que se asignan los chips flash en el encendido y contiene un programa mínimo para configurar la RAM del sistema (que depende de los componentes) se utiliza en las placas individuales y no se puede generalizar lo suficiente como para que la secuencia adecuada pueda integrarse en el hardware del procesador) y luego carga el cargador de arranque de la segunda etapa o el kernel del sistema operativo en la RAM.
Durante esta inicialización, es posible que la memoria grabable no esté disponible, por lo que todos los cálculos deben realizarse dentro de los registros del procesador. Por esta razón, los cargadores de arranque de la primera etapa tienden a estar escritos en lenguaje ensamblador y solo hacen lo mínimo para proporcionar un entorno de ejecución normal para el siguiente programa. Algunos procesadores incorporan una pequeña cantidad de SRAM en el propio chip, [1] o permiten usar la memoria caché integrada como RAM, [2] para hacer que este cargador de arranque de primera etapa sea más fácil de escribir usando un lenguaje de alto nivel.
Para un kernel o cargador de arranque, el espacio de direcciones generalmente se asigna internamente, por lo que para usar XIP para ellos, es suficiente indicar al vinculador que coloque datos no modificables y modificables en diferentes rangos de direcciones y proporcionar un mecanismo para que los datos modificables se copien a la memoria grabable antes de ejecutar cualquier código que asuma que se puede acceder a los datos normalmente. Esto se puede hacer como parte de la etapa anterior o dentro de un pequeño segmento de código al comienzo del programa.
Si el espacio de direcciones se asigna externamente, como en un programa de aplicación que se ejecuta en un sistema que no proporciona memoria virtual , el compilador necesita acceder a todos los datos modificables agregando un desplazamiento a un puntero a una copia privada del área de datos. En este caso, el cargador externo es responsable de configurar las áreas de memoria específicas de la instancia.
BIOS y UEFI usan XIP para inicializar la memoria principal .
XIP como sistema de archivos
XIP coloca requisitos en los sistemas de archivos que a menudo son difíciles de cumplir. En los sistemas sin una tabla de páginas , todo el archivo se debe almacenar en bytes consecutivos y no debe ser fragmentado, mientras que los sistemas de archivos basados en flash suelen tener como finalidad distribuir los datos en los sectores de la viruta de destello que tienen los ciclos de menos de borrado y aun fuera del desgaste de el chip, prolongando su vida útil.
Todas estas complicaciones y la compensación de velocidad significan que XIP generalmente solo se usa para cargadores de arranque de primera etapa o cuando la RAM es extremadamente escasa. En particular, las consolas de videojuegos de segunda a cuarta generación conectan la dirección del cartucho ROM y el bus de datos a la de la consola, [3] lo que permite (por ejemplo) que el Atari 2600 funcione con solo 128 bytes de RAM en su interfaz de joystick. IC .
Un sistema de archivos relativamente nuevo para Linux, llamado AXFS ( Advanced XIP File System ), tiene como objetivo superar algunas de las deficiencias asociadas con XIP, especialmente en lo que respecta a la ejecución in situ de aplicaciones de espacio de usuario . Hace posible, por ejemplo, dividir un archivo binario ejecutable en "regiones XIP", evitando así la restricción de fragmentación que se mencionó anteriormente.
También se está desarrollando una implementación de NetBSD . [4]
Ver también
Referencias
- ^ Samsung S3C2416X tiene SRAM integrado de 64kB disponible en el bus del sistema
- ^ Broadcom BCM2835 usa su caché de nivel 2 como RAM del cargador de arranque antes de que se inicialice la SDRAM
- ^ Patente de EE. UU . 4485457A , Richard K. Balaska, Robert L. Hunter y Scott S. Robinson, "Sistema de memoria que incluye RAM y ROM de página intercambiable", expedida el 27 de noviembre de 1984, asignada a CBS Inc.
- ↑ Uebayashi, Masao (5 de abril de 2010). "Soporte eXecute-In-Place (XIP) para NetBSD" (PDF) . BSDCan .
enlaces externos
- Bird, Tim R. (2004). "Métodos para mejorar el tiempo de arranque en Linux" (PDF) . Simposio de Ottawa Linux .
- Hulbert, Jared (2008). "Presentación del sistema de archivos XIP avanzado" (PDF) . Simposio de Ottawa Linux .
- Wilshire, Phil (28 de agosto de 2002). "Resumen de eXecute In Place (XIP)" . uCdot . Archivado desde el original el 20 de octubre de 2007 . Consultado el 25 de septiembre de 2007 .
- Wellhöfer, Sören (17 de septiembre de 2009). "Aplicación eXecute-In-Place (XIP) con Linux y AXFS" . Consultado el 17 de septiembre de 2009 .
- "Configurar Linux para XIP (ejecución en el lugar) en PowerPC" . Ingeniería de Software DENX.
- "Kernel XIP" . Wiki de Linux integrado .
- "Aplicación Linux XIP" . Wiki de Linux integrado .
- "Ejecutar en el lugar controlador del sistema de archivos - xip2fs" . Linux para S / 390 .