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

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í)鏈接的方法來加速共享庫(kù)的加載。它不僅可以加快起動(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)共享庫(kù))。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ù)庫(kù)并不會(huì)常常被更動(dòng),每次程序被執(zhí)行時(shí)所進(jìn)行的鏈接動(dòng)作都是完全相同的,對(duì)于嵌入式系統(tǒng)來說尤其如此。因此,這一過程可以改在運(yùn)行時(shí)之前就可以預(yù)先處理好,即花一些時(shí)間利用 Prelink 工具對(duì)動(dòng)態(tài)共享庫(kù)和可執(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)共享庫(kù)時(shí),相關(guān)的可執(zhí)行文件都需要重新執(zhí)行一遍 Prelink 才能保證有效,因?yàn)樾碌墓蚕韼?kù)中的符號(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ǔ)言運(yùn)行庫(kù) libc 中定義的。如果不使用動(dòng)態(tài)庫(kù),也就是使用glibc 的靜態(tài)庫(kù)版本,鏈接到 a.out 中的話,那么 printf 函數(shù)的地址在運(yùn)行之前就是已知的,很簡(jiǎn)單的一句地址轉(zhuǎn)移就可以完成了。

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

在程序啟動(dòng)時(shí),當(dāng)調(diào)用 printf 的時(shí)候,程序會(huì)將處理權(quán)交給 loader,由其負(fù)責(zé)在進(jìn)程以及其鏈接的動(dòng)態(tài)庫(kù)中查找 printf 的函數(shù)地址。由于 loader 不知道 printf 是在哪個(gè)動(dòng)態(tài)庫(kù),所以它將在整個(gè)進(jìn)程和動(dòng)態(tài)庫(kù)的范圍內(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)庫(kù)的加載地址,那么函數(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)庫(kù)進(jìn)行優(yōu)化,這在系統(tǒng)中進(jìn)程和動(dòng)態(tài)庫(kù)不怎么變化的情況下非常有用。

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

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

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

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

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

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

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

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

有了這兩個(gè)約定之后,基本上就可以保證,為每個(gè)動(dòng)態(tài)庫(kù)指定加載地址,從而在運(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)注

    87

    文章

    11446

    瀏覽量

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

    關(guān)注

    0

    文章

    2

    瀏覽量

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

    關(guān)注

    0

    文章

    2

    瀏覽量

    1318
