就地執行

維基百科,自由的百科全書

計算機科學中,就地執行,或稱片內執行(英語:Execute in placeXIP)是指CPU直接從存儲器中讀取程序代碼執行,而不用再讀到內存中。好處即是程序代碼無需佔用內存,減少內存的要求。

要求

為實現就地執行,必須滿足幾個條件:

  1. 存儲器必須提供與內存相似的接口給CPU。
  2. 該接口必須提供足夠快的讀取操作,並具有隨機訪問模式。
  3. 如有文件系統,則需要提供合適的映射功能
  4. 程序連結時需要知道存儲器的地址或地址與位置無關。
  5. 程序不能修改已加載映像中的數據。

NOR FlashEEPROM通常能滿足上述要求。

系統引導時的就地執行

通常,第一階段的引導程序是一個XIP程序,它連結時指定從flash晶片上電後的映射地址開始運行,設置系統RAM,把第二階段的引導程序或作業系統內核加載進RAM。

在這初始化期間,可寫存儲器可能不可用,所有的計算都必須在處理器寄存器中執行。因此,第一階段的引導程序通常以匯編語言編寫,提供儘量少的功能,只為下一階段程序的提供正常的執行環境。有些處理器也能通過嵌入少量SRAM[1]或允許將Cache用作RAM[2]來允許用高級語言編寫這些程序。

對於內核和引導程序,地址空間通常是內部分配的。為了使用XIP,需要指示連結程序將不可修改的數據和可修改數據放在不同的地址區間,並提供將可修改數據複製到可寫內存的機制,使得任何程序正常訪問這些數據。

如果地址空間是外部分配的,比如不提供虛擬內存的系統,編譯器需要通過向數據區域的私有副本的指針添加偏移量來訪問所有可修改的數據。在這種情況下,外部加載程序負責設置實例特定的內存區域。

主內存初始化之前,BIOSUEFI 使用 XIP技術。

作為文件系統的就地執行

文件系統的XIP通常難以滿足。在沒有頁表的系統中,整個文件必須連續存儲,不能碎片化,而基於閃存的文件系統通常會將數據分配到擦除周期最小,磨損最少的扇區,以延長生命周期。

複雜性和速度的折中意味着XIP通常僅用於第一階段引導程序或RAM極度短缺的情況。例如,第二代至第四代的視頻遊戲機如Atari 2600將ROM卡帶的地址和數據總線連接到遊戲機的地址數據總線[3],從而能在只有128位元組的RAM上。

AXFS (高級XIP文件系統,Advanced XIP File System)是Linux系統上一種較新的文件系統,旨在克服與XIP相關的,特別是在XIP用戶空間應用程式方面的某些缺點。例如,可以將可執行的二進制文件拆分為「 XIP區域」,從而避免了上面提到的碎片限制。NetBSD的實現也在開發中[4]

參見

參考

  1. ^ Samsung S3C2416X have 64kB embedded SRAM available on the system bus
  2. ^ Broadcom BCM2835 uses its Level 2 Cache as boot loader RAM before SDRAM is initialized
  3. ^ 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. 
  4. ^ Uebayashi, Masao. eXecute-In-Place (XIP) Support for NetBSD (PDF). BSDCan. 2010-04-05 [2020-09-22]. (原始內容存檔 (PDF)於2020-07-31). 

外部連結