16281049 王晗煒 計科1601實驗目的
基礎知識
程序執行時,若其訪問的頁面不在記憶體而需將其調入,但記憶體已無空閒空間時,就需要從記憶體中調出一頁程式或資料,送入磁碟的對換區。
選擇調出頁面的演算法就稱為頁面置換演算法。好的頁面置換演算法應有較低的頁面更換頻率,也就是說,應將以後不會再訪問或者以後較長時間內不會再訪問的頁面先調出。
工作集:多數程式都顯示出高度的區域性性,也就是說,在乙個時間段內,一組頁面被反覆引用。這組被反覆引用的頁面隨著時間的推移,其成員也會發生變化。有時這種變化是劇烈的,有時這種變化則是漸進的。我們把這組頁面的集合稱為工作集。
缺頁率 = 缺頁中斷次數/頁面訪問次數。
概要設計
演算法原理
最佳置換演算法(opt)
先進先出置換演算法(fifo)
最近最久未使用置換演算法(lru)
改進型clock置換演算法
頁面緩衝演算法(pba)
詳細設計
根據以上概要設計,我們逐個對函式具體實現。
最佳置換演算法函式(opt)
先進先出置換演算法函式(fifo)
最近最久未使用置換演算法函式(lru)
改良後的clock演算法函式
頁面緩衝演算法函式(pba)
實驗結果
經過各個演算法的模組化測試之後,我們可以發現各個函式的邏輯均正確無誤,下面我們編寫乙個整合測試函式來比較各個演算法的缺頁率和時間效能(為保證各個演算法的測試序列完全一致,我們這裡不使用隨機種子):
// 整體測試函式
void
evaluate()
隨後我們給出一組初始值,對以上四種演算法進行測試:引數值
n(虛擬記憶體的大小)
50len_memory(裝載頁面塊的大小)
8e(工作集中包含的頁數)
30m(工作集移動率)
10p(工作集的起始位置)
0t(p賦新值的閾值)
0.5我們將訪問序列的長度隨數量級依次增大,首先設定序列長度為100,測試結果如下:
設定序列長度為1000,測試結果如下:
設定序列長度為10000,測試結果如下:
設定序列長度為100000,測試結果如下:
設定序列長度為1000000,測試結果如下:
設定序列長度為10000000,測試結果如下:
設定序列長度為100000000,測試結果如下:
下面就其效能給出乙個總表進行總結:
缺頁率表
資料量optfifo
lruclock
1000.51
0.81
0.79
0.75
1000
0.478
0.729
0.725
0.744
10000
0.5014
0.7576
0.7548
0.7664
100000
0.50855
0.76512
0.76294
0.77068
1000000
0.507489
0.763852
0.7627
0.770681
10000000
0.507654
0.76249
0.763032
0.771027
100000000
0.5075
0.764118
0.762869
0.770879
花費時間表
資料量optfifo
lruclock
100300
0100041
231000081
13100000535
6271000000
45148
64240
10000000
4640
471633
2411
100000000
46569
4797
6462
25320
由以上我們可以得出一下結論:
作業系統第四次實驗 檔案系統
姓名 張越 班級 計算1811 學號 201821121006 1.編寫程式 在伺服器上用vim編寫乙個程式 實現linux系統命令ls lai的功能,給出源 關於ls lails l 以長格式顯示目錄下的內容列表。輸出的資訊從左到右依次包括檔名,檔案型別 許可權模式 硬連線數 所有者 組 檔案大小...
作業系統第四次作業
4.2 解 發生模式切換可以不改變正處於執行態的程序狀態,在這種情況下,儲存上下文環境和以後恢復上下文環境只需要很少的開銷,執行緒包含的狀態資訊更少 4.3解 資源所有權和排程執行 4.4.解 例如位址空間,檔案資源,執行特權等。problems 4.2解 因為對於使用者級執行緒來說,乙個程序的執行...
第四次實驗
一 問題及 檔名稱 陣列素數排序.cpp 作 者 周玉傑 完成日期 2017 年 4 月 10 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 將乙個陣列之中的素數存入另乙個陣列之中並使其排列 程式輸出 另乙個陣列排序前和排序後的樣子 問題分析 使用函式來分工 演算法設...