段頁(yè)式虛擬存儲(chǔ)管理_第1頁(yè)
段頁(yè)式虛擬存儲(chǔ)管理_第2頁(yè)
段頁(yè)式虛擬存儲(chǔ)管理_第3頁(yè)
段頁(yè)式虛擬存儲(chǔ)管理_第4頁(yè)
段頁(yè)式虛擬存儲(chǔ)管理_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、wordword專業(yè)資料wordword專業(yè)資料學(xué)號(hào):課程設(shè)計(jì)段頁(yè)式虛擬存儲(chǔ)管理學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)班級(jí)姓名吳利軍指導(dǎo)教師吳利軍2013年1月16日課程設(shè)計(jì)任務(wù)書學(xué)生姓名:指導(dǎo)教師:吳利軍工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院初始條件:1預(yù)備容:閱讀操作系統(tǒng)的存管理章節(jié)容,理解段頁(yè)式存儲(chǔ)管理的思想及相應(yīng)的分配主存的過程。2實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語(yǔ)言的使用。包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)1實(shí)現(xiàn)段頁(yè)式存儲(chǔ)管理中邏輯地址到物理地址的轉(zhuǎn)換。能夠處理以下的情形:能指定存的大小,存塊的大小,進(jìn)程的個(gè)數(shù),每個(gè)進(jìn)程的段數(shù)及段頁(yè)的個(gè)數(shù);

2、能檢查地址的合法性,如果合法進(jìn)行轉(zhuǎn)換,否則顯示地址非法的原因。2設(shè)計(jì)報(bào)告容應(yīng)說(shuō)明:需求分析;功能設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu)及模塊說(shuō)明);開發(fā)平臺(tái)及源程序的主要部分;測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;自我評(píng)價(jià)與總結(jié):i)你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設(shè)計(jì)得到的收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗(yàn)和教訓(xùn));iv)完成本題是否有其他方法(如果有,簡(jiǎn)要說(shuō)明該方法);時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成程序分析及設(shè)計(jì)。周2、周3:完成程序調(diào)試及測(cè)試。周4、周5:驗(yàn)收、撰寫課程設(shè)計(jì)報(bào)告(注意事項(xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),一律按(注意事項(xiàng):嚴(yán)禁抄襲,

3、一旦發(fā)現(xiàn),一律按0分記)指導(dǎo)教師簽名:系主任(或責(zé)任教師)簽名:一、需求分析:頁(yè)式管理基本原理:各個(gè)進(jìn)程的虛擬空間被劃分成若干個(gè)長(zhǎng)度相等的頁(yè)。頁(yè)長(zhǎng)的劃分和存與外存之間的數(shù)據(jù)傳輸速度及存大小等有關(guān)。一般每個(gè)頁(yè)長(zhǎng)大約為14K,經(jīng)過頁(yè)劃分之后,進(jìn)程的虛擬地址變?yōu)轫?yè)號(hào)p與頁(yè)地址w所組成。除了將進(jìn)程的虛擬空間劃分為大小相等的頁(yè)之外,頁(yè)式管理還把存空間也按頁(yè)的大小劃分為片或者頁(yè)面。這些頁(yè)面為系統(tǒng)中的任一進(jìn)程所共享。從而與分區(qū)管理不一樣,分頁(yè)管理時(shí),用戶進(jìn)程在存空間除了在每個(gè)頁(yè)面地址連續(xù)之外,每個(gè)頁(yè)面之間不再連續(xù)。第一是實(shí)現(xiàn)了存中碎片的減少,因?yàn)槿我馑槠紩?huì)小于一個(gè)頁(yè)面。第二是實(shí)現(xiàn)了由連續(xù)存儲(chǔ)到非連續(xù)存儲(chǔ)的

4、這個(gè)飛躍,為在存中局部地、動(dòng)態(tài)地存儲(chǔ)那些反復(fù)執(zhí)行或即將執(zhí)行的程序和數(shù)據(jù)段打下了基礎(chǔ)。怎樣由頁(yè)式虛擬地址轉(zhuǎn)變?yōu)榇骓?yè)面物理地址?頁(yè)式管理把頁(yè)式虛擬地址與存頁(yè)面物理地址建立一一對(duì)應(yīng)頁(yè)表,并用相應(yīng)的硬件地址變換機(jī)構(gòu),來(lái)解決離散地址變換問題。靜態(tài)頁(yè)面管理:靜態(tài)頁(yè)面管理方法是在作業(yè)或進(jìn)程開始執(zhí)行之前,把該作業(yè)或進(jìn)程的程序段和數(shù)據(jù)全部裝入存的各個(gè)頁(yè)面,并通過頁(yè)表和硬件地址變換機(jī)構(gòu)實(shí)現(xiàn)虛擬地址到存物理地址的地址映射。1、存頁(yè)面的分配與回收靜態(tài)分頁(yè)管理的第一步是為要求存的作業(yè)或進(jìn)程分配足夠的頁(yè)面。系統(tǒng)依靠存儲(chǔ)頁(yè)面表、請(qǐng)求頁(yè)面表以及頁(yè)表來(lái)完成存的分配。(1)頁(yè)表最簡(jiǎn)單的頁(yè)表由頁(yè)號(hào)與頁(yè)面號(hào)組成,頁(yè)表在存中占有一塊固

