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

下載本文檔

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

文檔簡介

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

2、能檢查地址的合法性,如果合法進(jìn)行轉(zhuǎn)換,否則顯示地址非法的原因。2設(shè)計(jì)報(bào)告容應(yīng)說明:需求分析;功能設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu)及模塊說明);開發(fā)平臺及源程序的主要部分;測試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;自我評價(jià)與總結(jié):i)你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;ii)什么地方做得不太好,以后如何改正;iii)從本設(shè)計(jì)得到的收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗(yàn)和教訓(xùn));iv)完成本題是否有其他方法(如果有,簡要說明該方法);時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成程序分析及設(shè)計(jì)。周2、周3:完成程序調(diào)試及測試。周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é)任教師)簽名:一、需求分析:頁式管理基本原理:各個(gè)進(jìn)程的虛擬空間被劃分成若干個(gè)長度相等的頁。頁長的劃分和存與外存之間的數(shù)據(jù)傳輸速度及存大小等有關(guān)。一般每個(gè)頁長大約為14K,經(jīng)過頁劃分之后,進(jìn)程的虛擬地址變?yōu)轫撎杙與頁地址w所組成。除了將進(jìn)程的虛擬空間劃分為大小相等的頁之外,頁式管理還把存空間也按頁的大小劃分為片或者頁面。這些頁面為系統(tǒng)中的任一進(jìn)程所共享。從而與分區(qū)管理不一樣,分頁管理時(shí),用戶進(jìn)程在存空間除了在每個(gè)頁面地址連續(xù)之外,每個(gè)頁面之間不再連續(xù)。第一是實(shí)現(xiàn)了存中碎片的減少,因?yàn)槿我馑槠紩∮谝粋€(gè)頁面。第二是實(shí)現(xiàn)了由連續(xù)存儲到非連續(xù)存儲的

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

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

6、間中的代碼,代碼中的指令是相對于虛擬空間的,需要到存的實(shí)際空間中尋找對應(yīng)的要執(zhí)行的指令。靜態(tài)頁式管理的缺陷:雖然解決了分區(qū)管理時(shí)的碎片問題,但是由于靜態(tài)頁式管理要求進(jìn)程或作業(yè)在執(zhí)行前全部裝入存,如果可用頁面數(shù)小于用戶要求時(shí),改作業(yè)或進(jìn)程只好等待。而且,作業(yè)或進(jìn)程的大小仍受存可用空間的限制。動(dòng)態(tài)頁式管理:動(dòng)態(tài)頁式管理是在靜態(tài)頁式管理的基礎(chǔ)上發(fā)展起來的。它分為請求頁式管理和與調(diào)入頁式管理(調(diào)入方式上)。請求頁式管理和預(yù)調(diào)入頁式管理在作業(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)的裝入。請求式頁式管理

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

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

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

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

11、段長度不等,所以這些存儲區(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í)申請調(diào)入新段和釋放老段。進(jìn)程對于存區(qū)的申請和釋放可分為兩種情況。一種是當(dāng)進(jìn)程要求調(diào)入某一段時(shí),存中有足夠的空閑區(qū)滿足該段的存要求。另一種是存中沒有足夠的空閑區(qū)。對于第一種情況,系統(tǒng)要用相應(yīng)的表格或數(shù)據(jù)結(jié)構(gòu)來管理存空閑區(qū),以便對用戶進(jìn)程或作業(yè)的有關(guān)程序段進(jìn)行存分配和回收。事實(shí)上,可以采用和動(dòng)態(tài)分區(qū)式管理相同的空閑區(qū)管理方式。

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

13、或置換算法實(shí)際上是缺頁中斷處理過程的一部分。段式管理的地址變換:由于段式管理只存放部分用戶信息副本在存,而大部分信息在外存中,這必然引起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)地址變換和缺頁中斷處理及存儲保護(hù)等。段式管理是通過段表來進(jìn)行存管理的。(3)段號與用戶指定的段名一一對應(yīng),始址和長度分別表示該段在存或外存的物理地址和

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

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

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

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

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

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

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

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

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

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

24、位pageL*startAddr;/起始位置pageL*startAddr;/起始位置;intsegmentFlag;/段表,因?yàn)槎伪硎枪潭ǖ拇鎱^(qū),所以直接設(shè)為數(shù)組。segPagList100;structsegmentLHintlength;segmentLsegPagList200;段表,因?yàn)槎伪硎枪潭ǖ拇鎱^(qū),所以直接設(shè)為數(shù)組。200差不多了1024頁,每段5頁segmentLH;charm10240;無法使用鏈表法,char類型是一個(gè)字節(jié),節(jié)省空間,值表示頁是否被使用。intfindIdlePage()/返回找到空閑存頁的第一個(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)使用完了!請輸入數(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;/段長,即分多少頁segmentLH.segPagListi.segmentFlag=1;wordword專業(yè)資料wordword專業(yè)資料returni;printf(段表沒有可以填寫的段!);return-1;/沒有可以填寫的段就返回-1intfindSeriesIdlePageList(intq)參數(shù)q表示需要連續(xù)空間的頁數(shù)返回值為分配數(shù)組起始標(biā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ù)頁表空間!”);for(t=0;tq;t+)/將已分配到的頁表,標(biāo)記為正在使用pageLH.pageListt+n.pageFlag=1;returnn;voidsingle()/怎樣判斷存區(qū)有沒有空閑intflag=1;intq=0;intN=0;intp;intsegNum,length;printf(請輸入要輸入的段的個(gè)數(shù):n);scanf(%d,&N);printf(請依次輸入段長:n);for(intz=1;z=q)/存夠分inti=findIdleSegAndWrite(z,q);/找到可以填寫的段,填寫段長,段號intn二fin

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

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

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

33、th;j+)/*頁號*頁面號*/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(請指定存的大小(MB):);scanf(%d,&memLen);printf(請?jiān)O(shè)置頁的大小(KB):);一般來講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(頁號:%d”,pageLH.pageListi.pageNum);printf(頁面號:%dn,pageLH.pageListi.Me

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論