Linux環境下的FIFO記憶體排程模擬

2021-08-20 03:26:10 字數 2655 閱讀 4128

一、 實驗目的:

通過模擬頁面排程策略,感性認識作業系統對記憶體的排程管理。

二、實驗工具:

有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...