5、定的存儲(chǔ)區(qū)。頁(yè)表的大小有進(jìn)程或作業(yè)的長(zhǎng)度決定。每個(gè)進(jìn)程至少要擁有一個(gè)頁(yè)表。(2)請(qǐng)求表用來(lái)確定作業(yè)或進(jìn)程的虛擬空間的各頁(yè)在存中的實(shí)際對(duì)應(yīng)位置。系統(tǒng)必須知道每個(gè)作業(yè)或進(jìn)程的頁(yè)表起始地址和長(zhǎng)度,以進(jìn)行存的分配和地址變換,另外請(qǐng)求表中還應(yīng)包括每個(gè)作業(yè)或進(jìn)程所要求的頁(yè)面數(shù)。(3)存儲(chǔ)頁(yè)面存儲(chǔ)頁(yè)面表也是整個(gè)系統(tǒng)一,存儲(chǔ)頁(yè)面表指出存各個(gè)頁(yè)面是否已被分配出去,以及未被分配頁(yè)面總數(shù)。存儲(chǔ)頁(yè)面表也有兩種構(gòu)成方法,一種是在存中劃分一塊固定區(qū)域,每個(gè)單元的每個(gè)比特代表一個(gè)頁(yè)面,如果該頁(yè)面已被分配,則對(duì)應(yīng)比特位置置1,否則置0。另一種方法空閑頁(yè)面鏈,不占存空間。2、分配算法3、地址變換在程序執(zhí)行過程中,執(zhí)行的是虛擬空

6、間中的代碼,代碼中的指令是相對(duì)于虛擬空間的,需要到存的實(shí)際空間中尋找對(duì)應(yīng)的要執(zhí)行的指令。靜態(tài)頁(yè)式管理的缺陷:雖然解決了分區(qū)管理時(shí)的碎片問題,但是由于靜態(tài)頁(yè)式管理要求進(jìn)程或作業(yè)在執(zhí)行前全部裝入存,如果可用頁(yè)面數(shù)小于用戶要求時(shí),改作業(yè)或進(jìn)程只好等待。而且,作業(yè)或進(jìn)程的大小仍受存可用空間的限制。動(dòng)態(tài)頁(yè)式管理:動(dòng)態(tài)頁(yè)式管理是在靜態(tài)頁(yè)式管理的基礎(chǔ)上發(fā)展起來(lái)的。它分為請(qǐng)求頁(yè)式管理和與調(diào)入頁(yè)式管理(調(diào)入方式上)。請(qǐng)求頁(yè)式管理和預(yù)調(diào)入頁(yè)式管理在作業(yè)或進(jìn)程開始執(zhí)行之前都不把作業(yè)或進(jìn)程的程序段和數(shù)據(jù)段一次性的調(diào)入存,而是只裝入被認(rèn)為是經(jīng)常反復(fù)執(zhí)行和調(diào)用的工作區(qū)部分。其他部分都在執(zhí)行過程中動(dòng)態(tài)的裝入。請(qǐng)求式頁(yè)式管理

