国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    88

    文章

    11761

    瀏覽量

    219071
  • Ha-VIS preLink
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1619
  • 權重定位
    +關注

    關注

    0

    文章

    2

    瀏覽量

    1355
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    了解Mojo編程語言

    Mojo 是種由 Modular AI 公司開發的編程語言,旨在將 Python 的易用性與 C 語言的高性能相結合,特別適合人工智能(AI)、高性能計算(HPC)和系統級編程場景。以下是關于
    發表于 11-07 05:59

    了解什么是METI備案

    METI備案是指將產品信息提交給日本經濟產業省(簡稱METI)的登記程序,主要適用于在日本銷售或進口特定電子電器產品的公司。該備案是日本電氣安全管理體系的部分,與PSE認證(日本電氣用品安全法)緊密相連。
    的頭像 發表于 10-21 15:27 ?553次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>什么是METI備案

    了解什么是TELEC認證

    TELEC認證是日本針對無線電設備實施的種強制性合規認證,其全稱為「Telecom Engineering Center認證」,中文通常稱為「日本無線電設備認證」。它依據日本《無線電法》(Radio Law)實施,旨在確保所有無線設備在日本使用時不會對其他通信系統產生干擾,并能安全、穩定地工作。
    的頭像 發表于 10-13 13:49 ?560次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>什么是TELEC認證

    ALM(應用生命周期管理)解析:了解其概念、關鍵階段及Perforce ALM工具推薦

    什么是ALM(應用生命周期管理)?它遠不止是SDLC!了解其概念、關鍵階段以及如何借助Perforce ALM這類工具,實現端到端的可追溯性、加速發布并保障合規性。
    的頭像 發表于 09-19 11:03 ?1866次閱讀
    ALM(應用生命周期管理)解析:<b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>其概念、關鍵階段及Perforce ALM工具推薦

    讀懂電子制造ERP的特點

    、電子制造ERP的核心定義與行業適配性電子制造行業存在元器件品類繁雜(如電阻、芯片、傳感器等)、生產流程精密(SMT貼片、老化測試等多環節)、合規要求嚴格(如RoHS環保認證、產品追溯)等特點
    的頭像 發表于 09-16 09:46 ?654次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂電子制造ERP的<b class='flag-5'>特點</b>

    詳解單粒子效應的電荷收集

    在探討單粒子翻轉基本機理時,深入理解并掌握各類電荷收集過程及其作用機理至關重要,這些過程與機理對明確單粒子效應特征、開展相關試驗數據分析具有重要參考價值。針對上述機理,已有研究者開展了
    的頭像 發表于 09-08 09:50 ?1197次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解單粒子效應的電荷收集

    了解sbRIO板卡的使用方法

    NI 的 sbRIO 系列是款高度集成的嵌入式單板控制器,其核心特點是將實時處理器、用戶可編程FPGA和豐富的工業I/O接口三者緊密結合在塊緊湊的板卡上。
    的頭像 發表于 09-05 15:35 ?3792次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>sbRIO板卡的使用方法

    帶你了解海凌科毫米波雷達

    什么是毫米波雷達?毫米波雷達有什么特點?毫米波雷達有什么作用?海凌科有哪些系列毫米波雷達?帶你了解!毫米波的定義毫米波是指頻率在30GHz至300GHz之間、波長為1~10毫米的電
    的頭像 發表于 08-11 12:04 ?1844次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>海凌科毫米波雷達

    了解什么是 BQB 認證

    在藍牙產品快速普及的今天,無論是藍牙耳機、音箱、手表,還是智能家居、車載設備,只要你的產品宣稱使用了藍牙技術,就必須通過BQB認證。那么,BQB認證是什么?為什么它如此重要?該怎么做?本文為你
    的頭像 發表于 07-18 14:53 ?1905次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>什么是 BQB 認證

    了解微型電機及其特點

    以前看過不少關于微電機的資訊,如微電機應用、微電機原理等等,那么什么是微電機呢?目前還是有不少人對微電機不了解,很多人覺得就是小電機,實際上微電機除了體積小之外,還具有普通電機不具備的優點。微電機
    的頭像 發表于 07-17 08:46 ?1074次閱讀

    帶你了解電源測試系統的功能!

    在當今電子與電力技術飛速發展的時代,各類電子設備、電力系統以及新能源相關產品的研發、生產和維護過程中,電源測試系統扮演著至關重要的角色。本文將帶你了解源儀電子的電源測試系統的功能。
    的頭像 發表于 07-02 09:10 ?986次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>電源測試系統的功能!

    了解電壓諧波

    我們經常會聽到諧波,到底什么是諧波,怎么定義的?為什么要關注諧波?什么時候關注諧波?諧波如何計算或標準規定的諧波的算法是怎樣的?GB關于電壓諧波又是如何評估的?帶著諸多的問題,我們一起來了解
    的頭像 發表于 06-28 17:23 ?4768次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>電壓諧波

    車用鋰離子電池機理建模與并聯模組不致性研究

    車用鋰離子電池機理建模與并聯模組不致性研究
    發表于 05-16 21:02

    帶你了解工業計算機尺寸

    項艱巨的任務。本博客將指導您了解關鍵的工業計算機尺寸、使用案例。關鍵工業計算機外形要素及其使用案例、工業微型PC尺寸范圍:寬度:100毫米-180毫米深度:10
    的頭像 發表于 04-24 13:35 ?1052次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>工業計算機尺寸

    詳解半導體集成電路的失效機理

    半導體集成電路失效機理中除了與封裝有關的失效機理以外,還有與應用有關的失效機理
    的頭像 發表于 03-25 15:41 ?2215次閱讀
    詳解半導體集成電路的失效<b class='flag-5'>機理</b>