FIFO頁面調度算法處理缺頁中斷_第1頁
FIFO頁面調度算法處理缺頁中斷_第2頁
FIFO頁面調度算法處理缺頁中斷_第3頁
FIFO頁面調度算法處理缺頁中斷_第4頁
FIFO頁面調度算法處理缺頁中斷_第5頁
已閱讀5頁,還剩9頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、計算機科學與技術系 實 驗 報 告專業名稱 網絡工程 課程名稱 操作系統原理 項目名稱FIFO頁面調度算法處理缺頁中斷 班 級 12網絡工程(1)班 學 號 1204031030 姓 名 方 彬 同組人員 朱佳寶、王衛、凌含濤、胡星瑞 實驗日期 2014.12.02 一、實驗目的與要求:(1) 熟悉、掌握先進先出FIFO算法,并實現用先進先出FIFO算法頁面調度算法處理缺頁中斷.(2) 理解基于先進先出FIFO的內存管理調度算法,更好的掌握算法的思想,結合實驗理解算法更直觀,深刻具體。通過對先進先出FIFO的調度算法的模擬實驗可以清楚的了解內存管理是如何調度的,以及加深對內存管理的了解。二、實

2、驗內容1) 任務分析:以無歧義的陳述說明實驗任務,并明確規定:(a) 輸入的形式和輸入值的范圍; 在輸入文本框中輸入,輸入值的范圍在06之間(b) 輸出的形式; 輸出為缺頁序列的表格(c) 程序所能達到的功能; 輸入頁號,輸出缺頁序列,實現先進先出算法的模擬(d) 測試數據:包括正確的輸入及其輸出結果和錯誤的輸入及其輸出結果。輸入值為空:輸入值越界:正確的輸入值:2) 概要設計:說明本程序中用到的所有抽象數據類型的定義、主程序的流程以及各程序模塊之間的層次(調用)關系。 本程序中定義了一個數組int mainstore = 3,2,1,0 ;用于模擬主存存放頁;此外還定義了一個數組 int f

3、lag = 0,0,0,0,0,0,0 ;用于表明頁號的修改標志位,便于之后的操作。 該程序的只要流程如下:開始檢查內存是否有空閑塊選擇最先進入的頁面置換讀入訪問頁面信息存入頁面輸出置換出的頁面序號結束未讀完已讀完有無3) 詳細設計:實現概要設計中定義的所有數據類型,對每個操作只需要寫出偽碼算法;對主程序和其他模塊也都需要寫出偽碼算法(偽碼算法達到的詳細程度建議為:按照偽碼算法可以在計算機鍵盤直接輸入高級程序設計語言程序);畫出函數和過程的調用關系圖。using System;using System.Collections.Generic;using System.ComponentMode

4、l;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using lru;using change;namespace 操作系統 public partial class Form1 : Form public Form1() InitializeComponent(); /定義一個窗口類,在類里面定義一個窗口 int mainstore = 3,2,1,0 ;/定義數組用于存放頁 i