7、:當(dāng)需要執(zhí)行某條指令或某些數(shù)據(jù)時(shí)而又發(fā)現(xiàn)他不在存中時(shí),從而發(fā)生缺頁(yè)中斷,系統(tǒng)將相應(yīng)的頁(yè)面調(diào)入存。預(yù)調(diào)入:系統(tǒng)對(duì)于那些在外存中的頁(yè)進(jìn)行調(diào)入順序計(jì)算,估計(jì)出這些頁(yè)中指令和數(shù)據(jù)的執(zhí)行和被訪問的順序,并按此順序?qū)⑺麄冺槾握{(diào)入和調(diào)出存。請(qǐng)求頁(yè)式管理的地址變換與靜態(tài)頁(yè)式相同,也是通過頁(yè)表查出相應(yīng)的頁(yè)面號(hào),由頁(yè)面號(hào)與頁(yè)相對(duì)地址相加而得到實(shí)際物理地址。由于只有進(jìn)程或程序的部分存在存中因此怎樣發(fā)現(xiàn)這些不在存中的虛頁(yè)以及怎樣處理這種情況是必須解決的兩個(gè)基本問題。怎樣發(fā)現(xiàn)這些不在存中的虛頁(yè):擴(kuò)充頁(yè)表的方法。即與每個(gè)虛頁(yè)號(hào)相對(duì)應(yīng),除了頁(yè)面號(hào)之外,再增設(shè)該頁(yè)是否在存中的中斷位以及該頁(yè)在外存中的副本起始地址。(1)采用何

8、種方法將所缺的頁(yè)調(diào)入存。(2)如果存中沒有空閑頁(yè)面時(shí),把調(diào)進(jìn)來(lái)的頁(yè)面放在什么地方。即采用什么策略淘汰已占據(jù)存的頁(yè)。還有就是如果存中的也被淘汰,但該頁(yè)被修改過,顯然該頁(yè)應(yīng)當(dāng)被重新寫到外存加以保存。所以還要增加一項(xiàng)記錄是否該頁(yè)已經(jīng)被改變。常見的置換算法:(1)隨機(jī)淘汰(2)輪轉(zhuǎn)法和先進(jìn)先出法(3)最近最久未使用存保護(hù):頁(yè)式管理提供兩種方式的存保護(hù):一是:地址越界保護(hù)。二是:通過頁(yè)表控制對(duì)存信息的存取操作方式以提供保護(hù)。地址越界保護(hù):由地址變換機(jī)構(gòu)中的控制存儲(chǔ)器的值頁(yè)表長(zhǎng)度和所要訪問的虛地址相比較來(lái)完成。存取控制保護(hù)的實(shí)現(xiàn)則是在頁(yè)表中增加相應(yīng)的保護(hù)位即可。段式管理:分區(qū)式管理和頁(yè)式管理時(shí)的進(jìn)程的地址

9、空間結(jié)構(gòu)都是線性的,這要求對(duì)源程序進(jìn)行編譯連接時(shí),把源程序中的主程序、子程序、數(shù)據(jù)區(qū)等按線性空間的一維地址順序排列起來(lái)。共享子程序和數(shù)據(jù)變得很困難,再者從的角度來(lái)看,分區(qū)管理和頁(yè)式管理只能采用靜態(tài)。段式存儲(chǔ)管理是基于為用戶提供一個(gè)方便的靈活的程序設(shè)計(jì)環(huán)境而提出來(lái)的。段式管理的基本思想是:把程序按容或過程(函數(shù))關(guān)系分成段,每段都有自己的名字。一個(gè)用戶進(jìn)程或作業(yè)所包含的段對(duì)應(yīng)于一個(gè)二維線性虛擬空間,也就是二維虛擬存儲(chǔ)器。段式管理程序以段為單位分配存,然后通過地址映射機(jī)構(gòu)把段式虛擬地址轉(zhuǎn)換成實(shí)際的存物理地址。和頁(yè)式管理一樣,段式管理也采用只把那些經(jīng)常訪問的段駐留存,而把那些在將來(lái)一段時(shí)間不被訪問的

10、段放在外存,待需要時(shí)自動(dòng)調(diào)入的方法實(shí)現(xiàn)二維虛擬存儲(chǔ)器。段式管理把一個(gè)進(jìn)程的虛擬空間設(shè)計(jì)成二維結(jié)構(gòu),即段號(hào)s與段相對(duì)地址w。與頁(yè)式管理不一樣的是,頁(yè)式管理中,被劃分的頁(yè)號(hào)按順序編號(hào)遞增排列,屬一維空間,而段式管理中段號(hào)與段號(hào)之間無(wú)順序關(guān)系。另外段的劃分也不像頁(yè)的劃分那樣具有相同的頁(yè)長(zhǎng),段的長(zhǎng)度是不固定的。每個(gè)段定義一組邏輯上完整的程序或數(shù)據(jù)。例如,一個(gè)進(jìn)程中的程序和數(shù)據(jù)可劃分為主程序段、子程序段、數(shù)據(jù)段與工作區(qū)段。每個(gè)段是一個(gè)首地址為零的、連續(xù)的一維線性空間。根據(jù)需要段長(zhǎng)可以動(dòng)態(tài)的增長(zhǎng)。對(duì)端式虛擬空間地址的訪問包括兩個(gè)部分:段名和段地址。段式管理中以端為單位分配存,每段分配一個(gè)連續(xù)的存區(qū),由于各

11、段長(zhǎng)度不等,所以這些存儲(chǔ)區(qū)的大小不一,而且統(tǒng)一進(jìn)程所包含的各段之間不要求連續(xù)。段式管理的存分配與釋放在作業(yè)或進(jìn)程的執(zhí)行過程中動(dòng)態(tài)進(jìn)行。首先,段式管理程序?yàn)橐粋€(gè)準(zhǔn)備進(jìn)入存準(zhǔn)備執(zhí)行的進(jìn)程或作業(yè)分配部分存,以作為該進(jìn)程的工作區(qū)和放置即將執(zhí)行的程序段。隨著進(jìn)程的執(zhí)行,進(jìn)程根據(jù)需要隨時(shí)申請(qǐng)調(diào)入新段和釋放老段。進(jìn)程對(duì)于存區(qū)的申請(qǐng)和釋放可分為兩種情況。一種是當(dāng)進(jìn)程要求調(diào)入某一段時(shí),存中有足夠的空閑區(qū)滿足該段的存要求。另一種是存中沒有足夠的空閑區(qū)。對(duì)于第一種情況,系統(tǒng)要用相應(yīng)的表格或數(shù)據(jù)結(jié)構(gòu)來(lái)管理存空閑區(qū),以便對(duì)用戶進(jìn)程或作業(yè)的有關(guān)程序段進(jìn)行存分配和回收。事實(shí)上,可以采用和動(dòng)態(tài)分區(qū)式管理相同的空閑區(qū)管理方式。

12、即把存各空閑區(qū)按物理地址從低到高排列或按空閑區(qū)的大小從小到大或從大到小排列。與這幾種空閑區(qū)自由鏈相對(duì)應(yīng),分區(qū)式管理時(shí)所用的幾種分配算法:最先適應(yīng)算法、最佳適應(yīng)算法、最壞適應(yīng)法都可以用來(lái)進(jìn)行空閑區(qū)分配。當(dāng)然分區(qū)式存管理時(shí)用到的存回收方法也可以用在段式管理中。另一種存管理的分配與回收方法是在存中沒有足夠的空閑區(qū)滿足調(diào)入段的存時(shí)使用的。這時(shí)段式管理程序根據(jù)給定的置換算法淘汰存中在今后一段時(shí)間不再被CPU訪問的段,也就是淘汰那些訪問率最低的段。不過任何一個(gè)段的長(zhǎng)度都不允許超過存的可用區(qū)長(zhǎng)度。除了段的初始分配之外,段的動(dòng)態(tài)分配是在CPU所要訪問的指令和數(shù)據(jù)不在存時(shí)產(chǎn)生缺頁(yè)中斷的情況下發(fā)生的。因此段的淘汰

