就地执行
要求
为实现就地执行,必须满足几个条件:
- 存储器必须提供与内存相似的接口给CPU。
- 该接口必须提供足够快的读取操作,并具有随机访问模式。
- 如有文件系统,则需要提供合适的映射功能
- 程序链接时需要知道存储器的地址或地址与位置无关。
- 程序不能修改已加载映像中的数据。
系统引导时的就地执行
通常,第一阶段的引导程序是一个XIP程序,它链接时指定从flash芯片上电后的映射地址开始运行,设置系统RAM,把第二阶段的引导程序或操作系统内核加载进RAM。
在这初始化期间,可写存储器可能不可用,所有的计算都必须在处理器寄存器中执行。因此,第一阶段的引导程序通常以汇编语言编写,提供尽量少的功能,只为下一阶段程序的提供正常的执行环境。有些处理器也能通过嵌入少量SRAM[1]或允许将Cache用作RAM[2]来允许用高级语言编写这些程序。
对于内核和引导程序,地址空间通常是内部分配的。为了使用XIP,需要指示链接程序将不可修改的数据和可修改数据放在不同的地址区间,并提供将可修改数据复制到可写内存的机制,使得任何程序正常访问这些数据。
如果地址空间是外部分配的,比如不提供虚拟内存的系统,编译器需要通过向数据区域的私有副本的指针添加偏移量来访问所有可修改的数据。在这种情况下,外部加载程序负责设置实例特定的内存区域。
作为文件系统的就地执行
文件系统的XIP通常难以满足。在没有页表的系统中,整个文件必须连续存储,不能碎片化,而基于闪存的文件系统通常会将数据分配到擦除周期最小,磨损最少的扇区,以延长生命周期。
复杂性和速度的折中意味着XIP通常仅用于第一阶段引导程序或RAM极度短缺的情况。例如,第二代至第四代的视频游戏机如Atari 2600将ROM卡带的地址和数据总线连接到游戏机的地址和数据总线,[3],从而能在只有128字节的RAM上。
AXFS (高级XIP文件系统,Advanced XIP File System)是Linux系统上一种较新的文件系统,旨在克服与XIP相关的,特别是在XIP用户空间应用程序方面的某些缺点。例如,可以将可执行的二进制文件拆分为“ XIP区域”,从而避免了上面提到的碎片限制。NetBSD的实现也在开发中[4]
参考
- Samsung S3C2416X have 64kB embedded SRAM available on the system bus
- Broadcom BCM2835 uses its Level 2 Cache as boot loader RAM before SDRAM is initialized
- US patent 4485457A,Richard K. Balaska, Robert L. Hunter, and Scott S. Robinson,「Memory system including RAM and page switchable ROM」,发行于1984-11-27,指定于CBS Inc.
- Uebayashi, Masao. (PDF). BSDCan. 2010-04-05 [2020-09-22]. (原始内容存档 (PDF)于2020-07-31).
外部链接
- Bird, Tim R. (PDF). Ottawa Linux Symposium. 2004 [2020-09-22]. (原始内容存档 (PDF)于2020-07-31).
- Hulbert, Jared. (PDF). Ottawa Linux Symposium. 2008 [2020-09-22]. (原始内容存档 (PDF)于2020-07-31).
- Wilshire, Phil. . uCdot. 2002-08-28 [2007-09-25]. (原始内容存档于2007-10-20).
- Wellhöfer, Sören. . 2009-09-17 [2009-09-17]. (原始内容存档于2012-07-15).
- . DENX Software Engineering. [2020-09-22]. (原始内容存档于2019-09-18).
- . Embedded Linux Wiki. [2020-09-22]. (原始内容存档于2019-08-26).
- . Embedded Linux Wiki. [2020-09-22]. (原始内容存档于2017-06-11).
- . Linux for S/390. [2020-09-22]. (原始内容存档于2020-02-20).