一、 實驗目的:
通過模擬頁面排程策略,感性認識作業系統對記憶體的排程管理。
二、實驗工具:
有linux作業系統的計算機。
三、 預備知識:
fifo 在記憶體中被替換出去的頁面永遠是最優先進入的頁面。
四、 實驗程式設計:fifo排程的策略。
(1) 進入linux作業系統。
(2) 開啟終端,進入vi編輯器。
(3) 輸入程式源**。
(4) 按esc鍵進入命令模式,再輸入「:wq檔名」後就可以執行程式。
程式源**:
#define true1
#definefalse 0
#defineinvalid -1
#define null0
#define total_instruction 320 /*指令流長*/
#definetotal_vp 32 /*虛頁長*/
#defineclear_period 50 /*清0週期*/
typedef struct /*頁面結構*/
pl_type;
pl_typepl[total_vp]; /*頁面結構陣列*/
structpfc_struct
; typedefstruct pfc_struct pfc_type;
pfc_typepfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;
intdiseffect, a[total_instruction];
intpage[total_instruction], offset[total_instruction];
int initialize(int);
intnur(int);
int main()
a[i]=s; /*任選一指令訪問點m*/
a[i+1]=a[i]+1; /*順序執行一條指令*/
a[i+2]=(float)a[i]*rand( )/32767/32767/2; /*執行前位址指令m' */
a[i+3]=a[i+2]+1;/*順序執行一條指令*/
s=(float)(318-a[i+2])*rand()/32767/32767/2+a[i+2]+2;
if((a[i+2]>318)||(s>319))
printf("a[%d+2],a number which is :%d ands==%d\n",i,a[i+2],s);
} for(i=0;i
for(i=4;i<=32;i++)/*使用者記憶體工作區從4個頁面到32個頁面*/
return 0;
} int initialize(total_pf) /*初始化相關資料結構*/
inttotal_pf; /*使用者程序的記憶體頁面數*/
for(i=0;i /*建立pfc[i-1]和pfc[i]之間的鏈結*/
pfc[total_pf-1].next=null;
pfc[total_pf-1].pfn=total_pf-1;
freepf_head=&pfc[0];/*空頁面佇列的頭指標為pfc[0]*/
return 0;
} intnur(total_pf) /*最近未使用演算法*/
inttotal_pf;
freepf_head=&pfc[pl[dp].pfn];
pl[dp].pfn=invalid;
freepf_head->next=null;
} pl[page[i]].pfn=freepf_head->pfn;
freepf_head=freepf_head->next;
} else
pl[page[i]].counter=1;
if(i%clear_period==0)
for(j=0;jpl[j].counter=0;
} printf("nur:%6.4f\n",1-(float)diseffect/320);
return 0;
}執行後截圖:
程式**所表示的流程圖:
一、 心得體會。
是用佇列儲存記憶體中的頁面,佇列的特點是先進先出,與該演算法是一致的,所以每當發生缺頁時,就從隊頭刪除一頁,而從隊尾加入缺頁。或者借助輔助陣列time[msize]記錄物理塊中對應頁面的進入時間,每次需要置換時換出進入時間最小的頁面。所以fifo需要進行頁面置換,即把記憶體中裝入最早的那個頁面淘汰,換入當前的頁面。總的來說使用fifo演算法,總是淘汰最先進入記憶體的頁面,即即選擇在記憶體中駐留時間最久的頁面予以淘汰。通過這個實驗我體會到了程式設計的思路流程,結構流程圖的作用。乙個程式如果一開始計畫的好,結構設計完善,才可能順利進行。
Linux環境下共享記憶體
共享記憶體指 shared memory 在多處理器的計算機系統中,可以被不同 處理 cpu 訪問的大容量記憶體。由於多個cpu需要快速訪問 儲存器,這樣就要對 儲存器進行 快取 cache 任何乙個快取的資料被更新後,由於其他處理器也可能要訪問,共享記憶體就需要立即更新,否則不同的處理器可能用到不...
linux下程序通訊 FIFO
管道應用的乙個重大缺陷就是沒有名字,因此只能用於親緣程序之間的通訊。後來從管道的基礎上提出命名管道 named pipe,fifo 的概念,該限制得到了克服。fifo 不同於管道之處在於它提供乙個路徑名與之關聯,以fifo的檔案的形式存在於檔案系統中。這樣即使與fifo的建立程序不存在親緣關係的程序...
Linux環境下管道FIFO傳輸
本例用到3個檔案 建立管道 往管道裡寫資料 從管道裡讀資料。fifo write.c include include include include include include include include define bufes pipe buf int main void for i 0...