13、或置換算法實(shí)際上是缺頁(yè)中斷處理過程的一部分。段式管理的地址變換:由于段式管理只存放部分用戶信息副本在存,而大部分信息在外存中,這必然引起CPU訪問存時(shí)發(fā)成所訪問的段不在存中的情況,CPU如何感知所要訪問的段不在存中而啟動(dòng)中斷處理程序呢?還有,段式虛擬地址屬于一個(gè)二維的虛擬空間。一個(gè)二維空間虛擬地址怎樣變?yōu)橐粋€(gè)一維的線性物理地址呢。(1)段表(2)段式管理程序在進(jìn)行初始存分配之前,首先根據(jù)用戶要求的存大小為一個(gè)作業(yè)或一個(gè)進(jìn)程建立一個(gè)段表,以實(shí)現(xiàn)動(dòng)態(tài)地址變換和缺頁(yè)中斷處理及存儲(chǔ)保護(hù)等。段式管理是通過段表來(lái)進(jìn)行存管理的。(3)段號(hào)與用戶指定的段名一一對(duì)應(yīng),始址和長(zhǎng)度分別表示該段在存或外存的物理地址和

14、實(shí)際長(zhǎng)度。存取方式是用來(lái)對(duì)該段進(jìn)行存取保護(hù)的。只有處理機(jī)狀態(tài)字中的存取控制位與段表中的存取方式一致時(shí)才能訪問該段。外欄是指該段現(xiàn)在存儲(chǔ)在外存還是存中。如果如果該欄目指出所訪問段在外存的話,則發(fā)生缺頁(yè)中斷。而訪問位則是根據(jù)淘汰算法的需要而設(shè)的。(4)(5)動(dòng)態(tài)地址變換一般在存中給出一塊固定的區(qū)域放置段表。當(dāng)某進(jìn)程開始執(zhí)行的時(shí)候,管理程序首先把該進(jìn)程的段表始址放入段表地址寄存器。通過訪問段表寄存器,管理程序得到該進(jìn)程段表始址從而可以開始訪問段表。然后由虛擬地址中的段號(hào)s為索引,查段表。若該段在存中,則判斷其存取方式是否有錯(cuò)。如果存取方式正確,則從段表相應(yīng)表目中查出該段在存中的起始地址,并將其和段相

15、對(duì)地址w相加,從而得到實(shí)際存地址。如果該段不在存,則產(chǎn)生缺頁(yè)中斷將CPU控制權(quán)交給存分配程序。存分配程序首先檢查空閑區(qū)鏈,以找到足夠長(zhǎng)度的空閑區(qū)來(lái)裝入所需要的段。如果可用的空閑區(qū)總數(shù)小于所要求的段長(zhǎng),檢查段表中的訪問位,以淘汰那些訪問概率低的段并將所需要的段調(diào)入。段頁(yè)式:頁(yè)式管理和段式管理各有特長(zhǎng)。段式管理為用戶提供了一個(gè)二維的虛擬空間地址,反映了程序的邏輯結(jié)構(gòu)有利于段的動(dòng)態(tài)增長(zhǎng)以及共享和存保護(hù),方便了用戶,而分頁(yè)式管理則有效地克服了碎片問題,提高了存儲(chǔ)器的利用率。段頁(yè)式則是將段式管理與頁(yè)式管理相結(jié)合,取長(zhǎng)補(bǔ)短。段頁(yè)式管理一般只用在大型系統(tǒng)中。段頁(yè)式管理的實(shí)現(xiàn)原理:一個(gè)進(jìn)程任然擁有一個(gè)自己的二

16、維空間地址,這與段式管理相同。首先一個(gè)進(jìn)程中所包含的具有獨(dú)立邏輯功能的程序或數(shù)據(jù)仍被劃分為段,并有各自段號(hào)S。這反映了段式管理的特征。其次,對(duì)于段S中的程序或數(shù)據(jù),則按照一定的大小將其劃分為不同的頁(yè)。和頁(yè)式系統(tǒng)一樣最后不足一頁(yè)的部分仍然占一頁(yè)。這反映了頁(yè)式特征。從而段頁(yè)式管理時(shí)的進(jìn)程的虛擬空間中的虛擬地址由三部分組成即段號(hào)S,頁(yè)號(hào)p和頁(yè)相對(duì)地址d,如圖1所示:WSPd圖1程序員可見的仍是段號(hào)S和段相對(duì)地址wP和d是由地址變換機(jī)構(gòu)把w高幾位解釋成頁(yè)號(hào)P,以及把剩下的低位解釋成頁(yè)地址d。由于虛擬空間的最小單位是頁(yè)而不是段,從而存可用區(qū)也就被劃分為若干個(gè)大小相等的頁(yè)面,且每段所擁有的程序和數(shù)據(jù)在存中

