第四章程序編譯鏈接(1)

程序裝入和鏈接
程序進內存的一般過程:

編譯compiler:編譯程序:將用戶源代碼編譯成若干個目標模塊傀顾。
鏈接link:鏈接程序:將形成的一組目標模塊,及它們需要的庫函數鏈接在一起螃征,形成一個完整的裝入模塊俊性。
裝入load:由裝入程序將裝入模塊裝入內存略步,構造PCB,形成進程定页,開始運行(使用物理地址)趟薄。
image.png

地址
程序裝入中的地址處理

絕對裝入(邏輯地址=物理地址)
靜態(tài)重定位裝入
動態(tài)運行時重定位裝入

不同程序鏈接裝入

靜態(tài)鏈接
裝入時鏈接
運行時鏈接

邏輯地址也叫相對地址虛地址

用戶的程序經過匯編或編譯后形成目標代碼,目標代碼中的指令地址是相對地址典徊。
一般首地址為0杭煎,其余指令中的地址都相對于首地址來編址恩够。
不能用邏輯地址在內存中讀取信息

物理地址也叫絕對地址實地址

內存中存儲單元的地址。
物理地址可直接尋址被執(zhí)行岔帽。

地址映射:將邏輯地址轉化為運行時由機器直接尋址的內存物理地址的過程

程序裝入地址處理

邏輯地址==物理地址
以絕對方式裝入
邏輯地址->重定位->物理地址

靜態(tài)可重定位裝入方式(relocatable loading mode)
動態(tài)運行時(重定位)裝入方式(dynamic run-time loading) 

絕對裝入方式

編譯程序生成的“目標代碼”就是”裝入模塊” 玫鸟,邏輯地址直接從某個地址R處增長,裝入模塊直接裝入內存地址R處犀勒。
物理地址由誰生成屎飘?
一般由編譯或匯編程序給出;
或由程序員賦予(要求程序員熟悉內存使用情況)
優(yōu)點:裝入過程簡單贾费。不需任何地址變換钦购,程序中的邏輯地址與實際內存物理地址完全相同。
缺點:過于依賴硬件結構, 只適用早期針對硬件直接編程褂萧、單道環(huán)境下押桃。

重定位:把目標程序中的指令和數據的邏輯地址變成內存中的物理地址的地址變換過程
靜態(tài)可重定位裝入方式

地址映射在程序執(zhí)行之前進行,重定位后物理地址不再改變导犹。
可由專門設計的重定位裝配程序完成(軟):裝入時根據所定位的內存地址去修改每個邏輯地址唱凯,添加相應偏移量,重定位為物理地址谎痢。
優(yōu)點:不需硬件支持磕昼,可以裝入有限的多道程序
缺點:軟件裝入一次完成,一個程序通常需要占用連續(xù)的內存空間节猿,程序裝入內存后不能移動票从。也不易實現共享。

動態(tài)運行時裝入方式

實際運行中往往會需要程序在內存中的各位置移動滨嘱,即經常需要重定位到不同的物理地址上峰鄙。這種運行時移動程序要求地址變換要快速,實現時一般依靠硬件地址變換機構——一個重定位寄存器太雨。
程序裝入內存時吟榴,可多次重定位到不同位置。且可以不立即把裝入模塊中的相對地址轉換為絕對地址囊扳,而是把這種地址轉換推遲到程序真正要執(zhí)行時才進行煤墙。
更適用于部分裝入

裝完了如何記錄進程內存裝在哪里?

程序作為整體連續(xù)裝在一塊內存的宪拥,記錄下基地址即可仿野。
程序離散裝入在不同內存位置的,需記錄下多個偏移用的基地址(后面內存分配里詳細討論)她君;
動態(tài)重定位的脚作,這些被記錄的基地址不一定固定不變,可能會根據內存使用情況變化更新。

不同程序鏈接方式
靜態(tài)鏈接

裝入運行前球涛,生成可執(zhí)行文件時進行的劣针。
將多個目標模塊及所需庫函數鏈接成一個整體,以后不再拆開亿扁。

裝入時動態(tài)鏈接

由一個目標模塊開始裝入捺典,若又涉及外部模塊調用事件,裝入程序再找出相應的外部目標模塊从祝,并將它裝入內存襟己,還要修改目標模塊中的相對地址。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末牍陌,一起剝皮案震驚了整個濱河市擎浴,隨后出現的幾起案子,更是在濱河造成了極大的恐慌毒涧,老刑警劉巖贮预,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異契讲,居然都是意外死亡仿吞,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門捡偏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唤冈,“玉大人,你說我怎么就攤上這事霹琼∥癜粒” “怎么了凉当?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵枣申,是天一觀的道長。 經常有香客問我看杭,道長忠藤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任楼雹,我火速辦了婚禮模孩,結果婚禮上,老公的妹妹穿的比我還像新娘贮缅。我一直安慰自己榨咐,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布谴供。 她就那樣靜靜地躺著块茁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上数焊,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天永淌,我揣著相機與錄音,去河邊找鬼佩耳。 笑死遂蛀,一個胖子當著我的面吹牛,可吹牛的內容都是我干的干厚。 我是一名探鬼主播李滴,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萍诱!你這毒婦竟也來了悬嗓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裕坊,失蹤者是張志新(化名)和其女友劉穎包竹,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體籍凝,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡周瞎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了饵蒂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声诸。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖退盯,靈堂內的尸體忽然破棺而出彼乌,到底是詐尸還是另有隱情,我是刑警寧澤渊迁,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布慰照,位于F島的核電站,受9級特大地震影響琉朽,放射性物質發(fā)生泄漏毒租。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一箱叁、第九天 我趴在偏房一處隱蔽的房頂上張望墅垮。 院中可真熱鬧,春花似錦耕漱、人聲如沸算色。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灾梦。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斥废,已是汗流浹背椒楣。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牡肉,地道東北人捧灰。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像统锤,于是被迫代替她去往敵國和親毛俏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355