91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文了解Prelink的特點(diǎn)和機(jī)理

如意 ? 來源:CSDN ? 作者:CaspianSea ? 2020-06-20 11:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、What is Prelink?

1.1 Prelink 簡(jiǎn)介

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

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

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

Prelink 的這種做法當(dāng)然也有代價(jià):每次更新動(dòng)態(tài)共享庫時(shí),相關(guān)的可執(zhí)行文件都需要重新執(zhí)行一遍 Prelink 才能保證有效,因?yàn)樾碌墓蚕韼熘械姆?hào)信息、地址等很可能與原來的已經(jīng)不同了。這種代價(jià)對(duì)于嵌入式系統(tǒng)的開發(fā)者來說可能稍微帶來一些復(fù)雜度,不過好在對(duì)用戶來說幾乎是可以忽略的。

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

1.2 Prelink 機(jī)理

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

#include 《stdio.h》

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

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

return 0;

}

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

可是使用動(dòng)態(tài)庫的話,在程序編譯階段,我們是無法得知 printf 的函數(shù)地址,因?yàn)閯?dòng)態(tài)庫的加載的內(nèi)存地址是隨機(jī)的。那么對(duì)于動(dòng)態(tài)庫的情況,針對(duì) printf 是如何尋址的呢?

在程序啟動(dòng)時(shí),當(dāng)調(diào)用 printf 的時(shí)候,程序會(huì)將處理權(quán)交給 loader,由其負(fù)責(zé)在進(jìn)程以及其鏈接的動(dòng)態(tài)庫中查找 printf 的函數(shù)地址。由于 loader 不知道 printf 是在哪個(gè)動(dòng)態(tài)庫,所以它將在整個(gè)進(jìn)程和動(dòng)態(tài)庫的范圍內(nèi)查找。更糟糕的是在 C++ 程序中,符號(hào)的命名是類名+函數(shù)名,這導(dǎo)致在做字符串比較時(shí),往往直到字符串的結(jié)尾才能獲得結(jié)果。

這就導(dǎo)致了,在進(jìn)程啟動(dòng)過程中,符號(hào)查找往往占據(jù)了大部分時(shí)間。據(jù)統(tǒng)計(jì),在 Linux 的 KDE 進(jìn)程中啟動(dòng)過程中,符號(hào)查找表竟占據(jù)了進(jìn)程啟動(dòng) 80% 的時(shí)間。有沒有辦法來改進(jìn)呢?

如果進(jìn)程在運(yùn)行前,就能獲知?jiǎng)討B(tài)庫的加載地址,那么函數(shù)調(diào)用的地址就應(yīng)該是已知的,我們就可以通過修改執(zhí)行程序,來避免符號(hào)的查找。從而節(jié)省進(jìn)程啟動(dòng)的時(shí)間。

實(shí)際上 Prelink 正是這么做的。Prelink 最早是在 Redhat 中引用的,用來加速 KDE 的啟動(dòng)速度。那時(shí)侯 Prelink 作為系統(tǒng)的一個(gè)進(jìn)程,不定期的啟動(dòng),對(duì)系統(tǒng)中的進(jìn)程和動(dòng)態(tài)庫進(jìn)行優(yōu)化,這在系統(tǒng)中進(jìn)程和動(dòng)態(tài)庫不怎么變化的情況下非常有用。

在做 Prelink 時(shí),需要為其指定需要做 Prelink 的進(jìn)程和動(dòng)態(tài)庫的目錄。Prelink 需要做以下幾件事情:

分析所有的進(jìn)程和動(dòng)態(tài)庫,為每個(gè)動(dòng)態(tài)庫指定一塊唯一的(虛擬)內(nèi)存地址;

分析進(jìn)程和動(dòng)態(tài)庫中,所有需要重定位的函數(shù)、全局變量等,用 loader 進(jìn)行符號(hào)查找,對(duì)齊地址進(jìn)行解析;

修改進(jìn)程中和動(dòng)態(tài)庫的二進(jìn)制文件;