17、可以分開存放。分段的大小也不受存可用區(qū)的限制。段表和頁(yè)表:為了實(shí)現(xiàn)段頁(yè)式管理,系統(tǒng)必須為每個(gè)作業(yè)或進(jìn)程建立一段表,管理存分配與釋放、缺段處理、存儲(chǔ)保護(hù)和地址變換等。另外,由于一個(gè)段又被劃分成了若干頁(yè),每個(gè)段又必須建立一頁(yè)表,把段中虛頁(yè)轉(zhuǎn)變成存中的實(shí)際頁(yè)面。顯然與頁(yè)式管理相同,頁(yè)表中也要有實(shí)現(xiàn)缺頁(yè)中斷處理和頁(yè)面保護(hù)等功能的表項(xiàng)。另外由于在段頁(yè)式管理中,頁(yè)表不再是屬于進(jìn)程而是屬于某個(gè)段,因此段表中應(yīng)該有指出該段所對(duì)應(yīng)的頁(yè)表始址和頁(yè)表長(zhǎng)度。動(dòng)態(tài)地址變換過程:在一般使用段頁(yè)式存儲(chǔ)管理的計(jì)算機(jī)系統(tǒng)中,都在存中辟出一塊固定的區(qū)域存放進(jìn)程的段表和頁(yè)表。因此,在段頁(yè)式管理系統(tǒng)中,要對(duì)存中指令或數(shù)據(jù)進(jìn)行一次存取

18、的話,至少需要訪問3次以上的存。二、功能設(shè)計(jì)定義一個(gè)數(shù)組來(lái)表示一個(gè)存空間。只做一個(gè)數(shù)組來(lái)管理存空間,應(yīng)當(dāng)能夠顯示當(dāng)前可用的存,管理存的表應(yīng)當(dāng)占據(jù)空間最小,由于是段頁(yè)式管理,所以將存劃分為頁(yè),最理想的方式是用一位來(lái)表示存的一個(gè)頁(yè)面,當(dāng)存頁(yè)面在使用時(shí),將其置為1,不使用時(shí),將其置為0,這樣存管理所占用的空間才是最小。由于使用位來(lái)管理存空間頁(yè)面在程序的處理方面比較麻煩,所以采用char類型來(lái)表示存空間的一個(gè)頁(yè)面,char類型只占一個(gè)字節(jié),并且存空間的大小是定長(zhǎng)的。所以可用存表即為:charmmemMax;/memMax表示最大的存空間設(shè)計(jì)一段表結(jié)構(gòu)體數(shù)組,由于在存空間中段表通常都是存放在存的一塊固定

19、的區(qū)域,所以段表很適合用結(jié)構(gòu)體數(shù)組來(lái)表示段式管理的段表:段號(hào)始址長(zhǎng)度存取方式外訪問位所以將段頁(yè)是管理中的段表也這樣類似設(shè)計(jì),只不過要再加一個(gè)字段表示該段所管理的頁(yè)表的起始地址,設(shè)計(jì)如下:段號(hào)始址頁(yè)表長(zhǎng)度存取方式外訪問位頁(yè)表始址tsegmentL/段表intsegNum;/段號(hào)intlength;/段長(zhǎng),即多少頁(yè)intrw;/訪存控制intioflg;/外標(biāo)識(shí)符intcount;/訪問位pageL*startAddr;頁(yè)表起始位置,pageL*:頁(yè)表類型的指針intsegmentFlag;設(shè)計(jì)頁(yè)表(結(jié)構(gòu)體數(shù)組)在設(shè)計(jì)段頁(yè)式管理的頁(yè)表的時(shí)候,他跟頁(yè)式管理的頁(yè)表很相近,頁(yè)表也是在存空間中劃分一塊固定

20、的區(qū)域,所以頁(yè)表的設(shè)計(jì)和段表有些類似,但是要簡(jiǎn)單許多,只要顯示頁(yè)號(hào)和頁(yè)面號(hào)即可。但是有一點(diǎn)區(qū)別就是,段表在存中的存放順序是非連續(xù)的、隨機(jī)的,但是頁(yè)表不同,每一個(gè)段所對(duì)應(yīng)的頁(yè)表,在存中應(yīng)當(dāng)是連續(xù)的,任意兩段所對(duì)應(yīng)的頁(yè)表的順序是非連續(xù)的。頁(yè)式管理的頁(yè)表:頁(yè)號(hào)頁(yè)面號(hào)段頁(yè)式管理的頁(yè)表:頁(yè)號(hào)頁(yè)面號(hào)頁(yè)面使用標(biāo)識(shí)符typedefstructtypedefstructpageL/頁(yè)表typedefstructtypedefstructpageL/頁(yè)表wordword專業(yè)資料wordword專業(yè)資料intpageNum;/頁(yè)號(hào)intMemPgnum;/頁(yè)面號(hào)intpageFlag;/頁(yè)表標(biāo)識(shí)符用來(lái)標(biāo)識(shí)該存是否在