收藏 人收藏

    評(píng)論

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

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

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

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

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

    IGBT的導(dǎo)熱機(jī)理詳解

    影響其性能和壽命。因此,了解IGBT的導(dǎo)熱機(jī)理對(duì)于確保其長(zhǎng)期穩(wěn)定運(yùn)行至關(guān)重要。本文將詳細(xì)探討IGBT的導(dǎo)熱機(jī)理,包括熱量產(chǎn)生、傳導(dǎo)路徑、散熱材料以及熱管理策略等方面。
    的頭像 發(fā)表于 02-03 14:26 ?518次閱讀

    了解Highcharts

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

    了解Android UDP通信

    了解UDP通信協(xié)議 UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是種無連接、不可靠的傳輸層協(xié)議。它提供簡(jiǎn)單的數(shù)據(jù)傳輸服務(wù),無需在發(fā)送方和接收方之間建立連接。每個(gè)UDP
    發(fā)表于 12-30 10:56

    了解射頻功率

    。無論您是初學(xué)者還是有經(jīng)驗(yàn)的工程師,相信通過閱讀本文,您將對(duì)射頻功率有更清晰的認(rèn)識(shí),并能夠在射頻電路設(shè)計(jì)中更好地應(yīng)用和優(yōu)化。、射頻功率的定義在低頻電路中,信號(hào)的大
    的頭像 發(fā)表于 12-24 10:40 ?844次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>射頻功率

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

    盡管許多復(fù)合材料用戶會(huì)使用碳纖維,但不少人卻不了解碳纖維的制造方法,因?yàn)樘祭w維生產(chǎn)商會(huì)對(duì)自己產(chǎn)品的生產(chǎn)方式保守秘密。每個(gè)生產(chǎn)商的碳纖維都與其競(jìng)爭(zhēng)對(duì)手的產(chǎn)品不同,而賦予每個(gè)品牌標(biāo)志性特征的加工細(xì)節(jié)則被
    的頭像 發(fā)表于 12-06 10:29 ?968次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>了解</b>高性能碳纖維的典型制造工藝及其主要<b class='flag-5'>特點(diǎn)</b>

    帶你了解SCP快充協(xié)議

    SCP快充協(xié)議作為華為公司自主研發(fā)的種快充技術(shù),以其高效、安全、穩(wěn)定的特點(diǎn)贏得了廣大用戶的認(rèn)可和喜愛。隨著技術(shù)的不斷進(jìn)步和應(yīng)用場(chǎng)景的拓展,SCP快充協(xié)議將繼續(xù)在快充領(lǐng)域發(fā)揮重要作用。
    的頭像 發(fā)表于 10-27 09:19 ?2950次閱讀

    了解激光測(cè)距傳感器

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

    帶你了解半導(dǎo)體公司的各個(gè)崗位

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

    了解MySQL索引機(jī)制

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

    帶你了解LT8621SXE-M國(guó)產(chǎn)原裝芯片的特點(diǎn)及適用程序

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

    科普 | 了解FPGA

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

    帶你詳細(xì)了解工業(yè)電腦

    工業(yè)計(jì)算機(jī)或電腦專為處理復(fù)雜的工業(yè)任務(wù)而設(shè)計(jì)和制造。工業(yè)電腦采用工業(yè)級(jí)組件和堅(jiān)固外殼制成,并經(jīng)過嚴(yán)格的可靠性測(cè)試,在普通臺(tái)式計(jì)算機(jī)無法適應(yīng)的環(huán)境中也能表現(xiàn)出色。工業(yè)電腦的基本特點(diǎn)包括:無通風(fēng)口和無風(fēng)
    的頭像 發(fā)表于 06-12 14:24 ?748次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你詳細(xì)<b class='flag-5'>了解</b>工業(yè)電腦

    晶閘管的失效模式與機(jī)理

    電路性能下降甚至系統(tǒng)癱瘓。因此,深入了解晶閘管的失效模式與機(jī)理,對(duì)于提高電路設(shè)計(jì)的可靠性具有重要意義。本文將從晶閘管的基本原理出發(fā),詳細(xì)探討其失效模式與機(jī)理,并結(jié)合相關(guān)數(shù)字和信息進(jìn)行說明。
    的頭像 發(fā)表于 05-27 15:00 ?2056次閱讀
    主站蜘蛛池模板: 国产一区二区三区在线观看视频 | 91视频观看免费 | 狠狠色噜噜 | 毛片在线不卡 | 欧美性色xo影院永久禁欲 | 阿v视频在线观看免费播放 爱爱视频天天干 | 亚洲综合色丁香婷婷六月图片 | 男人天堂网在线视频 | 亚洲精品久久久久久久蜜桃 | 亚洲综合色丁香婷婷六月图片 | bt天堂网在线 | 久久国产精品久久久久久久久久 | 日本三级电影在线观看 | 久久99国产精品免费观看 | 日韩欧美中文字幕在线视频 | 91人成网站色www免费 | 中国一级特黄aa毛片大片 | 深爱激情五月婷婷 | 国产精品久久久久国产精品三级 | 乱好看的的激情伦小说 | 韩日一级毛片 | 欧洲一卡二卡乱码新区 | 国产亚洲精品aa在线观看 | 久久天天躁综合夜夜黑人鲁色 | 欧美特黄三级在线观看 | 欧洲不卡一卡2卡三卡4卡网站 | 农村妇女野外一级毛片 | 国产美女一级视频 | 中文字幕123 | 性欧美欧美之巨大69 | 黄网站色在线视频免费观看 | 亚洲一区二区在线 | 精品视频69v精品视频 | 久久综合欧美 | 日本x色视频 | 亚洲成人三级 | 欧美日韩一区视频 | 亚洲天堂va | 天天综合天天色 | 久久久久国产成人精品亚洲午夜 | 人与牲动交xxxxbbbb高清 |