在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文了解Prelink的特點和機理

如意 ? 來源:CSDN ? 作者:CaspianSea ? 2020-06-20 11:54 ? 次閱讀

一、What is Prelink?

1.1 Prelink 簡介

Prelink 是 Red Hat 開發者 Jakub Jelinek 所設計的工具。正如其名字所示,Prelink 利用事先鏈接代替運行時鏈接的方法來加速共享庫的加載。它不僅可以加快起動速度,還可以減少部分內存開銷,是各種 Linux 架構上用于減少程序加載時間、縮短系統啟動時間和加快應用程序啟動的很受歡迎的一個工具。

Linux 系統運行時的動態鏈接尤其是重定位 (Relocation) 的開銷,對于大型系統來說是很大的。相比之下,早期 UNIX 下的 a.out 格式的老式鏈接方法在速度和占用內存方面有明顯的優勢(但不如ELF格式更靈活,能方便的構建動態共享庫)。Prelink 工具是試圖在保持一部分靈活性的基礎上,借鑒 a.out 格式在速度和占用內存方面的優點,對 ELF 文件進行一些改進。

Prelink 工具的原理主要基于這樣一個事實:動態鏈接和加載的過程開銷很大,并且在大多數的系統上,函數庫并不會常常被更動,每次程序被執行時所進行的鏈接動作都是完全相同的,對于嵌入式系統來說尤其如此。因此,這一過程可以改在運行時之前就可以預先處理好,即花一些時間利用 Prelink 工具對動態共享庫和可執行文件進行處理,修改這些二進制文件并加入相應的重定位等信息,節約了本來在程序啟動時的比較耗時的查詢函數地址等工作,這樣可以減少程序啟動的時間,同時也減少了內存的耗用。

Prelink 的這種做法當然也有代價:每次更新動態共享庫時,相關的可執行文件都需要重新執行一遍 Prelink 才能保證有效,因為新的共享庫中的符號信息、地址等很可能與原來的已經不同了。這種代價對于嵌入式系統的開發者來說可能稍微帶來一些復雜度,不過好在對用戶來說幾乎是可以忽略的。

很多 Linux 發行版上已經預裝了或者已經使用了 Prelink 工具,不過我們需要適用于嵌入式平臺,比如 ARM 的版本,這樣我們需要到下載 Prelink 的源代碼并重新編譯。

1.2 Prelink 機理

從我們最熟悉的 hello world 程序開始分析:

#include 《stdio.h》

int main(int argc, const char* argv[]) {

printf(“Hello, World!\n”);

return 0;

}

我們知道,printf 是在 c語言運行庫 libc 中定義的。如果不使用動態庫,也就是使用glibc 的靜態庫版本,鏈接到 a.out 中的話,那么 printf 函數的地址在運行之前就是已知的,很簡單的一句地址轉移就可以完成了。

可是使用動態庫的話,在程序編譯階段,我們是無法得知 printf 的函數地址,因為動態庫的加載的內存地址是隨機的。那么對于動態庫的情況,針對 printf 是如何尋址的呢?

在程序啟動時,當調用 printf 的時候,程序會將處理權交給 loader,由其負責在進程以及其鏈接的動態庫中查找 printf 的函數地址。由于 loader 不知道 printf 是在哪個動態庫,所以它將在整個進程和動態庫的范圍內查找。更糟糕的是在 C++ 程序中,符號的命名是類名+函數名,這導致在做字符串比較時,往往直到字符串的結尾才能獲得結果。

這就導致了,在進程啟動過程中,符號查找往往占據了大部分時間。據統計,在 Linux 的 KDE 進程中啟動過程中,符號查找表竟占據了進程啟動 80% 的時間。有沒有辦法來改進呢?

如果進程在運行前,就能獲知動態庫的加載地址,那么函數調用的地址就應該是已知的,我們就可以通過修改執行程序,來避免符號的查找。從而節省進程啟動的時間。

實際上 Prelink 正是這么做的。Prelink 最早是在 Redhat 中引用的,用來加速 KDE 的啟動速度。那時侯 Prelink 作為系統的一個進程,不定期的啟動,對系統中的進程和動態庫進行優化,這在系統中進程和動態庫不怎么變化的情況下非常有用。