21、使用中pageL;段表和頁(yè)表之間通過段表中的一個(gè)叫startAddr的指針進(jìn)行聯(lián)系,每個(gè)段的這個(gè)指針指向該段所建立的頁(yè)表,而頁(yè)表由通過它的頁(yè)面號(hào)與存聯(lián)系。他們之間相互關(guān)聯(lián)。段表和頁(yè)表在存中都是線性結(jié)構(gòu),他們的大小有固定的限制,所以在段表或者頁(yè)表被填滿的時(shí)候,要調(diào)度一定的算法進(jìn)行對(duì)頁(yè)表和者段表和存頁(yè)的置換。頁(yè)表的控制要稍微復(fù)雜一些,因?yàn)槊恳粋€(gè)段都對(duì)應(yīng)這一頁(yè)表,并且頁(yè)表的每一項(xiàng)都是連續(xù)的,還有就是頁(yè)表的長(zhǎng)度是由程序的長(zhǎng)度來(lái)決定的,而且所有的頁(yè)表在一起組成了一大頁(yè)表。段表、頁(yè)表、存之間的關(guān)系圖,如圖2:段表地址寄社:器段表長(zhǎng)度起始地址段號(hào)苴他頁(yè)表荃度段表、頁(yè)表、存之間的關(guān)系圖,如圖2:段表地址寄社:

22、器段表長(zhǎng)度起始地址段號(hào)苴他頁(yè)表荃度起鵡地址051024171029291036段表頁(yè)號(hào)苴他頁(yè)面11221932148510頁(yè)號(hào)其他蟲面1293第2段蟲表圖2三、開發(fā)平臺(tái)及源程序的主要部分:本次設(shè)計(jì)采用C+混合C語(yǔ)言編程,采用VisualStudio2010作為開發(fā)平臺(tái)。intlength;intlength;/段長(zhǎng),即多少頁(yè)wordword專業(yè)資料wordword專業(yè)資料源碼如下:#include#include#include#definememMax10240;最大存,10Musingnamespacestd;voidprspm();/*一般在存中給出一塊固定的區(qū)域放置段表*/intmem

23、Len;/存大小intpageLen;頁(yè)的大小typedefstructpageL/頁(yè)表intpageNum;/頁(yè)號(hào)intMemPgnum;/頁(yè)面號(hào)(存頁(yè)面號(hào))intpageFlag;pageL;structpageLHintlength;pageLpageList1024;pageLH;structsegmentL/段的大小與劃分不歸我管,而且段表的大小是一開始就建立好的,頁(yè)表在存中有一塊固定的存儲(chǔ)區(qū)。頁(yè)表的大小由進(jìn)程或作業(yè)的長(zhǎng)度決定intsegNum;/段號(hào)/訪存控制intrw;/訪存控制intioflg;/外標(biāo)識(shí)intioflg;/外標(biāo)識(shí)intcount;/訪問位intcount;/訪問

24、位pageL*startAddr;/起始位置pageL*startAddr;/起始位置;intsegmentFlag;/段表,因?yàn)槎伪硎枪潭ǖ拇鎱^(qū),所以直接設(shè)為數(shù)組。segPagList100;structsegmentLHintlength;segmentLsegPagList200;段表,因?yàn)槎伪硎枪潭ǖ拇鎱^(qū),所以直接設(shè)為數(shù)組。200差不多了1024頁(yè),每段5頁(yè)segmentLH;charm10240;無(wú)法使用鏈表法,char類型是一個(gè)字節(jié),節(jié)省空間,值表示頁(yè)是否被使用。intfindIdlePage()/返回找到空閑存頁(yè)的第一個(gè)位置intj=1;for(inti=0;imemLen*10

25、24/pageLen;i+)if(mi=0)mi=1;returni;j+;if(j=memLen*1024/pageLen)printf(所有的存已經(jīng)使用完了!請(qǐng)輸入數(shù)字已選擇相應(yīng)的置換算法!);inttotalIdlePage()intn=0;for(inti=0;imemLen*1024/pageLen;i+)if(mi=0)n+;returnn;intfindIdleSegAndWrite(intsegNum,intsegLen)inti;for(i=0;i200;i+)if(segmentLH.segPagListi.segmentFlag=0)segmentLH.segPagLis

26、ti.segNum=segNum;segmentLH.segPagListi.length=segLen;/段長(zhǎng),即分多少頁(yè)segmentLH.segPagListi.segmentFlag=1;wordword專業(yè)資料wordword專業(yè)資料returni;printf(段表沒有可以填寫的段!);return-1;/沒有可以填寫的段就返回-1intfindSeriesIdlePageList(intq)參數(shù)q表示需要連續(xù)空間的頁(yè)數(shù)返回值為分配數(shù)組起始標(biāo)號(hào)。intt,n=0;L1:for(t=0;tq;t+)if(pageLH.pageListn+t.pageFlag!=0)n+;if(n10

27、24-q)gotoL1;printf(沒有可用的連續(xù)頁(yè)表空間!”);for(t=0;tq;t+)/將已分配到的頁(yè)表,標(biāo)記為正在使用pageLH.pageListt+n.pageFlag=1;returnn;voidsingle()/怎樣判斷存區(qū)有沒有空閑intflag=1;intq=0;intN=0;intp;intsegNum,length;printf(請(qǐng)輸入要輸入的段的個(gè)數(shù):n);scanf(%d,&N);printf(請(qǐng)依次輸入段長(zhǎng):n);for(intz=1;z=q)/存夠分inti=findIdleSegAndWrite(z,q);/找到可以填寫的段,填寫段長(zhǎng),段號(hào)intn二fin

