Articulo de referencia

Ejecutar en el lugar

En informática , la ejecución en el mismo lugar ( XIP ) es un método para ejecutar programas directamente desde el almacenamiento a largo plazo en lugar de copiarlos a la RAM . ...

En informática , la ejecución en el mismo lugar ( XIP ) es un método para ejecutar programas directamente desde el almacenamiento a largo plazo en lugar de copiarlos a la RAM . Es una extensión del uso de memoria compartida para reducir la cantidad total de memoria necesaria.

Su efecto general es que el texto del programa no consume memoria modificable, reservándola para datos dinámicos, y que todas las instancias del programa se ejecutan desde una única copia.

Para que esto funcione, deben cumplirse varios criterios:

  • El sistema de almacenamiento debe proporcionar una interfaz similar a la de la memoria normal para la CPU (o debe existir 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 utiliza, debe exponer las funciones de mapeo adecuadas.
  • 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 los datos dentro de la imagen cargada.

Los requisitos de almacenamiento suelen satisfacerse mediante el uso de memoria flash NOR o EEPROM , que se puede direccionar por bytes para operaciones de lectura, aunque es un poco más lenta que la RAM del sistema normal en la mayoría de las configuraciones.

Durante el arranque

En los sistemas x86 , normalmente el gestor de arranque de primera etapa es un programa XIP que se ejecuta en la dirección donde se ubican los chips de memoria flash al encender el equipo. Contiene un programa mínimo para configurar la RAM del sistema (que depende de los componentes utilizados en cada placa y no se puede generalizar lo suficiente como para integrar la secuencia adecuada en el hardware del procesador) y, a continuación, carga el gestor de arranque de segunda etapa o el núcleo del sistema operativo en la RAM.

Durante esta inicialización, es posible que la memoria escribible 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 primera etapa suelen escribirse en lenguaje ensamblador y solo realizan lo mínimo necesario para proporcionar un entorno de ejecución normal para el siguiente programa. Algunos procesadores integran una pequeña cantidad de SRAM en el propio chip [ 1 ] o permiten usar la memoria caché integrada como RAM [ 2 ] , lo que facilita la escritura de este cargador de arranque de primera etapa mediante lenguaje de alto nivel.

Para un núcleo o un gestor de arranque, el espacio de direcciones generalmente se asigna internamente, por lo que para usar XIP, basta con indicarle al enlazador que coloque los datos modificables y no modificables en rangos de direcciones diferentes y que proporcione un mecanismo para copiar los datos modificables a memoria escribible antes de que se ejecute 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 inicio 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 sumando un desplazamiento a un puntero que apunta 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.

En los sistemas x86, normalmente la ROM BIOS / UEFI se asigna a un espacio de memoria fijo al encenderse, [ 3 ] y la BIOS/UEFI en los sistemas x86 utiliza XIP para inicializar la memoria principal . En los sistemas embebidos ARM y RISC-V, normalmente la ROM de arranque integrada en el SoC se asigna a un espacio de memoria fijo al encenderse, y la ROM de arranque puede encontrar y cargar un gestor de arranque integrado como Das U-Boot desde la memoria flash NAND , y ese proceso de arranque no utiliza un chip EEPROM dedicado.

XIP como sistema de archivos

XIP impone requisitos a los sistemas de archivos que a menudo son difíciles de cumplir. En sistemas sin tabla de páginas , el archivo completo debe almacenarse en bytes consecutivos y no debe estar fragmentado, mientras que los sistemas de archivos basados ​​en memoria flash suelen distribuir los datos en sectores del chip flash que tienen el menor número de ciclos de borrado y uniformizan el desgaste del chip, prolongando así su vida útil.

Todas estas complicaciones y la compensación de velocidad hacen que XIP generalmente solo se utilice 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 el bus de direcciones y datos del cartucho ROM al de la consola, [ 4 ] lo que permite (por ejemplo) que la Atari 2600 funcione con solo los 128 bytes de RAM en su circuito integrado de interfaz de joystick .

AXFS ( Advanced XIP File System ), un sistema de archivos relativamente nuevo para Linux , busca superar algunas de las limitaciones de XIP, especialmente en lo que respecta a la ejecución directa de aplicaciones en el espacio de usuario . Por ejemplo, permite dividir un archivo binario ejecutable en "regiones XIP", evitando así la restricción de fragmentación mencionada anteriormente.

También se está desarrollando una implementación de NetBSD . [ 5 ]

Véase también

Referencias

  1. El Samsung S3C2416X tiene 64 kB de SRAM integrada disponible en el bus del sistema.
  2. El Broadcom BCM2835 utiliza su caché de nivel 2 como RAM de cargador de arranque antes de que se inicialice la SDRAM.
  3. "¿Tío, dónde están mis 4 gigabytes de RAM?" . Coding Horror . 8 de marzo de 2007 . Consultado el 31 de agosto de 2024 .
  4. ↑ Patente estadounidense 4485457 , Richard K. Balaska, Robert L. Hunter y Scott S. Robinson, "Sistema de memoria que incluye RAM y ROM conmutable por páginas", emitida el 27 de noviembre de 1984, asignada a CBS Inc. 
  5. Uebayashi, Masao (2010-04-05). "Soporte de eXecute-In-Place (XIP) para NetBSD" (PDF) . BSDCan .
  • Bird, Tim R. (2004). "Métodos para mejorar el tiempo de arranque en Linux" (PDF) . Simposio Linux de Ottawa .
  • Hulbert, Jared (2008). "Introducción al sistema de archivos XIP avanzado" (PDF) . Simposio Linux de Ottawa .
  • Wilshire, Phil (28 de agosto de 2002). "Descripción general de eXecute In Place (XIP)" . uCdot . Archivado del original el 20 de octubre de 2007. Recuperado el 25 de septiembre de 2007 .
  • Wellhöfer, Sören (2009-09-17). "Ejecución de aplicaciones en el lugar (XIP) con Linux y AXFS" . Recuperado el 17 de septiembre de 2009 .
  • "Configurar Linux para XIP (Ejecución en el mismo lugar) en PowerPC" . Ingeniería de software de DENX.
  • "Núcleo XIP" . Wiki de Linux integrado .
  • "XIP de aplicación Linux" . Wiki de Linux embebido .
  • "Controlador de sistema de archivos de ejecución en el mismo lugar - xip2fs" . Linux para S/390 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Execute_in_place&oldid=1336575391 "