Top Banner
© 2007 台台台台台台台台 (Pearson Education Taiwan) 3 3 台 台台台台台台台 台 台台台台台台台
56

第 3 章 載入器和連結器

Jan 25, 2016

Download

Documents

annis@

第 3 章 載入器和連結器. 載入( loading ):將目的程式置入記憶體中以便執行。 重定址( relocation ):調整目的程式,以便在不同的位址上,重新載入目的程式(參見第 2.2.2 節)。 連結( linking ):將兩個或多個目的程式合併在一起,並且提供目的程式之間相互參考的資訊(參見第 2.3.5 節)。. 三項處理程序. 3.1.1 節討論「絕對載入器」( absolute loader ) 3.1.2 節介紹用於 SIC/XE 的簡易「絕對載入器」的範例. 3.1 載入器的基本功能. 不需要執行連結和重定址的功能 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

第第 33 章 載入器和連結器章 載入器和連結器

Page 2: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

載入( loading ):將目的程式置入記憶體中以便執行。

重定址( relocation ):調整目的程式,以便在不同的位址上,重新載入目的程式(參見第 2.2.2 節)。

連結( linking ):將兩個或多個目的程式合併在一起,並且提供目的程式之間相互參考的資訊(參見第 2.3.5 節)。

Page 3: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

3.1.1 節討論「絕對載入器」( absolute loader )

3.1.2 節介紹用於 SIC/XE 的簡易「絕對載入器」的範例

Page 4: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

不需要執行連結和重定址的功能 首先測試表頭記錄,來驗證是否載入正確的程

式(並且有足夠的記憶體) 當讀取每一筆「文字記錄」( Text record )

時,會將該記錄中的目的碼移到所指定的記憶體位址上

當讀取到「結束記錄」( End record )時,載入器將會跳到所示之位址,並且開始執行所載入的程式。

Page 5: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 6: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 7: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 8: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

「啟動載入器」會載入電腦首先必須執行的程式,通常就是作業系統

圖 3.3 展示「啟動載入器」的原始碼。開機的起始運作位址是在機器之記憶體的位址 0處,而作業系統的載入位址是始於位址 80 處。

「啟動程式」( bootstrap )的主要迴圈會將下一個載入位址存放在 X 暫存器中

GETC 則是從 F1 裝置讀入和轉換一對字元

Page 9: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 10: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

3.2.1 節將討論不同的實作技術和使用的情境 3.2.2 節是從載入器的觀點,來觀察「程式連

結」 3.2.3 節將討論一個典型連結載入器(和重定

址)的資料結構

Page 11: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

可以為程式重新定址的載入器,稱之為「重定址載入器」或「相對載入器」

使用修正記錄來描述當程式進行重定址時,其目的碼所需修改的部份

在組譯後的程式中,只有第 15 、 35 和 65行的延伸格式指令包含實際位址。

Page 12: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 13: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 14: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

重定址位元匯集起來形成的「位元遮罩」( bit mask ),是跟隨在文字記錄裡的「長度指示」( length indicator )之後。

有些電腦提供「硬體重定址」( hardware relocation )的功能,以減輕載入器在執行重定址上的一些工作負擔。

Page 15: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 16: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 17: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

程式之間外部引用( external reference ) 重定址與連結之間的關係 在第一個程式( PROGA )中, REF1 僅僅是

引用到程式中的一個標籤( label )。 REF2 引用標記的處理方式也是類似。 REF3 是一個立即運算元( immediate

operand ),其值是 ENDA 和 LISTA 的差

Page 18: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 19: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 20: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 21: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 22: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 23: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 24: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 25: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 26: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

採用修正記錄( Modification records )來處理重定址,以使連結和重定址的功能皆是運用相同的機制。

連結載入器的主要資料結構是一個 ESTAB 的外部符號表,用於儲存控制段之外部符號的名稱和位址。

Page 27: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

控制區段 符號名稱 位址 長度

PROGA LISTAENDA

400040404054

0063

PROGB LISTBENDB

406340C340D3

007F

PROGC LISTCENDC

40E241124124

0051

Page 28: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 29: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 30: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 31: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 32: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 33: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

3.3.1 節將討論外部引用之「自動化函式庫」( automatic library )的搜尋程序

3.3.2 節展示一些載入和連結時的共同選項

Page 34: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

許多連結載入器可以自動地將「副程式函式庫」( subroutine library )中的程式,合併到載入的程式當中。

支援「自動函式庫搜尋」的連結載入器必須在其輸入檔案中,追蹤並未定義的外部符號

一個簡單的方式,是將「引用記錄」( Refer record )中並未出現於符號表的符號,登錄到符號表( ESTAB )中,並註記這些是尚未定義的符號。當遇到其定義時,則在符號表中填入該符號的位址。

Page 35: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

在一些系統上,「工作控制語言」( job control language )的選項是由作業系統來處理。

INCLUDE program-name(library-name) 指示載入器從函式庫中讀取所選定的目的程式

DELETE csect-name 可以指示載入器,由載入的程式中刪除特定名稱的控制區段。

CHANGE name 1, name2 可以將目的程式中的外部符號,由 name1更改為 name2 。

LIBRARY MYLIB 通常在「標準系統函式庫」之前,會進行此類「使用者指定

的函式庫」的搜尋。

Page 36: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

3.4.1 節將討論「連結編輯器」,它在許多電腦系統中可以取代或結合「連結載入器」。