28、dSeriesIdlePageList(q);查找頁(yè)表尋找連續(xù)q個(gè)頁(yè)表空間,返回首地址p=p-q;在上面的函數(shù)中已經(jīng)將頁(yè)面數(shù)減過了,只是沒有反映到p中segmentLH.segPagListi.startAddr=&pageLH.pageListn;/填寫段的頁(yè)的開始地址,頁(yè)表的第n項(xiàng)for(intj=n;jq+n;j+)/填寫頁(yè)表的時(shí)候,頁(yè)表的填寫是連for(intj=n;j=q)/存夠分/inti=findIdleSegAndWrite(segNum,q);/找到可以填寫的段,填寫段長(zhǎng),段號(hào)/intn二findSeriesIdlePageList(q);查找頁(yè)表尋找連續(xù)q個(gè)頁(yè)表空間,返回首

29、地址/p=p-q;在上面的函數(shù)中已經(jīng)將頁(yè)面數(shù)減過了,只是沒有反映到p中/segmentLH.segPagListi.startAddr=&pageLH.pageListn;/填寫段的頁(yè)的開始地址,頁(yè)表的第n項(xiàng)/for(intj=n;jq+n;j+)/填寫頁(yè)表的時(shí)候,頁(yè)表的填寫是連續(xù)的/pageLH.pageListj.pageNum=j-n+1;/pageLH.pageListj.MemPgnum二findIdlePage();返回找到空閑存頁(yè)的第一個(gè)位置,并將使用位置1/printf(程序要分頁(yè):dn,q);/printf(存可用頁(yè):%dn,p);/printf(是否退出(1-繼續(xù)0-退出)

30、;/getchar();/scanf(%d,&flag);/*for(inti=0;ipageLH.length;i+)printf(%dprintf(%d-%dn,pageLH.pageListi.pageNum,pageLH.pageListi.MemPgnuprintf(%dprintf(%d-%dn,pageLH.pageListi.pageNum,pageLH.pageListi.MemPgnuwordword專業(yè)資料wordword專業(yè)資料m);*/voidmapping()ints,p,d;inti;printf(請(qǐng)輸入段號(hào),頁(yè)號(hào),頁(yè)地址:s,p,dn);scanf(%d,%d,

31、%d,&s,&p,&d);for(i=0;ip)if(d=100)printf(沒有該段!n);voidswch()intflag=1,f=0;while(flag)intn;printf(0退出0n);printf(1程序段處理1n);printf(2地址轉(zhuǎn)換2n);printf(3-顯示段頁(yè)存映射表3n);getchar();scanf(%d,&n);switch(n)case0:flag=0;break;wordword專業(yè)資料wordword專業(yè)資料case1:single();f=1;break;case2:if(f!=0)mapping();elseprintf(請(qǐng)先輸入程序段!n

32、);break;case3:if(f!=0)prspm();elseprintf(請(qǐng)先輸入程序段!n);break;default:printf(輸入有誤!n);voidprspm()printf(段頁(yè)存映射表n);printf(n);for(inti=0;i200;i+)if(segmentLH.segPagListi.segmentFlag!=0)printf(%d,segmentLH.segPagListi.segNum);/段號(hào)printf(dnsegmentLH.segPagListi.length);/段長(zhǎng)for(intj=0;jsegmentLH.segPagListi.leng

33、th;j+)/*頁(yè)號(hào)*頁(yè)面號(hào)*/printf(|%d%dn,segmentLH.segPagListi.startAddrj.pageNum,segmentLH.segPagListi.startAddrj.MemPgnum);printf(n);wordword專業(yè)資料wordword專業(yè)資料printf(n);intmain()printf(現(xiàn)在進(jìn)行初始化設(shè)置。n);printf(請(qǐng)指定存的大小(MB):);scanf(%d,&memLen);printf(請(qǐng)?jiān)O(shè)置頁(yè)的大小(KB):);一般來(lái)講1-4KBscanf(%d,&pageLen);for(inti=O;imemLen;i+)/初始

34、化存列表mi=0;pageLH.length=0;for(inti=0;i200;i+)segmentLH.segPagListi.segmentFlag=0;for(inti=0;i1024;i+)pageLH.pageListi.pageFlag=0;swch();/*for(inti=0;i1024;i+)if(pageLH.pageListi.pageFlag!=0)wordword專業(yè)資料wordword專業(yè)資料printf(%d,i);printf(頁(yè)號(hào):%d”,pageLH.pageListi.pageNum);printf(頁(yè)面號(hào):%dn,pageLH.pageListi.Me

35、mPgnum);*/*for(inti=0;imemMax;i+)if(mi!=0)printf(存:%d:%dn,i,mi);*/system(pause);return0;初始界面如下圖:1、可以指定存大小,頁(yè)面大小一般頁(yè)面大小為1-4KB左右,然后根據(jù)需要輸入選項(xiàng)。選擇選項(xiàng)1,就會(huì)提示需要輸入的段數(shù),然后依次輸入段長(zhǎng)。輸入完成之后就會(huì)再次提示所需的操作。但是一開始只能選擇0,或者1。因?yàn)闆]有程序段就沒有地址轉(zhuǎn)換,同樣也沒有段頁(yè)存映射表。如果一開始就輸入了2或者3,就會(huì)提示重新輸入。2、選擇選項(xiàng)2,就會(huì)提示要轉(zhuǎn)換的段頁(yè)表,按要求輸入之后,就會(huì)計(jì)算出存實(shí)際地址,如果出錯(cuò)就會(huì)提示相應(yīng)的出錯(cuò)原因

