在vxworks
作業系統過程中可能使用到的
bootrom
和vxworks
核心映像本身都可以存
在兩種方式:壓縮的和非壓縮的。
1.非壓縮形式
如果沒有進行壓縮,則只有一次重定位,即從
rom到
ram只存在一次**複製過程,
所有rom
中儲存的**都被一次性複製到
ram中。
① 對於
bootrom
而言,所有的**被一次性複製到
ram_high_adrs
指定位址處,
如圖3-1
所示。
② 對於
vxworks_rom
而言,所有的**被一次性複製到
ram_low_adrs
指定位址
處,如圖
3-2
所示。
2.壓縮形式
如果有進行壓縮,則**複製過程將分為兩次,一次是非壓縮**,另一次是壓縮**,且二者複製到記憶體不同的位置處。
① 對於
bootrom
而言,非壓縮**(
rominit.s
、bootinit.c
)被直接複製到
ram_
low_adrs
處;壓縮**複製到
ram_high_adrs
處,並在複製過程中完成解壓縮,如
圖3-3
所示。
② 對於
vxworks_rom
而言,非壓縮**(
rominit.s
、bootinit.c
)被直接複製到
ram_high_adrs
處;壓縮**複製到
ram_low_adrs
處,並在複製過程中完成解壓縮,
如圖3-4
所示。
鏈結,另一次是將非壓縮**和壓縮**整合在一起時的鏈結。注意,在進行非壓縮**和
壓縮**的整合時,壓縮**部分是作為資料進入整個映像的,所以不會對其進行重新鏈結。
對壓縮**的鏈結,實際上是在**被壓縮之前完成的,完成**的鏈結後,生成特定格式
的目標檔案(如
elf
或者coff
),為了在解壓縮後可以直接執行,首先必須將其轉成二進
制可執行檔案,通過
objcopy
函式完成此項功能,此後對生成的二進位制可執行檔案呼叫
deflate
函式進行壓縮,由於需要將壓縮後的**最後整合到整個映像中,故壓縮後的檔案還需要通
過bintoasm
工具進行轉換,轉成乙個彙編原始檔,該檔案將壓縮後的二進位制**作為資料
部分進行儲存,從而避免在與非壓縮**最後進行二次鏈結時被修改。
於bootrom
,壓縮**被鏈結到了
ram_high_adrs
位址處,而對於
vxworks_rom
,則被鏈結到了
ram_low_adrs
_rominit
ram_high_adrs
,則最後整合時就為
ram_low_adrs
;如果壓縮**為
ram_low _adrs
,則整合時就為
ram_high_adrs
。
VxWorks 作業系統記憶體布局
在vxworks 作業系統過程中可能使用到的 bootrom 和vxworks 核心映像本身都可以存 在兩種方式 壓縮的和非壓縮的。1 非壓縮形式 如果沒有進行壓縮,則只有一次重定位,即從 rom到 ram只存在一次 複製過程,所有rom 中儲存的 都被一次性複製到 ram中。對於 bootrom ...
作業系統記憶體管理
作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...
作業系統記憶體管理
作業系統記憶體管理一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於 32位程序來說,這個位址空間為 4g,因此程序中的位址可以為 0x00000000 至0xffffffff 之間的任何乙個值。其中 4g空間中的低區的 2g空間留給程序使用,而高區的 2g空間則留給系統使用。在win...