2017年全國計算機(jī)等級考試四級復(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)。這是計算機(jī)程序所共有的特性,它也稱為程序或數(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)入高速緩存。這樣,一邊運行程序,一邊進(jìn)行所需程序塊的調(diào)進(jìn)調(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)進(jìn)行存儲,每個段都是一個邏輯實體(logical entity),程序員需要知道并使用它。它的產(chǎn)生是與程序的模塊化直接有關(guān)的。段式管理是通過段表進(jìn)行的,它包括段號或段名、段起點、裝入位、段的長度等。此外還需要主存占用區(qū)域表、主存可用區(qū)域表。為了進(jìn)行段式管理,每道程序在系統(tǒng)中都有一個段(映象)表來存放該道程序各段裝入主存的狀況信息。段表中的每一項(對應(yīng)表中的每一行)描述該道程序一個段的基本狀況,由若干個字段提供。段名字段用于存放段的名稱,段名一般是有其邏輯意義的,也可以轉(zhuǎn)換成用段號指明。
     由于段號從0開始順序編號,正好與段表中的行號對應(yīng),如2段必是段表中的第3行,這樣,段表中就可不設(shè)段號(名)字段。裝入位字段用來指示該段是否已經(jīng)調(diào)入主存,“1”表示已裝入,“0”表示未裝入。在程序的執(zhí)行過程中,各段的裝入位隨該段是否活躍而動態(tài)變化。當(dāng)裝入位為“1”時,地址字段用于表示該段裝入主存中起始(絕對)地址,當(dāng)裝入位為“0”時,則無效(有時機(jī)器用它表示該段在輔存中的起始地址)。段長字段指明該段的大小,一般以字?jǐn)?shù)或字節(jié)數(shù)為單位,取決于所用的編址方式。段長字段是用來判斷所訪問的地址是否越出段界的界限保護(hù)檢查用的。訪問方式字段用來標(biāo)記該段允許的訪問方式,如只讀、可寫、只能執(zhí)行等,以提供段的訪問方式保護(hù)。除此之外,段表中還可以根據(jù)需要設(shè)置其它的字段。段表本身也是一個段,一般常駐在主存中,也可以存在輔存中,需要時再調(diào)入主存。假設(shè)系統(tǒng)在主存中最多可同時有N道程序,可設(shè)N個段表基址寄存器。對應(yīng)于每道程序,由基號(程序號)指明使用哪個段表基址寄存器。段表基址寄存器中的段表基址字段指向該道程序的段表在主存中的起始地址。段表長度字段指明該道程序所用段表的行數(shù),即程序的段數(shù)。由系統(tǒng)賦給某道程序(用戶、進(jìn)程)一個基號,并在調(diào)入調(diào)出過程中對有關(guān)段表基址寄存器和段表的內(nèi)容進(jìn)行記錄和修改,所以這些都不用用戶程序員來管。
     某道活躍的程序在執(zhí)行過程中產(chǎn)生的指令或操作數(shù)地址只要與基號組合成系統(tǒng)的程序地址,即可通過查表自動轉(zhuǎn)換成主存的物理地址。下圖示意性地表示了這一地址變換的過程。分段方法能使大程序分模塊編制,從而可以多個程序員并行編程,縮短編程時間,在執(zhí)行或編譯過程中對不斷變化的可變長段也便于處理。
     各個段的修改、增添并不影響其它各段的編制,各用戶以段的連接形成的程序空間可以與主存的實際容量無關(guān)。分段還便于幾道程序共用已在主存內(nèi)的程序和數(shù)據(jù),如編譯程序、各種子程序、各種數(shù)據(jù)和裝入程序等。不必在主存中重復(fù)存儲,只需把它們按段存儲,并在幾道程序的段表中有公用段的名稱及同樣的基址值即可。由于各段是按其邏輯特點組合的,容易以段為單位實現(xiàn)存儲保護(hù)。例如,可以安排成常數(shù)段只能讀不能寫;操作數(shù)段只能讀或?qū)?,不能作為指令?zhí)行;子程序段只能執(zhí)行,不能修改;有的過程段只能執(zhí)行,不能讀也不能寫,如此等等。一旦違反規(guī)定就中斷,這對發(fā)現(xiàn)程序設(shè)計錯誤和非法使用是很有用的。段式管理的虛擬存儲器由于各個段的長度完全取決于段自身,當(dāng)然不會恰好如下圖那樣是1K的整數(shù)倍,段在主存中的起點也會是隨意的,這就給高效地調(diào)入段分配主存區(qū)域帶來困難。為了進(jìn)行段式管理,除了系統(tǒng)需要為每道程序分別設(shè)置段映象表外,還得由操作系統(tǒng)為整個主存系統(tǒng)建立一個實主存管理表,它包括占用區(qū)域表和可用區(qū)域表兩部分。占用區(qū)域表的每一項(行)用來指明主存中哪些區(qū)域已被占用,被哪道程序的哪個段占用以及該段在主存的起點和長度。此外,還可以設(shè)置諸如該段是否進(jìn)入主存后被改寫過的字段,以便該段由主存中釋放時,決定是否還要將其寫回到輔存中原先的位置來減少輔助操作??捎脜^(qū)域表的每一項(行)則指明每一個未被占用的基地址和區(qū)域大小。當(dāng)一個段從輔存裝入主存時,操作系統(tǒng)就在占用區(qū)域表中增加一項,并修改可用區(qū)域表。而當(dāng)一個段從主存中退出時,就將其在占用區(qū)域表的項(行)移入可用區(qū)域表中,并進(jìn)行有關(guān)它是否可與其它可用區(qū)歸并的處理,修改可用區(qū)域表。當(dāng)某道程序全部執(zhí)行結(jié)束或者是被優(yōu)先級更高的程序所取代時,也應(yīng)將該道程序的全部段的項從占用區(qū)域表移入可用區(qū)域表并作相應(yīng)的處理。