第4章 4-1程序編譯連接

存儲部件的層次

主存:保存進(jìn)程運(yùn)行時(shí)的程序和數(shù)據(jù)

寄存器:速度最快,價(jià)格昂貴容量不大,一般以字為單位,只要存放指令一次操作的數(shù)據(jù)就夠了 。

高速緩存

一種速度比內(nèi)存快的存儲設(shè)備,一般同寄存器一樣集成在CPU中。

存放內(nèi)存的部分拷貝,把常用的數(shù)據(jù)放這里可以提高速度。

將短時(shí)間內(nèi)經(jīng)常訪問的部分?jǐn)?shù)據(jù)從內(nèi)存放到高速緩存中,減少CPU訪問內(nèi)存的時(shí)間,是基于程序局部性。

高速緩存一般不能被程序直接更改,而由硬件自己處理對內(nèi)存數(shù)據(jù)的拷貝。

總之:速度快、存放部分內(nèi)存數(shù)據(jù)、硬件自動處理

磁盤緩存

內(nèi)存的一部分,將頻繁使用的一部分磁盤數(shù)據(jù)信息預(yù)讀入在磁盤緩存,減少磁盤讀寫時(shí)間。

存儲器管理

容量雖不斷擴(kuò)充,仍不能滿足現(xiàn)代軟件和用戶的需要,是一種寶貴、緊俏的資源;

多層次處理,協(xié)調(diào)CPU與存儲設(shè)備的速度差距;

重點(diǎn)是內(nèi)存管理,對其有效的管理直接影響存儲器的利用率、系統(tǒng)性能。

????存儲器資源的分配和回收

????地址變換(邏輯地址與物理地址的對應(yīng)關(guān)系維護(hù))

????存儲共享和保護(hù)

????虛擬存儲的調(diào)度算法

外存的管理:磁盤存儲器管理、文件系統(tǒng)等中涉及。

1、程序的裝入和鏈接

????多道程序環(huán)境下,程序運(yùn)行必須為之先建立進(jìn)程。

????創(chuàng)建進(jìn)程的第一件事:將程序和數(shù)據(jù)裝入內(nèi)存。

程序進(jìn)內(nèi)存的一般過程:

? ? ①編譯compiler:編譯程序:將用戶源代碼編譯成若干個(gè)目標(biāo)模塊。

? ? ②鏈接link:鏈接程序:將形成的一組目標(biāo)模塊,及它們需要的庫函數(shù)鏈接在一起,形成一個(gè)完整的裝入模塊。

? ? ③裝入load:由裝入程序?qū)⒀b入模塊裝入內(nèi)存,構(gòu)造PCB,形成進(jìn)程,開始運(yùn)行(使用物理地址)。

1)地址的概念

????邏輯地址(相對地址,虛地址)

????????用戶的程序經(jīng)過匯編或編譯后形成目標(biāo)代碼,目標(biāo)代碼中的指令地址是相對地址。

????????????一般首地址為0,其余指令中的地址都相對于首地址來編址。

????????????不能用邏輯地址在內(nèi)存中讀取信息

????物理地址(絕對地址,實(shí)地址)

????????內(nèi)存中存儲單元的地址。

????????物理地址可直接尋址被執(zhí)行。

????地址映射:

????????將用戶程序中的邏輯地址轉(zhuǎn)換為運(yùn)行時(shí)由機(jī)器直接尋址的內(nèi)存物理地址的過程。

????????即:用戶的第10字節(jié)處的指令在內(nèi)存的第多少地址上。

程序鏈接、裝入過程圍繞著地址的處理

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

邏輯地址 ====== 物理地址:

????①絕對裝入方式(absolute loading)

邏輯地址->重定位->物理地址:

? ? ②靜態(tài)可重定位裝入方式(relocatable loading mode)

????③動態(tài)運(yùn)行時(shí)(重定位)裝入方式(dynamic run-time loading)

① 絕對裝入方式

????編譯程序生成的“目標(biāo)代碼”就是”裝入模塊” ,邏輯地址直接從某個(gè)地址R處增長,裝入模塊直接裝入內(nèi)存地址R處。

物理地址由誰生成?

????一般由編譯或匯編程序給出;

????或由程序員賦予(要求程序員熟悉內(nèi)存使用情況)

優(yōu)點(diǎn):裝入過程簡單。不需任何地址變換,程序中的邏輯地址與實(shí)際內(nèi)存物理地址完全相同。

缺點(diǎn):過于依賴硬件結(jié)構(gòu), 只適用早期針對硬件直接編程、單道環(huán)境下。

現(xiàn)在程序裝入一般都要從邏輯地址映射到物理地址:

重定位:把目標(biāo)程序中的指令和數(shù)據(jù)的邏輯地址變成內(nèi)存中的物理地址的地址變換過程。