3.4.2 節介紹「動態連結」,它是運用於首次呼叫副程式時,利用作業系統的機制來載入和連結副程式。

3.4.3 節將討論「開機載入器」

Page 37: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

執行所有的連結和重定址的動作,包含自動函式庫的搜尋(如有指定),和載入已連結的程式到記憶體中以供執行。

如果一個程式需要執行許多次,而不想每次都重新組譯時,使用「連結編輯器」可以降低所需進行的工作。

假如事前可以知道程式之載入的實際位址,「連結編輯器」就可以執行所有的重定址動作。

Page 38: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 39: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

INCLUDE PLANNER(PROGLIB) DELETE PROJECT {DELETE 從現行的

PLANNER} INCLUDE PROJECT(NEWLIB) {INCLUDE 新版

本 ) REPLACE PLANNER(PROGLIB)

Page 40: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

INCLUDE READR(FTNLIB) INCLUDE WRITER(FTNLIB) INCLUDE BLOCK(FTNLIB) INCLUDE DEBLOCK (FTNLIB) INCLUDE ENCODE(FTNLIB) INCLUDE DECODE(FTNLIB) . . . SAVE FTNIO(SUBLIB)

Page 41: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

動態連結( dynamic linking )、動態載入( dynamic loading )或呼叫時載入( load on call ) 延遲連結的功能,直到執行時間的方法:當副程

式首次被呼叫時,才載入並且完成連結。 通常用於多個程式共享同一個副程式或函式庫

的時候 在物件導向的系統中,動態連結經常用於引用

一些軟體的物件。

Page 42: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 43: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 44: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

當第一次載入程式時,可以明確指定絕對位址。通常這個程式是作業系統,它將佔用記憶體中的特定位址。

絕對載入器」是永遠常駐在唯讀記憶體裡( ROM )中。

利用一個內建的硬體機制(或一個非常短的ROM 程式),讀取一些設備上固定長度的記錄,將其置於記憶體的固定位置。

Page 45: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

3.5.1 MS-DOS連結器 3.5.2 SunOS連結器 3.5.3 Cray MPP連結器

Page 46: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

大部分MS-DOS 的編譯器( compiler )和組譯器(包含 MASM )可以產生目的模組,它是不可執行的機器語言程式。

MS-DOS LINK 是一種「連結編輯器」,它可以結合一個或多個目的模組,以產生一個的完整可執行程式。

Page 47: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

Page 48: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

THEADR 記錄可以指出目的模組的名稱 PUBDFF 記錄包含了一些定義於此目的模組

之外部符號的列表 SEGDEF 記錄描述目的模組中的一些區段 LEDATA 記錄包含了由原始程式所轉譯的指令

和資料 FIXUPP 記錄是用於解決外部引用

Page 49: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

第一階段所建構的符號表中,每個區段(使用LNAMES 、 SEGDEF 和 GRPDEF 記錄)和每個外部符號(使用 EXTDKF 和 PUBDEF 記錄)都會有一個對應的位址。

在第二階段中, LINK 會由目的模組中取出已轉譯的指令和資料,並在記憶體中建構一個可執行程式的影像檔。

Page 50: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

二種不同的連結器 「連結編譯器」( link-editor )

編譯一個程式,將一個或多個組譯器和編譯器所產生的目的模組,組合形成一個輸出模組

「執行時間連結器」( run-time linker ) 可以在執行時,繫結動態的可執行程式,並且分享物件。

Page 51: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

1. 重定址的目的模組( relocatable object module):可供進ㄧ步的連結編譯處理。

2. 靜態可執行的模組( static executable module):所有符號引用皆已繫結( bound ),並準備執行。

3. 動態可執行的模組( dynamic executable module ):在執行時有些符號引用尚需要繫結。

4. 分享物件( shared object ):在執行時可以提供服務,以繫結一個或多個動態可執行的模組。

Page 52: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

連結器可以決定動態可執行程式所需的分享物件,並且確保這些物件都會引入進來。此外也檢查那些分享物件,以偵測和處理其它分享物件上之任何額外的相依關係

程序呼叫( procedure call )的繫結通常是延遲到程式執行之時。在連結編輯期間,全域程序的呼叫將轉換成程序連結表的引用。

「懶惰的繫結」( lazy/binding )

Page 53: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

一個 T3E 系統中包含了大量的處理元件( PEs )。

每一個 PE 皆有其所屬的本地記憶體。此外,任何一個 PE都可以存取所有其他 PEs 的記憶體(有時候稱之為遠端記憶體)。

一個 T3E 系統通常會為ㄧ個應用程式分配數個 PEs ,稱之為一個分割( partition )

Page 54: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

假設程式中包含一個迴圈,以處理陣列中的 256 個元素。 PE0可以執行此迴圈的中註標( subscript )為 1 到 16 的部份, PE1 可以執行迴圈中註標為 17 到 32 的部份,以此類推。

Page 55: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)

當載入一個程式後,每個 PE 會取得一份程式的可執行碼、私有資料和部分的分享資料。

MPP 連結器會根據目的程式,將程式碼或資料區塊組織成為一些列表。

每個列表中的區塊都會集合在一起,並且分配給每個區塊一個位址,以及執行重定址和連結的動作。

Page 56: 第 3 章 載入器和連結器

© 2007 台灣培生教育出版 (Pearson Education Taiwan)