眾所周知,在 32 位 Linux 操作系統(tǒng)上有 4G 的地址空間,3G 以上為操作系統(tǒng)使用,0000000~4000000 歸進(jìn)程的代碼段、數(shù)據(jù)段和堆段使用,從 3G 往下歸棧段使用?;旧衔覀兛梢哉J(rèn)為從 1G~3G 的地址空間可以用來指定動(dòng)態(tài)庫的加載地址,地址空間還是很豐富的。

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

總是一同出現(xiàn)的動(dòng)態(tài)庫,其動(dòng)態(tài)庫的加載地址一定不能重疊;

總是不同時(shí)間段出現(xiàn)的動(dòng)態(tài)庫,其動(dòng)態(tài)庫的加載地址可以重疊;

有了這兩個(gè)約定之后,基本上就可以保證,為每個(gè)動(dòng)態(tài)庫指定加載地址,從而在運(yùn)行前就能獲知函數(shù)和全局變量等符號(hào)的地址。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11770

    瀏覽量

    219110
  • Ha-VIS preLink
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1619
  • 權(quán)重定位
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    帶你了解鹵素

    成員在我們的工業(yè)生產(chǎn)和日常生活中扮演著復(fù)雜的角色:它們既能帶來便利,也可能埋下環(huán)境和健康的隱患。鹵素家族的成員們有個(gè)共同的特點(diǎn):它們的外層電子都是七個(gè),這讓它們
    的頭像 發(fā)表于 03-09 15:42 ?55次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>鹵素

    了解Mojo編程語言

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

    了解什么是METI備案

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

    了解什么是TELEC認(rèn)證

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

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

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

    讀懂電子制造ERP的特點(diǎn)

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

    詳解單粒子效應(yīng)的電荷收集

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

    了解sbRIO板卡的使用方法

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

    帶你了解海凌科毫米波雷達(dá)

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

    了解什么是 BQB 認(rèn)證

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

    了解微型電機(jī)及其特點(diǎn)

    以前看過不少關(guān)于微電機(jī)的資訊,如微電機(jī)應(yīng)用、微電機(jī)原理等等,那么什么是微電機(jī)呢?目前還是有不少人對(duì)微電機(jī)不了解,很多人覺得就是小電機(jī),實(shí)際上微電機(jī)除了體積小之外,還具有普通電機(jī)不具備的優(yōu)點(diǎn)。微電機(jī)
    的頭像 發(fā)表于 07-17 08:46 ?1083次閱讀

    了解電壓諧波

    我們經(jīng)常會(huì)聽到諧波,到底什么是諧波,怎么定義的?為什么要關(guān)注諧波?什么時(shí)候關(guān)注諧波?諧波如何計(jì)算或標(biāo)準(zhǔn)規(guī)定的諧波的算法是怎樣的?GB關(guān)于電壓諧波又是如何評(píng)估的?帶著諸多的問題,我們一起來了解。
    的頭像 發(fā)表于 06-28 17:23 ?4798次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>電壓諧波

    車用鋰離子電池機(jī)理建模與并聯(lián)模組不致性研究

    車用鋰離子電池機(jī)理建模與并聯(lián)模組不致性研究
    發(fā)表于 05-16 21:02

    帶你了解工業(yè)計(jì)算機(jī)尺寸

    項(xiàng)艱巨的任務(wù)。本博客將指導(dǎo)您了解關(guān)鍵的工業(yè)計(jì)算機(jī)尺寸、使用案例。關(guān)鍵工業(yè)計(jì)算機(jī)外形要素及其使用案例、工業(yè)微型PC尺寸范圍:寬度:100毫米-180毫米深度:10
    的頭像 發(fā)表于 04-24 13:35 ?1063次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>了解</b>工業(yè)計(jì)算機(jī)尺寸

    詳解半導(dǎo)體集成電路的失效機(jī)理

    半導(dǎo)體集成電路失效機(jī)理中除了與封裝有關(guān)的失效機(jī)理以外,還有與應(yīng)用有關(guān)的失效機(jī)理。
    的頭像 發(fā)表于 03-25 15:41 ?2253次閱讀
    詳解半導(dǎo)體集成電路的失效<b class='flag-5'>機(jī)理</b>