頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷 實驗報告_第1頁
頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷 實驗報告_第2頁
頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷 實驗報告_第3頁
頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷 實驗報告_第4頁
頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷 實驗報告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷班級實驗五頁式虛擬存儲管理中地址轉(zhuǎn)換和頁式中斷一、實驗目的深入了解頁式存儲管理如何實現(xiàn)地址轉(zhuǎn)換;進一步認識頁式虛擬存儲管理中如何處理缺頁中斷以及頁面置換算法。二、實驗主要內(nèi)容編寫程序完成頁式虛擬存儲管理中地址轉(zhuǎn)換過程和模擬缺頁中斷的處理。實驗具體內(nèi)容包括:首先對給定的地址進行轉(zhuǎn)換工作,若發(fā)現(xiàn)缺頁則先進行缺頁中斷處理,然后再進行地址轉(zhuǎn)換;最后編寫主函數(shù)對所做工作進行測試。假定主存64KB,每個主存塊1024字節(jié),作業(yè)最大支持到64KB,系統(tǒng)中每個作業(yè)分得主存塊4塊。三、實驗原理1)地址轉(zhuǎn)換過程:首先從邏輯地址中的高位取得頁號,然后根據(jù)頁號查頁表,得到塊號;然后從邏輯地址中的低位取得頁內(nèi)地址,將塊號和頁內(nèi)地址合并即得到物理地址。2)缺頁中斷處理根據(jù)頁號查找頁表,判斷該頁是否在主存儲器中,若該頁標志位“0”,形成缺頁中斷。操作系統(tǒng)讓調(diào)出中斷處理程序處理中斷。四、實驗方法與步驟實現(xiàn)地址轉(zhuǎn)換與缺頁中斷處理,主要考慮三個問題:第一,設計頁式虛擬存儲管理方式中頁表的數(shù)據(jù)結(jié)構(gòu);第二,地址轉(zhuǎn)換算法的實現(xiàn);第三,缺頁中斷處理算法的實現(xiàn)。1)

設計頁表的數(shù)據(jù)結(jié)構(gòu)頁式虛擬存儲管理方式中頁表除了頁號和該頁對應的主存塊號外,至少還要包括存在標志(該頁是否在主存),磁盤位置(該頁的副本在磁盤上的位置)和修改標志(該頁是否修改過)。在實驗中頁表用數(shù)組模擬,其數(shù)據(jù)結(jié)構(gòu)定義如下:struct{intlnumber;//頁號intflag;//表示頁是否在主存中,“1”表示在,“0”表示不在intpnumber;//該頁所在主存塊的塊號intwrite;//該頁是否被修改過,“1”表示修改過,“0“表示沒有修改過intdnumber;//該頁存放在磁盤上的位置,即磁盤塊號}page[n];//頁表定義2)地址轉(zhuǎn)換算法的實現(xiàn)地址轉(zhuǎn)換是由硬件完成的,實驗中使用軟件程序模擬地址轉(zhuǎn)換過程。在實驗中,每個主存塊1024字節(jié),則塊內(nèi)地址占10位;主存64KB,則主存共64塊,即塊號占6位;物理地址共占16位;作業(yè)最大64KB,則作業(yè)最大占64塊,即頁號占6位,邏輯地址共占16位。(用主存的大小計算物理地址位數(shù),用最大作業(yè)大小計算邏輯地址位數(shù))。在頁式虛擬存儲管理方式中,作業(yè)信息作為副本放在磁盤上,作業(yè)執(zhí)行時僅把作業(yè)信息的部分頁面裝入主存儲器,作業(yè)執(zhí)行時若訪問的頁面在主存中,則進行地址轉(zhuǎn)換,若訪問的頁面不在主存中,則產(chǎn)生一個“缺頁中斷”,由操作系統(tǒng)把當前所需要的頁面裝入主存儲器后,再次執(zhí)行時才可以按上述方法進行地址轉(zhuǎn)換。

模擬地址轉(zhuǎn)換流程度3)

