存儲部件的層次
主存:保存進(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)存空間。