5、nt flag = 0,0,0,0,0,0,0 ;/定義修改標志位的數組 int blo = 0;/用來控制在表格的哪一列輸出頁號序列 private void button1_Click(object sender, EventArgs e)/定義一個事件響應,即對輸入進行操作 if (string.IsNullOrEmpty(txt.Text) MessageBox.Show(請輸入頁號!); else if (int.Parse(txt.Text) 6 | int.Parse(txt.Text) 0) MessageBox.Show(輸入頁號不合法,請重新輸入!);/判斷輸入是否合法 e

6、lse int page = int.Parse(txt.Text); int i=0; if (page != mainstore0 & page != mainstore1 & page != mainstore2 & page != mainstore3)/插入頁內存中不存在,進行FIFO算法 int lll; lll = mainstore0; if (flagmainstore0 = 0)/修改標志位為0,直接覆蓋 mainstore0 = page; flaglll = 1; Else/修改標志位為1,數組執行FIFO for (i = 0; i 3; i+) mainstorei

7、 = mainstorei + 1; mainstore3 = page; MessageBox.Show(當前調走頁號+lll.ToString ()+n存入頁號為+page.ToString (); l0.Text = 0; l1.Text = 0; l2.Text = 0; l3.Text = 0; l4.Text = 0; l5.Text = 0; l6.Text = 0; /標志位初始化; for (int j = 0; j 4; j+) if (mainstorej = 0) l0.Text = 1; if (mainstorej = 1) l1.Text = 1; if (mai

8、nstorej = 2) l2.Text = 1; if (mainstorej = 3) l3.Text = 1; if (mainstorej = 4) l4.Text = 1; if (mainstorej = 5) l5.Text = 1; if (mainstorej = 6) l6.Text = 1; /根據插入頁號,將標志位置1 for (int k = 0;k 7; k+) if (lll = 0) ll0.Text = 1; if (lll = 1) ll1.Text = 1; if (lll = 2) ll2.Text = 1; if (lll = 3) ll3.Text

9、= 1; if (lll = 4) ll4.Text = 1; if (lll = 5) ll5.Text = 1; if (lll = 6) ll6.Text = 1; /根據情況,將修改標志位置1 else MessageBox.Show(該頁已在主存中! ); blo+; if(blo=1) txt10.Text = mainstore0.ToString(); txt11.Text = mainstore1.ToString(); txt12.Text = mainstore2.ToString(); txt13.Text = mainstore3.ToString(); else i

10、f(blo=2) txt20.Text = mainstore0.ToString(); txt21.Text = mainstore1.ToString(); txt22.Text = mainstore2.ToString(); txt23.Text = mainstore3.ToString(); else if(blo=3) txt30.Text = mainstore0.ToString(); txt31.Text = mainstore1.ToString(); txt32.Text = mainstore2.ToString(); txt33.Text = mainstore3.

11、ToString(); else if(blo=4) txt40.Text = mainstore0.ToString(); txt41.Text = mainstore1.ToString(); txt42.Text = mainstore2.ToString(); txt43.Text = mainstore3.ToString(); else if(blo=5) txt50.Text = mainstore0.ToString(); txt51.Text = mainstore1.ToString(); txt52.Text = mainstore2.ToString(); txt53.

12、Text = mainstore3.ToString(); else if(blo=6) txt60.Text = mainstore0.ToString(); txt61.Text = mainstore1.ToString(); txt62.Text = mainstore2.ToString(); txt63.Text = mainstore3.ToString(); else if(blo=7) txt70.Text = mainstore0.ToString(); txt71.Text = mainstore1.ToString(); txt72.Text = mainstore2.

13、ToString(); txt73.Text = mainstore3.ToString(); else if(blo=8) txt80.Text = mainstore0.ToString(); txt81.Text = mainstore1.ToString(); txt82.Text = mainstore2.ToString(); txt83.Text = mainstore3.ToString(); /根據插入數量,決定在輸出表的指定列輸出 private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e) Form1

14、 the_new = new Form1(); the_new.Show(); private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) this.Close(); 4) 調試分析:(a) 調試過程中遇到哪些問題,是如何解決的; Q1:一開始的程序只能輸入9個頁號序列,超過之后就不能夠再顯示新的頁號序列;(定義了一個變量BLO,用于記錄輸入頁號數量,做求模運算mod 9,這樣當超過九個之后又會從第一列開始覆蓋) Q2:考慮到程序的用戶友好性,增加了序列刷新功能,刷新輸出區域;(定義了一個button,點擊后將輸出區域初

15、始化) Q3:開始沒有理解修改標志位的作用,所以功能沒有實現;(經過與同學的討論,定義了一個數組flag,將頁號作為flag的下標選擇置1或置0) (b) 算法的時空分析:算法的時間復雜度和空間復雜度分析;5) 測試結果:包括輸入和輸出,測試數據應該完整和嚴格。 輸入頁號為5,則存入頁號為5,調出頁號為3因為此時3的修改標志為0,所以插入的頁直接覆蓋; 3被調出到磁盤,則修改標志置1;輸入頁號為3,則存入頁號為3,調出頁號為5因為此時5的修改標志為0,所以插入的頁直接覆蓋 5被調出到磁盤,則修改標志置1;輸入頁號為4,則存入頁號為4,調出頁號為3因為此時3的修改標志為1,所以FIFO,執行出隊

16、列,4入隊;6) 使用說明:如何使用編寫的程序,詳細列出每一步的操作步驟。操作界面如上圖所示:操作步驟如下:打開“操作系統.exe”,彈出程序界面在頁號輸入框中輸入頁號,點擊“插入”按鈕在輸出表格中顯示執行后的頁號序列,同時標志位,修改標志位會相應發生改變三、實驗分析與小結請求分頁存儲管理是目前最常用的一種實現虛擬存儲器的方式。每當所要訪問的頁面不在內存時,便產生一缺頁中斷,請求OS將所缺之頁調入內存。如果內存已無空閑空間, 應該將哪個頁面調出,須根據一定的算法來確定。先進先出(FIFO)是最早出現的頁面置換算法,該算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。本次實驗是通過模擬FIFO(先進先出)調度算法處理缺頁中斷,主要思想是先把進程調入頁面,按次序鏈接成一個隊列,并設置指針一直指向相對最先進入主存的頁面。然后將該頁面調出,調入輸入的頁面。通過對先進先出FIFO算法的模擬實現,我加深了對內存管理調度的理解,理解了

溫馨提示

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

評論

0/150

提交評論