缺頁中斷處理算法的實現(xiàn)缺頁處理過程簡單闡述如下:a)根據(jù)當前執(zhí)行指令中邏輯地址的頁號查找頁表,判斷該頁是否在主存儲器中,若該頁標志為“0”,形成缺頁中斷。中斷裝置通過交換PSW讓操作系統(tǒng)的中斷處理程序占用處理器。b)操作系統(tǒng)處理缺頁中斷的方法及時查主存分配表,找一個空閑主存塊;若無空閑塊,查頁表,選擇一個已在主存的頁面,把它暫時調(diào)出主存。若在執(zhí)行過程中該頁被修改過,則需將該頁信息寫回磁盤,否則不比寫回;c)找出該頁的位置,啟動磁盤讀出該頁的信息,把磁盤上讀出的信息裝入第2不找到的主存塊,修改頁表中該頁的標志為“1”;d)由于產(chǎn)生缺頁中斷的那條指令還沒有執(zhí)行完,所以頁面裝入后應該重新執(zhí)行被中斷的指令。當重新執(zhí)行該指令時,由于要訪問的頁面已在主存中,所以可以正常執(zhí)行。關(guān)于第二步的查找裝入新頁面的主存塊處理方式,不同系統(tǒng)采用的策略可能有所不同,這里采用局部置換算法,就是每個作業(yè)分得一定的主存塊,只能在分得的主存塊內(nèi)查找空閑塊,若無空閑主存塊,則從該作業(yè)中選擇一個頁面淘汰出主存。實驗中采用局部置換算法。使用局部置換算法時,存在這樣一個問題:就是在分配給作業(yè)主存空間時,裝入哪些頁?有的系統(tǒng)采取不裝入任何一頁,當執(zhí)行過程中需要時才將其調(diào)入。有點系統(tǒng)采用頁面預置的方法,事先估計可能某些頁面會先用到,在分配主存塊后將這些頁面裝入。在本實驗中采用第二種方法,分配主存空間時將前幾頁調(diào)入主存,假定系統(tǒng)中每個作業(yè)分得主存塊m塊,則將第0~m-1頁裝入主存。因為是模擬硬件工作,所有在實驗中如果訪問的頁不再主存中時,則輸入該頁頁號,表示硬件產(chǎn)生缺頁中斷,然后直接轉(zhuǎn)去缺頁中斷處理;由于采用頁面預置方法,在給定的主存塊中一定無空閑塊,只能淘汰已在主存的一頁;沒有啟動磁盤的工作,淘汰的頁面需要寫回磁盤時,用輸入頁號表示,調(diào)入新的一頁時,將該頁在頁表中的存在標志置為“1”,輸出頁號表示將該頁調(diào)入主存。當主存中無空閑塊時,為裝入一個頁面,必須按照某種算法從已在主存的頁中選擇一頁,將它暫時調(diào)出主存,讓出主存空間,用來存放裝入的頁面,這個工作稱為“頁面調(diào)度”。常用的頁面調(diào)度算法有:先進現(xiàn)出、最近最少用算法、和最近最不常用算法。在本實驗中采用先進現(xiàn)出調(diào)度算法。先進現(xiàn)出算法總是選擇駐留在主存時間最長的一頁調(diào)出。實驗中把主存儲器的頁的頁號按照進入主存的先后次序拍成隊列,每次總是調(diào)出對首的頁,當裝入一個新頁后,把新頁的頁號排入對尾。實驗中,用一個數(shù)組存放頁號的隊列。假定分配給作業(yè)的主存塊數(shù)為m,數(shù)組可由m個元素組成,p[0],p[1],p[2]……p[m-1];對首指針head;采用頁面預置的方法,頁號隊列的長度總是m,tail等于(head+1)%m。因此可以使用一個指針,只用head即可。在裝入一個新的頁時,裝入頁和淘汰頁同時執(zhí)行,當裝入一個新的頁時,將其頁號存入數(shù)組:淘汰頁的頁號=p[head];p[head]=新裝入頁的頁號;head=(head+1)%m;實驗執(zhí)行一條指令時,不模擬指令的執(zhí)行,只是考慮指令執(zhí)行是否修改頁面,若修改頁面,則將該頁的頁表中的修改標志位置“1”,然后輸出轉(zhuǎn)換后的物理地址,并輸出物理地址來表示一條指令執(zhí)行完成;如果訪問的頁不在主存時,則產(chǎn)生缺頁中斷,然后直接轉(zhuǎn)去缺頁中斷處理,最后模擬中斷返回,就是返回沖進進行地址轉(zhuǎn)換。因為沒有實際主存,所有在模擬程序中首先手工輸入頁表信息,創(chuàng)建該作業(yè)的頁表;然后循環(huán)執(zhí)行假定的指令,觀察地址轉(zhuǎn)換情況。五、源代碼#include<iostream.h>#definen64//頁表的最大長度#definelength4//系統(tǒng)為每個作業(yè)分配的主存塊數(shù)struct{ intlnumber;//頁號 intflag;//表示頁是否在主存中,“1”表示在,“0”表示不在 intpnumber;//該頁所在主存塊的塊號 intwrite;//該頁是否被修改過,“1”表示修改過,“0“表示沒有修改過 intdnumber;//該頁存放在磁盤上的位置,即磁盤塊號}page[n];//頁表定義intm;intpage_length;//頁表的實際長度intp[length];//用向量模擬主存inthead;voidpage_interrupt(int);//缺頁中斷處理函數(shù)voidcommand(unsigned,int);//命令處理函數(shù)voidmain(){ intlnumber,pnumber,write,dnumber; unsignedladdress; inti; cout<<"輸入頁表的信息,創(chuàng)建頁表(頁號從0開始,若頁號為-1,則結(jié)束輸入)\n"; cout<<"請輸入頁號和輔存地址:"; cin>>lnumber>>dnumber; cin.ignore(); i=0; while(lnumber!=-1) { page[i].lnumber=lnumber; page[i].flag=0; page[i].write=0; page[i].dnumber=dnumber; i++; cout<<"請輸入頁號和輔存地址:"; cin>>lnumber>>dnumber; } //預先將輸入的頁調(diào)入主存塊中 page_length=i; cout<<"輸入主存塊號(輸入少于或者等于"<<i<<"個數(shù)據(jù),若塊號數(shù)為-1,則結(jié)束輸入):"; cin>>pnumber; cin.ignore(); m=0; head=0; while(m<length&&pnumber!=-1) { if(m<i) { page[m].pnumber=pnumber; page[m].flag=1;//調(diào)入主存后,標志為置1 p[m]=m;//記錄主存中的頁號 m++; } cout<<"輸入主存塊號(輸入少于或者等于"<<i<<"個數(shù)據(jù),若塊號數(shù)為-1,則結(jié)束輸入):"; cin>>pnumber; cin.ignore();}//while cout<<"輸入指令性質(zhì)(1-修改,0-不需要,其他-結(jié)束程序運行)和邏輯地址\n" <<"邏輯地址最大能支持2的16次方-1=65535。\n"; cout<<"輸入指令性質(zhì):"; cin>>write; cin.ignore(); cout<<"輸入邏輯地址:"; cin>>laddress; cin.ignore(); while(write==0||write==1) { command(laddress,write);//將輸入的邏輯地址轉(zhuǎn)換成物理地址 cout<<"輸入指令性質(zhì):"; cin>>write; cin.ignore(); if(write!=0&&write!=1)break; cout<<"輸入邏輯地址:"; cin>>laddress; cin.ignore(); }//while}//main/*中斷處理函數(shù),采用先進先出的頁面調(diào)度算法*/voidpage_interrupt(intlnumber){intj; cout<<"發(fā)生缺頁中斷"<<lnumber<<endl; j=p[head]; p[head]=lnumber; head=(head+1)%m; if(page[j].write==1) cout<<"將頁"<<j<<"寫回磁盤第"<<page[j].dnumber<<"塊!\n"; page[j].flag=0; page[lnumber].pnumber=page[j].pnumber; page[lnumber].flag=1; page[lnumber].write=0; cout<<"淘汰主存塊"<<page[j].pnumber<<"中的頁"<<j<<",從磁盤第" <<page[lnumber].dnumber<<"塊中調(diào)入頁"<<lnumber<<endl;}/*地址轉(zhuǎn)換函數(shù),將邏輯地址轉(zhuǎn)換成物理地址,如果要查找的頁不在主存當中則產(chǎn)生缺頁中斷*/voidcommand(unsignedladdress,intwrite){unsignedpaddress,ad,pnumber; intlnumber;kk: lnumber=laddress>>10;//取邏輯地址高6位,頁號 ad=laddress&0x3ff;//頁內(nèi)地址 cout<<"該邏輯地址的頁號為:"<<lnumber<<"頁內(nèi)地址為:"<<ad<<endl; if(lnumber>=page_length) {//頁號大于頁表的長度,則無效頁號 cout<<"該頁不存在!\n"; return; } if(page[lnumber].flag==1){//頁號為lnumber在內(nèi)

溫馨提示

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

評論

0/150

提交評論