全國計算機等級考試四級復(fù)習(xí)綱要七[5]

字號:

三、存儲體系
     (一) 存儲層次的形成及評價
     1.存儲層次的形成
     由于速度快的存儲器價格貴,容量就不能做得太大;而價格低的存儲器容量可能做得很大,但它的存取速度卻比較慢。因此,在綜合考慮容量、速度、價格的基礎(chǔ)上,人們建立了能滿足系統(tǒng)對存儲器在性能與價格兩方面要求的存儲組合,稱為存儲層次(memory hierarchy)。存儲層次由若干層組成,高層存儲器更小、更快、每字節(jié)價格也更貴,低層存儲器則更大、更慢、價格也更便宜,任何相鄰兩層之間的關(guān)系都是如此。此外,高層的數(shù)據(jù)都是低層數(shù)據(jù)的子集,也就是說所有的數(shù)據(jù)都能在最底層中找到。
     2.存儲體系的依據(jù)
     實現(xiàn)存儲體系的依據(jù)是局部性原理。我們已經(jīng)知道有兩種類型的局部性:時間局部性是指當(dāng)前訪問的項目在最近的將來還會訪問;空間局部性是指某地址附近的內(nèi)容可能會被一起訪問。這就是說,在主存儲器內(nèi),順序執(zhí)行的程序和數(shù)據(jù)往往在一段時間內(nèi)集中分布在某個局部或者在同一時刻內(nèi)出現(xiàn)在鄰近的區(qū)域內(nèi)。這是計算機程序所共有的特性,它也稱為程序或數(shù)據(jù)的局部性,或稱訪問的局部性。這種局部性乃是存儲器邏輯地址可預(yù)測性的基礎(chǔ),也是多級存儲體系能成功運行的依據(jù)。尤其是為實現(xiàn)Cache提供了理論根據(jù),即在某一段時間內(nèi),可以集中訪問小容量的Cache,而且,當(dāng)Cache需要從主存讀取信息時,不是只讀一條指令或一個數(shù)據(jù),而是把該單元所在的主存的某一局部區(qū)域的內(nèi)容都讀入Cache。來源:www.examda.com
     (二) 虛擬存儲的原理
     1.虛擬存儲的管理方式
     虛擬存儲(virtual memory)技術(shù)的概念是:把很大的程序分成許多較小的塊,全部存儲在輔存中。運行時,把要用到的程序塊先調(diào)入主存,并且把馬上就要用到的程序塊從主存再調(diào)入高速緩存。這樣,一邊運行程序,一邊進行所需程序塊的調(diào)進調(diào)出。只要及時供應(yīng)上所需處理的程序與數(shù)據(jù),程序就能順利而高速地運行下去。因此,對于應(yīng)用程序員來說就好像有一個比實際主存大得多的,可以放得下整個程序的虛擬主存空間。當(dāng)輔存中的程序塊調(diào)入主存時,必須使程序在主存中定位。為了使應(yīng)用程序員對其程序不同修改就可以在虛擬存儲器上運行,即應(yīng)用程序員不用考慮如何把程序地址映象和變換成實際主存的物理地址,這種程序的定位應(yīng)由系統(tǒng)自動完成,從而使虛存技術(shù)對于應(yīng)用程序員來說是透明的。這種定位技術(shù)是把程序分成若干較小的段或頁,用相應(yīng)的映象表來指明該程序的某段或某頁是否已經(jīng)裝入主存。若已裝入主存,則應(yīng)同時指明它在主存的起始位置;若尚未裝入主存,則去輔存中調(diào)用相應(yīng)的段或頁,并建立起程序空間和實存空間的地址映象關(guān)系。由于采用的存儲映象算法不同,就形成不同的存儲管理方式,常用的有段式管理、頁式管理以及段頁式管理。
     段式管理(segmentation)把一個程序分成若干個段(segment)進行存儲,每個段都是一個邏輯實體(logical entity),程序員需要知道并使用它。它的產(chǎn)生是與程序的模塊化直接有關(guān)的。段式管理是通過段表進行的,它包括段號或段名、段起點、裝入位、段的長度等。此外還需要主存占用區(qū)域表、主存可用區(qū)域表。為了進行段式管理,每道程序在系統(tǒng)中都有一個段(映象)表來存放該道程序各段裝入主存的狀況信息。段表中的每一項(對應(yīng)表中的每一行)描述該道程序一個段的基本狀況,由若干個字段提供。段名字段用于存放段的名稱,段名一般是有其邏輯意義的,也可以轉(zhuǎn)換成用段號指明。來源:www.examda.com
     由于段號從0開始順序編號,正好與段表中的行號對應(yīng),如2段必是段表中的第3行,這樣,段表中就可不設(shè)段號(名)字段。裝入位字段用來指示該段是否已經(jīng)調(diào)入主存,“1”表示已裝入,“0”表示未裝入。在程序的執(zhí)行過程中,各段的裝入位隨該段是否活躍而動態(tài)變化。當(dāng)裝入位為“1”時,地址字段用于表示該段裝入主存中起始(絕對)地址,當(dāng)裝入位為“0”時,則無效(有時機器用它表示該段在輔存中的起始地址)。段長字段指明該段的大小,一般以字?jǐn)?shù)或字節(jié)數(shù)為單位,取決于所用的編址方式。段長字段是用來判斷所訪問的地址是否越出段界的界限保護檢查用的。訪問方式字段用來標(biāo)記該段允許的訪問方式,如只讀、可寫、只能執(zhí)行等,以提供段的訪問方式保護。除此之外,段表中還可以根據(jù)需要設(shè)置其它的字段。段表本身也是一個段,一般常駐在主存中,也可以存在輔存中,需要時再調(diào)入主存。假設(shè)系統(tǒng)在主存中最多可同時有N道程序,可設(shè)N個段表基址寄存器。對應(yīng)于每道程序,由基號(程序號)指明使用哪個段表基址寄存器。段表基址寄存器中的段表基址字段指向該道程序的段表在主存中的起始地址。段表長度字段指明該道程序所用段表的行數(shù),即程序的段數(shù)。由系統(tǒng)賦給某道程序(用戶、進程)一個基號,并在調(diào)入調(diào)出過程中對有關(guān)段表基址寄存器和段表的內(nèi)容進行記錄和修改,所以這些都不用用戶程序員來管。