②靜態(tài)可重定位裝入

靜態(tài)可重定位裝入方式

????地址映射在程序執(zhí)行之前進(jìn)行,重定位后物理地址不再改變。

????可由專門設(shè)計(jì)的重定位裝配程序完成(軟):裝入時(shí)根據(jù)所定位的內(nèi)存地址去修改每個(gè)邏輯地址,添加相應(yīng)偏移量,重定位為物理地址。

優(yōu)點(diǎn):不需硬件支持,可以裝入有限的多道程序

缺點(diǎn):軟件裝入一次完成,一個(gè)程序通常需要占用連續(xù)的內(nèi)存空間,程序裝入內(nèi)存后不能移動。也不易實(shí)現(xiàn)共享。

③動態(tài)運(yùn)行時(shí)(重定位)裝入方式

動態(tài)運(yùn)行時(shí)(重定位)裝入方式(dynamic run-time loading)

????實(shí)際運(yùn)行中往往會需要程序在內(nèi)存中的各位置移動,即經(jīng)常需要重定位到不同的物理地址上。這種運(yùn)行時(shí)移動程序要求地址變換要快速,實(shí)現(xiàn)時(shí)一般依靠硬件地址變換機(jī)構(gòu)——一個(gè)重定位寄存器。

????程序裝入內(nèi)存時(shí),可多次重定位到不同位置。且可以不立即把裝入模塊中的相對地址轉(zhuǎn)換為絕對地址,而是把這種地址轉(zhuǎn)換推遲到程序真正要執(zhí)行時(shí)才進(jìn)行。

????更適用于部分裝入

裝入完了如何記錄下進(jìn)程在內(nèi)存哪里?

????程序作為整體連續(xù)裝在一塊內(nèi)存的,記錄下基地址即可。

????程序離散裝入在不同內(nèi)存位置的,需記錄下多個(gè)偏移用的基地址(后面內(nèi)存分配里詳細(xì)討論);

????動態(tài)重定位的,這些被記錄的基地址不一定固定不變,可能會根據(jù)內(nèi)存使用情況變化更新。

3)不同的程序鏈接方式

????裝入是使用內(nèi)存的開始,但鏈接的不同會使內(nèi)存的使用有差別:

????根據(jù)鏈接時(shí)間的不同,分成三種:

? ? ? ? ①靜態(tài)鏈接:裝入運(yùn)行前將多個(gè)目標(biāo)模塊及所需庫函數(shù)鏈接成一個(gè)整體,以后不再拆開。

????????????????????????????????裝入運(yùn)行前,生成可執(zhí)行文件時(shí)進(jìn)行的。

????????????????????????????????將多個(gè)目標(biāo)模塊及所需庫函數(shù)鏈接成一個(gè)整體,以后不再拆開。

? ? ? ? ②裝入時(shí)動態(tài)鏈接:裝入內(nèi)存時(shí),邊裝入邊鏈接的鏈接方式。

????????????由一個(gè)目標(biāo)模塊開始裝入,若又涉及外部模塊調(diào)用事件,裝入程序再找出相應(yīng)的外部目標(biāo)模 ? 塊,并將它裝入內(nèi)存,還要修改目標(biāo)模塊中的相對地址。

????????????比靜態(tài)鏈接好在哪里?

????????????????(1) 靜態(tài)鏈接好的程序,修改部分模塊后,需重新鏈接成可裝入程序。動態(tài)方式則便于修改和更新。

????????????????(2) 便于實(shí)現(xiàn)共享。靜態(tài)的N個(gè)程序都需要一個(gè)模塊時(shí),需要進(jìn)行N次拷貝。

? ? ? ? ③運(yùn)行時(shí)動態(tài)鏈接:對某些目標(biāo)模塊的鏈接,在執(zhí)行中需要該目標(biāo)模塊時(shí),才對它進(jìn)行鏈接。

????????????????裝入時(shí)動態(tài)鏈接的問題

????????????????????許多情況下,事先不知道某應(yīng)用程序本次運(yùn)行需要哪些模塊,只能全部裝入,裝入時(shí)全部鏈接在一起,效率低。

????????????????辦法:有的模塊不經(jīng)常使用就暫時(shí)不裝入,運(yùn)行時(shí)用到了再裝入。(如程序總不出錯(cuò),就不會用到錯(cuò)誤處理模塊。)即運(yùn)行時(shí)動態(tài)鏈接:運(yùn)行時(shí),將對某些模塊的鏈接推遲到執(zhí)行時(shí)才鏈接裝入。

????????????????優(yōu)點(diǎn):程序運(yùn)行裝入的內(nèi)容少了,加快了裝入過程,而且節(jié)省大量的內(nèi)存空間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容