36、。當(dāng)輸入不存在的段時(shí),程序就會(huì)提示不存在該段。并重新返回菜單頁(yè)面,如上圖。當(dāng)輸入段不存在的頁(yè)時(shí),就會(huì)有提示說(shuō)沒有該頁(yè),再次轉(zhuǎn)入菜單頁(yè)面,如上圖。當(dāng)輸入某一段某頁(yè)的偏移地址超出了頁(yè)的圍時(shí),就會(huì)有提示說(shuō)偏移地址偏出該頁(yè),并重新返回菜單頁(yè)面,如上圖。3、當(dāng)選擇選項(xiàng)3時(shí),該程序就會(huì)打印段頁(yè)存映射表,這個(gè)段頁(yè)存映射是采用樹結(jié)構(gòu)來(lái)顯示的,如下圖。回.0.7BE:VisualStudi顯示的,如下圖?;?0.7BE:VisualStudio2010Win32ConsoIeAppsegpagMDebugsegpagM.exe段頁(yè)內(nèi)存日庶寸羔J靈II一材程序段處理1第一列的數(shù)字代表段號(hào),段號(hào)后面的數(shù)字表示該段有

37、多少頁(yè)。段的下面的第一列數(shù)字表示該段的頁(yè)表的頁(yè)號(hào),而頁(yè)號(hào)后面的數(shù)字代表存的頁(yè)面號(hào)??傮w來(lái)說(shuō)我覺得比較優(yōu)秀出彩的地方是段表和頁(yè)表的設(shè)計(jì)方面,我覺得段表和頁(yè)表的設(shè)計(jì)是在給定條件下最完美的實(shí)現(xiàn)。采用劃分固定的區(qū)域來(lái)設(shè)置段頁(yè)表,是一個(gè)很好的方法,因?yàn)槿绻O(shè)置鏈表的話,雖然會(huì)節(jié)省一部分的存空間,但是采用鏈表的話,就會(huì)產(chǎn)生一個(gè)很明顯的鏈表的固有缺陷,就是不能夠隨機(jī)存取,存取速度就會(huì)大打折扣,對(duì)于操作系統(tǒng)來(lái)說(shuō)是致命的缺陷。但是采用結(jié)構(gòu)體數(shù)組的話,這個(gè)問題就不會(huì)存在了,但是會(huì)有數(shù)組上的固有缺陷,就是數(shù)組的大小固定,沒有辦法動(dòng)態(tài)的增加,這樣就可能會(huì)浪費(fèi)一定的存空間。在權(quán)衡取舍的時(shí)候,還是決定使用結(jié)構(gòu)體數(shù)組來(lái)表示

38、段表和頁(yè)表還有存空間,這樣可以獲得較高的訪問速度,這對(duì)操作系統(tǒng)來(lái)說(shuō)是相當(dāng)重要的。所以選擇了固定長(zhǎng)度的段表和頁(yè)表。還有一點(diǎn)就是在頁(yè)表的設(shè)計(jì)時(shí)候采用的一種方法,段頁(yè)式管理中的頁(yè)表要求每一個(gè)段都有一個(gè)長(zhǎng)度由段表指定的順序存儲(chǔ)的頁(yè)表,再設(shè)計(jì)的時(shí)候需要認(rèn)真考慮,由于每個(gè)頁(yè)表的長(zhǎng)度可變,一開始想到的是采用鏈表,但是鏈表不是順序存儲(chǔ)的,所以不行。但是數(shù)組長(zhǎng)度又不可變。最終方案還是采用數(shù)組,只要活用指針就能夠達(dá)到像是變長(zhǎng)數(shù)組的效果,并且方法相當(dāng)?shù)暮?jiǎn)單。首先先設(shè)置一個(gè)總的頁(yè)表,用來(lái)裝載每一段的頁(yè)表,在對(duì)每段進(jìn)行頁(yè)表的設(shè)計(jì)的時(shí)候,在總頁(yè)表中尋找連續(xù)的空閑的頁(yè)表空間,將這個(gè)頁(yè)表分配之后,返回這個(gè)頁(yè)表的數(shù)組的首地址,保存在段表的始址這個(gè)變量中。這樣就相當(dāng)于每個(gè)頁(yè)表都是變長(zhǎng)的,只是總頁(yè)表是定長(zhǎng)的,正好符合要求,我覺得這樣是一個(gè)很好的設(shè)計(jì)。最后在最后的輸出上,我覺得我的設(shè)計(jì)方案很不錯(cuò),就是有一個(gè)樹狀結(jié)構(gòu)的段頁(yè)存映射圖。最后的結(jié)果清晰直觀,效果很不錯(cuò)。不好的地方:存管理方面不夠節(jié)約,在存管理的時(shí)候我采用的是使用char數(shù)組,使用個(gè)字符來(lái)管理一個(gè)頁(yè)面是否是在使用中,即用8bit來(lái)表示一個(gè)頁(yè)面

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論