XIP(eXecute In Place)

XIP(eXecuteInPlace)允许CPU直接从存储器执行程序,减少了对RAM的需求。NorFlash因其快速读取和直接执行特性适合XIP,而NandFlash由于其结构和速度限制通常不用于XIP。实现XIP需要存储器提供内存接口、快速随机访问及地址映射等条件。Bios引导程序常作为XIP应用,文件系统XIP则较为复杂,AXFS等文件系统为此进行了优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XIP(eXecute In Place)

1.什么是XIP

eXecute In Place,即芯片内执行、就地执行,是指CPU直接从存储器中读取程序代码执行,而不用再读到内存中。应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。

flash内执行是指nor flash不需要初始化,可以直接在flash内执行代码。但往往只执行部分代码,比如初始化RAM
好处即是程序代码无需占用内存,减少内存的要求。

XIP是复杂性和速度的权衡,而这就意味着XIP通常仅用于Bios或RAM极度短缺的情况。

  • 注意:片内执行不是说程序在存储器内执行!

​ Nor Flash能在芯片内执行,指的是CPU能够直接从Nor flash中取指令,供后面的译码器和执行器来使用。可以理解为:在这一时刻,Nor Flash实现了Memory的功能

2.如何实现XIP

​ 为实现就地执行,必须满足几个条件:

  1. 存储器必须提供与内存相似的接口给CPU。

  2. 该接口必须提供足够快的读取操作,并具有随机访问模式。

  3. 如有文件系统,则需要提供合适的映射功能

  4. 程序链接时需要知道存储器的地址或地址与位置无关。

  5. 程序不能修改已加载映像中的数据。

​ 因为NOR FlashEEPROM通常能满足上述要求,所以其可以XIP。

3.为什么Nor Flash可以实现XIP,Nand flash不行

3.0 注意

​ Nand只是不适合做XIP,但并不是不能做XIP。当解决下列问题时,Nand也可以实现XIP。

3.1.嵌入式中代码的执行方式:

​ 嵌入式系统中代码的执行方式主要有3种:

(1)完全映射:

嵌入式系统程序运行时,将所有代码从非易失存储器(Flash、ROM等)复制到RAM中运行。

(2)按需分页:

只复制部分代码到RAM中。

这种方法对RAM中的页进行导入/导出管理,如果访问位于虚拟内存中但不在物理RAM中会产生页错位,这时才将代码和数据映射到RAM中。

(3)XIP:

在系统启动时,不将代码复制到RAM,而是直接在非易失性存储位置执行RAM中只存放需要不断变化的数据部分

  • 如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YLryT8H-1655190620885)(11.XIP%EF%BC%88eXecute%20In%20Place%EF%BC%89.assets/image-20220606172624732.png)]

​ Nor flash和rom的读取速度为百ns级别(约100ns),比较适合XIP。
而Nand flash的读取操作是基于扇区的,速度相对很慢(us级),因此不适合实现XIP。

​ 不过Nand flash的写入速度比Nor的快,更适合做存储和下载系统。

3.2.芯片的结构不同

​ NOR flash之所以可以片内执行,就是因为他符合CPU去指令译码执行的要求。
CPU送一个地址出来,NORflash就能给一个数据让CPU执行,中间不需要额外的处理操作。

​ NAND flash不一样,是因为Nand flash有地址,数据,命令共用IO口的问题,Cpu把地址发出来之后,并不能直接得到数据,还需要控制线的操作才能完成。就是他没有专用的SRAM接口。

​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcXnxtzg-1655190620886)(11.XIP%EF%BC%88eXecute%20In%20Place%EF%BC%89.assets/image-20220606174123525.png)]

​ 这张图里的很直观。左边是普通的flash,可以理解成是Nand Flash。

CPU想要从Nand Flash中读取数据,必须:
(1)在RAM中计算地址,计算各种时序
(2)使用MMU转换地址
(3)给Nand flash发送命令,注意是命令,不是地址Nand Flash根据命令进行相应的操作
如果是读命令,则返回对应地址的数据到RAM中;如果是写命令,则进行写操作。

​ 而右边的图,是针对Nor Flash的,这个很明显,CPU可以像读内存一样,直接跟Nor flash交互(即可以直接从Nor Flash中取指令)。
取指完成后,交给译码模块和执行模块进行执行

可以说,相比较Nand flash,Nor flash的操作对于CPU来说非常简单,额外开销非常低。

3.3 其他原因

​ 一段CODE能够正确的运行,要保证它的CODE是连续(至少是逻辑连续的)且正确的。

而在读取Flash时候,容易出现位翻转(bitconvert)。NAND的出现几率要比NorFlash大得多。
这个问题在Flash存储关键文件时是致命的,所以在使用NandFlash时建议同时使用EDC/ECC等校验算法

​ 但是,如果能保证不出错,也还是可以进行XIP的。

4.系统引导时的XIP

通常来说,Bios引导程序都是一个XIP程序。它会指定 从flash芯片 power on后的映射地址开始运行。
在完成相关设置后,把后续的引导程序或操作系统内核加载进RAM。

​ 在初始化期间,可写存储器可能不可用,因此,所有的计算都必须在CPU寄存器中执行
这样一来,Bios阶段的引导程序通常都需要以汇编编写,提供尽量少的功能(只需要为下一阶段程序的提供正常的执行环境即可

当然,有些处理器也能通过嵌入少量SRAM 或者 采用CAR方式(将Cache用作RAM) 来实现初始化阶段,就可以运行高级语言程序。

5.文件系统的XIP

文件系统的XIP通常难以满足

在没有页表的系统中,整个文件必须连续存储,不能碎片化。而基于闪存的文件系统为了延长生命周期,通常会将数据分配到擦除周期最小,磨损最少的扇区。这样一来就产生了冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值