在做 Prelink 時,需要為其指定需要做 Prelink 的進程和動態庫的目錄。Prelink 需要做以下幾件事情:

分析所有的進程和動態庫,為每個動態庫指定一塊唯一的(虛擬)內存地址;

分析進程和動態庫中,所有需要重定位的函數、全局變量等,用 loader 進行符號查找,對齊地址進行解析;

修改進程中和動態庫的二進制文件;

眾所周知,在 32 位 Linux 操作系統上有 4G 的地址空間,3G 以上為操作系統使用,0000000~4000000 歸進程的代碼段、數據段和堆段使用,從 3G 往下歸棧段使用。基本上我們可以認為從 1G~3G 的地址空間可以用來指定動態庫的加載地址,地址空間還是很豐富的。

凡事總有萬一,如果地址空間不夠怎么辦呢?Prelink 關于這個問題,做了兩個約定:

總是一同出現的動態庫,其動態庫的加載地址一定不能重疊;

總是不同時間段出現的動態庫,其動態庫的加載地址可以重疊;

有了這兩個約定之后,基本上就可以保證,為每個動態庫指定加載地址,從而在運行前就能獲知函數和全局變量等符號的地址。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11329

    瀏覽量

    209968
  • Ha-VIS preLink
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1592
  • 權重定位
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1297
收藏 人收藏

    評論

    相關推薦

    了解Highcharts

    標題 描述圖表的文本。通常位于圖表的頂部。 系列 圖表上顯示的個或多個數據序列。 提示框 將鼠標懸停在圖表上的序列或點上時,您可以獲得描述圖表特定部分中的值的工具提示。 傳說 圖例在圖表中顯示數據
    的頭像 發表于 01-06 11:33 ?80次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>Highcharts

    了解Android UDP通信

    了解UDP通信協議 UDP(User Datagram Protocol,用戶數據報協議)是種無連接、不可靠的傳輸層協議。它提供簡單的數據傳輸服務,無需在發送方和接收方之間建立連接。每個UDP
    發表于 12-30 10:56

    了解高性能碳纖維的典型制造工藝及其主要特點

    盡管許多復合材料用戶會使用碳纖維,但不少人卻不了解碳纖維的制造方法,因為碳纖維生產商會對自己產品的生產方式保守秘密。每個生產商的碳纖維都與其競爭對手的產品不同,而賦予每個品牌標志性特征的加工細節則被
    的頭像 發表于 12-06 10:29 ?234次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>高性能碳纖維的典型制造工藝及其主要<b class='flag-5'>特點</b>

    了解激光測距傳感器

    來源:SonneWay 編輯:感知芯視界 Link 在工業自動化中,激光測距傳感器是最常見的傳感器之。不過,您對它真的了解嗎?本文將讓您了解
    的頭像 發表于 09-09 09:03 ?266次閱讀

    帶你了解半導體公司的各個崗位

    定的了解,能夠理解產品的技術特點,并能夠與客戶就技術問題進行溝通。2.客戶溝通,芯片公司的客戶通常是其他科技公司,比如電子產品制造商、通信設備制造商等。銷售崗位需要與這
    的頭像 發表于 08-08 16:28 ?3734次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>半導體公司的各個崗位

    了解MySQL索引機制

    的呢?起靜下心來,耐心看完這篇文章吧,干貨不啰嗦,相信你定會有所收獲。 、索引模型 模型也就是數據結構,常見的三種模型分別是哈希表、有序數組和搜索樹。 了解MySQL的朋友已經知
    的頭像 發表于 07-25 14:05 ?316次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>MySQL索引機制

    帶你了解LT8621SXE-M國產原裝芯片的特點及適用程序

    LT8621SXE-M優勢特點有: 1、SPDIF數字音頻輸出允許用戶連接音頻放大器,以獲得更好的音頻質量和控制。 2、LT8621SXE-M基于HDMI 1.4版本,具有寬范圍的自適應均衡功能,是款先進的TMDS開關,為HDMI信號重復,開關和音頻提取提供
    的頭像 發表于 07-11 10:07 ?425次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>LT8621SXE-M國產原裝芯片的<b class='flag-5'>特點</b>及適用程序

    科普 | 了解FPGA

    )、可編程邏輯塊(LC)、 完整的時鐘管理(CMT)、嵌入塊式 RAM(BRAM)、布線資源、內嵌的底層功能單元和專用硬件模塊等。 根據賽靈思披露的數據,個 LUT6 等效 1.6 個 LC,
    發表于 07-08 19:36

    帶你詳細了解工業電腦

    工業計算機或電腦專為處理復雜的工業任務而設計和制造。工業電腦采用工業級組件和堅固外殼制成,并經過嚴格的可靠性測試,在普通臺式計算機無法適應的環境中也能表現出色。工業電腦的基本特點包括:無通風口和無風
    的頭像 發表于 06-12 14:24 ?446次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你詳細<b class='flag-5'>了解</b>工業電腦

    晶閘管的失效模式與機理

    電路性能下降甚至系統癱瘓。因此,深入了解晶閘管的失效模式與機理,對于提高電路設計的可靠性具有重要意義。本文將從晶閘管的基本原理出發,詳細探討其失效模式與機理,并結合相關數字和信息進行說明。
    的頭像 發表于 05-27 15:00 ?1363次閱讀

    get面陣工業相機

    快速了解面陣工業相機
    的頭像 發表于 04-17 16:09 ?675次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>get面陣工業相機

    帶你了解NVIDIA Jetson

    計算機發展成為今天的機器有著悠久的歷史,今天看到的許多計算機都遵循類似的設計結構,至少包含CPU、GPU、內存和存儲。迄今為止,我們對計算機設計的了解大部分都是基于這些使計算機正常運行的關鍵組件
    的頭像 發表于 04-09 11:49 ?681次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>NVIDIA Jetson

    電機干貨!了解電機的原理及分類

    了解電機的原理及分類 電機是傳動及控制系統中的重要部分,目前電機應用的重點也從過去簡單的傳動向電機的速度、位置、轉矩的精確控制轉移; 電機為何能夠轉動?電機又有哪些分類?不同工作環境下需要選用
    發表于 03-12 09:35

    亥姆霍茲線圈產生的磁場有什么特點

    亥姆霍茲線圈是種具有特殊結構和磁場特點的電磁裝置,它能夠產生均勻且穩定的磁場。本文將從亥姆霍茲線圈的基本原理、結構設計、作用機理、應用領域等多個方面進行論述,以期使讀者對亥姆霍茲線圈的特點
    的頭像 發表于 03-09 09:20 ?3965次閱讀

    pcb應變測試有多重要?了解

    pcb應變測試有多重要?了解
    的頭像 發表于 02-24 16:26 ?1147次閱讀
    主站蜘蛛池模板: 久久精品亚洲精品国产色婷| 久综合| 亚洲天天看| 欧美18videosex性欧美1819| 四虎在线免费视频| 日本一区二区三区在线观看视频| 精品国产乱子伦一区| 美女视频久久| 99热99操99射| 精品免费视在线观看| 亚洲视频一区在线| 黄视频在线免费看| 性free3d| 欧美性生活一级| 狠狠色综合网| 新版天堂中文资源8在线| 欧美女同在线| 色www国产阿娇| 高颜值露脸极品在线播放| 1024你懂的国产日韩欧美| 一级a级国产不卡毛片| 99热.com| 日日噜夜夜噜| 激情玖玖| 午夜特片网| 天天干天天干天天干| 久久国产中文字幕| 免费观看片| 欧美xxxx极品流血| 日本欧美一区二区三区视频| 一级毛片黄色片| 伊人久久大香线蕉综合bd高清| 香蕉色综合| 免费看三级黄色片| 你懂的亚洲| 国产国产人免费人成成免视频| 婷婷视频网| 91aaa免费观看在线观看资源| 亚洲男人的性天堂| 亚洲成人免费看| 久久精品屋|