請求調存儲管理方式的模擬NRU_第1頁
請求調存儲管理方式的模擬NRU_第2頁
請求調存儲管理方式的模擬NRU_第3頁
請求調存儲管理方式的模擬NRU_第4頁
請求調存儲管理方式的模擬NRU_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、請求調頁存儲管理方式的模擬NRU#i nclude <stdio.h>#in elude <stdlib.h>#in elude <stri ng.h>#ifndef _UNISTD_H#defi ne _UNISTD_H#i nclude <IO.H>#i nclude <PROCESS.H>#en dif#defi ne TRUE 1#defi ne FALSE 0#defi ne INVALID -1#defi ne NULL 0#define total_instruction 320 /*指令流長 */#defi ne to

2、tal_vp 32 /* 虛頁長 */#define clear_period 50 /* 清 0 周期 */typedef struct /* 頁面結構 */int pn,pfn ,co un ter,time;pl_type;pl_type pltotal_vp; /* 頁面結構數(shù)組 */struct pfc_struct/*頁面控制結構*/int pn,pfn;struct pfc_struct *n ex t;typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp,*freepf_head,*busypf_h ead,*busyp

3、f_tail;int diseffect, atotal _in structio n;int pagetotal_instruction, offsettotal_instru ctio n;int in itialize(i nt);int NUR(i nt) int main()int s,i,j;sra nd(10*getpid();/*由于每次運行時進程號不同,故可用來作為初始化隨機數(shù)隊列的“種子”*/s=(float)319*rand( )/32767/32767/2+1; / for(i=0;i<total_i nstructio n; i+=4) /*產生指令隊列*/if

4、(s<0|s>319)prin tf("Whe n i=%d,Error,s=%dn",i,s); exit(O);ai=s; /*任選一指令訪問點 m*/ ai+1=ai+1; /* 順序執(zhí)行一條指令*/ ai+2=(float)ai*rand( )/32767/32767/2; /* 執(zhí)行前地址指令m' */ai+3=ai+2+1;/*順序執(zhí)行一條指令*/s=(float)(318-ai+2)*rand( )/32767/32767/2 +ai+2+2;if(ai+2>318)|(s>319)prin tf("a%d+2,a n

5、 umber which is :%d and s= =%dn",i,ai+2,s);for (i=0;i<total_i nstructio n;i+) /* 將指令序列 變換成頁地址流*/pagei=ai/10;offseti=ai%10;for(i=4;i<=32;i+) /*用戶內存工作區(qū)從 4個頁面到32個頁面*/printf("-%2d page frames-n ",i);NUR(i);return 0;int in itialize(total_pf) /*初始化相關數(shù)據(jù)結構*/int total_pf; /*用戶進程的內存頁面數(shù)*/i

6、nt i;diseffect=0;for(i=0;i<total_vp;i+)pli.p n=i;pli.pfn=INVALID; /*置頁面控制結構中的頁號,頁面為空*/pli.co un ter=0;pli.time=-1; /*頁面控制結構中的訪問次數(shù)為0,時間為-1*/for(i=0;i<total_pf-1;i+)pfci. next=&pfci+1;pfci.pf n=i; /*建立pfci-1和pfci之間的鏈接*/ pfctotal_pf-1 .n ext=NULL;pfctotal_pf-1.pf n=total_pf-1;freepf_head=&

7、;pfc0; /*空頁面隊列的頭指針為 pfc0*/return 0;int NUR(total_pf) /* 最近未使用算法*/int total_pf;int i,j,dp,c on t_flag,old_dp;pfc_type *t;in itialize(total_pf);dp=0;for(i=0;i<total_i nstructio n;i+) if (plpagei.pfn=INVALID) /* 頁面失效 */ diseffect+;if(freepf_head=NULL) /*無空閑頁面 */ con t_flag=TRUE;old_dp=dp;while(c on

8、t_flag) if(pldp.cou nter=0&&pldp.pfn! =INVALID)co nt_flag=FALSE;else dp+;if(dp=total_vp)dp=0;if(dp=old_dp)for(j=0;j<total_vp;j+) plj.co un ter=0; freepf_head=&pfcpldp.pf n; pldp.pfn=INVALID;freepf_head->n ext=NULL;plpagei.pf n=freepf_head->pf n; freepf_head=freepf_head->n ex

9、t; elseplpagei.co un ter=1; if(i%clear_period=0) for(j=0;jvtotal_vp;j+) plj.co un ter=0;prin tf("NUR:%6.4fn",1-(float)diseffect/320); return 0;1 設計目的通過對頁面、頁表、地址轉換和頁面置換過程的模擬,加深對請求調頁系統(tǒng)的原理和實現(xiàn)過 程的理解。2 設計內容1 )假設每個頁面中可存放10條指令,分配給作業(yè)的內存塊數(shù)為42 )用C語言模擬一個作業(yè)的執(zhí)行過程,該作 業(yè)共有320條指令,即它的地址空間為32頁, 目前它的所有頁都還未調入內

10、存。在模擬過程中,如果所訪問的指令已在內存,貝V顯示其物理 地址,并轉下一條指令。如果所訪問的指令還未 裝入內存,則發(fā)生缺頁,此時需記錄缺頁的次數(shù), 并將相應頁調入內存。如果4個內存塊均已裝入 該作業(yè),則需進行頁面置換,最后顯示其物理地 址,并轉下一條指令。在所有320指令執(zhí)行完畢后,請計算并顯示作 業(yè)運行過程中發(fā)生的缺頁率。3 )置換算法:最近最不經常使用(NRU )算 法。提示:(1)通過隨機數(shù)產生一個指令序列,共 320條 指令。指令的地址按下述原則生成: 50%的指令是順序執(zhí)行的; 25%的指令是均勻分布在前地址部分; 25%的指令是均勻分布在后地址部分; 具體的實施方法是: 在0,319的指令地址之間隨機選取一起點m 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令 在前地址0 , m+1中隨機選取一條指令并 執(zhí)行,該指令的地址為m ; 順序執(zhí)行一條指令,其地址為m+i的指令; 在后地址m'+2, 319中隨機選取一條指令 并執(zhí)行; 重復上述步驟,直到執(zhí)行 320次指 令。(2)將指令序列變換為頁地址流 設頁面大小為1K; 用戶內存容量為4頁到32頁; 用戶虛存容里為32K。在用戶虛存中,按每K存放10條指令排列 虛存地址,即320條指令在虛存中的存放方式

溫馨提示

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

評論

0/150

提交評論