【操作系統】算法模擬系統【Java,web,含 源代碼】

系統實現操作系統的一些算法,使用的是JavaWeb。

目錄

1.算法

1.1進程調度算法

1.2磁盤調度算法

1.3請求分頁頁面置換算法

2.系統設計

2.1進程調度算法模擬設計

2.1.1先來先服務調度算法

2.1.2時間片輪轉調度算法

2.1.3優先級調度算法

2.1.4多級反饋隊列調度算法

2.1.5高響應比優先調度算法

2.1.6短作業優先調度算法

2.2磁盤調度算法模擬設計

2.2.1先來先服務調度算法

2.2.2最短尋道時間優先調度算法

2.2.3掃描調度算法

2.2.4循環掃描調度算法

2.3請求分頁頁面置換算法模擬設計

2.3.1先進先出頁面置換算法

2.3.2最近最久未使用頁面置換算法

2.3.3最少使用置換算法

2.3.4輪轉置換算法

3.系統展示(部分)

3.1首頁

3.2進程調度算法模擬實現

3.3盤調度算法模擬

3.4請求分頁頁面置換算法模擬


 

1.算法

1.1進程調度算法

  • 先來先服務調度算法
  • 時間片輪轉調度算法
  • 優先級調度算法
  • 多級反饋隊列調度算法
  • 高響應比優先調度算法
  • 短作業優先調度算法

1.2磁盤調度算法

  • 先來先服務調度算法
  • 最短尋道時間優先調度算法
  • 掃描算法(SCAN)
  • 循環掃描算法(CSCAN)

1.3請求分頁頁面置換算法

  • 先進先出頁面置換算法
  • 最近最久未使用頁面置換算法
  • 最少使用置換算法
  • 輪轉置換算法

2.系統設計

2.1進程調度算法模擬設計

2.1.1先來先服務調度算法

(1)算法核心思想

先來先服務(FCFS)調度算法是最簡單的調度算法,該算法既可以用於作業調度,也可以用於進程調度。在作業調度中,系統將按照作業到達的先後次序來進行調度,算法每次從後備作業中選擇最先進入隊列的一個或幾個作業,將它們調入內存,分配必要的資源,創建進程並放入就緒隊列。

在進程調度中,FCFS調度算法每次從就緒隊列中選擇最先進入該隊列的進程,將處理機分配給它,使之投入運行,直到完成或因某種原因而阻塞時才釋放處理機。

(2)系統參數設計

  • 輸入數據參數:進程名稱、進程到達時間、進程運行時間;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間。

(3)算法設計

系統對用戶輸入的進程數據,每一個進程的數據作爲一個OSProcess類的對象,將其添加進ArrayList<OSProcess>鏈表;然後系統將進程按照到達時間遞增順序進行排序,如果到達時間相同,則先輸入者在前。至此,前面所做的工作稱作對數據的預處理,下文稱預處理,不再詳細描述。系統對排序後進程序列的開始執行時間和結束執行時間進行迭代更新。

2.1.2時間片輪轉調度算法

(1)算法核心思想

時間片輪轉調度算法主要適用於分時系統。在該算法中,系統將所有就緒進程按到達時間遞增次序排成一個隊列,進程調度程序總是選擇就緒隊列中第一個進程執行,即先來先服務的原則,但僅能運行一個時間片。在使用完一個時間片後,即使進程並未完成其運行,它也必須釋放出處理機給下一個就緒的進程,而被剝奪的進程返回到就緒隊列的末尾,等候再次運行。

在時間片輪轉調度算法中,時間片的大小對系統性能的影響很大。如果時間片足夠大,以至於所有進程都能在一個時間片內執行完畢,則該算法就退化爲先來先服務調度算法。如果時間片很小,那麼處理機將在進程間過於頻繁切換,使處理機的開銷增大,而真正運行用戶進程的時間將減少。

(2)系統參數設計

  • 輸入數據參數:時間片長度、進程名稱、進程到達時間、運行時間;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間。

(3)算法設計

先進行數據的預處理。系統設置一個隊列作爲就緒隊列queue存放處於就緒狀態的進程。設置一個參數t0表示當前時刻,初始值爲第一個進程開始運行的時刻。將到達時間小於等於t0的進程按照到達時間遞增次序進隊列,選擇隊首的進程,給其分配處理機。如果該進程在一個時間片內未完成,則釋放處理機,再次進入就緒隊列,但如果此刻有新的進程進入就緒隊列,則新進程優先進入,該進程後進入隊列;若該進程在此時間片內完成,則進行標記完成。如果就緒隊列爲空時,處理機空轉,時間遞增,直到進程全部完成。

爲詳細直觀的呈現模擬結果,系統除展示最終模擬結果外,還通過表格形式呈現詳細的進程的時間片調度過程,另外,還通過動畫的形式,分步演示進程的調度過程。

2.1.3優先級調度算法

(1)算法核心思想

優先級調度又稱優先權調度算法,該算法既可以用於作業調度,也可以用於進程調度,該算法中的優先級用於描述作業進行的緊迫程度。

在作業調度中,優先級調度算法每次從後備作業隊列中選擇優先級最高的一個或幾個作業,將他們調入內存,分配必要的資源,創建進程並放入就緒隊列。在進程調度中,優先級調度算法,每次從就緒隊列中選擇優先級最高的進程,將處理機分配給它們。

根據新的更高優先級進程能否搶佔正在執行的進程,可將調度算法分爲:

  • 非剝奪式優先級調度算法。當某一個進程正在處理機上運行時,即使某個更爲重要或緊迫的進程進入就緒隊列,仍然讓正在運行的進程繼續運行,直到由於其自身的原因而主動讓出處理機時,才把處理機分配給更爲重要或緊迫的進程。
  • 剝奪式優先級調度算法。當一個進程正在處理機上運行時,若有某個更爲重要或緊迫的進程進入就緒隊列,則立即暫停正在運行的進程,將處理機分配給更爲重要或緊迫的進程。

(2)系統參數設計

  • 輸入數據參數:進程名稱、進程到達時間、運行時間、進程優先級;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間、進程優先級。

(3)算法設計

先進行數據的預處理。系統設置3個不同優先級就緒隊列,優先級分別爲1、2、3,1爲最高優先級,3爲最低優先級,系統採用剝奪式優先級調度。系統將進程數據按照優先級分別分配到三個隊列,按照優先級順序由高到低的順序依次分配處理機執行。當低優先級進程運行過程中,如果有高優先級進程進入,則低優先級進程被中斷,高優先級進程先運行,高優先級進程運行完成後,被中斷的低優先級進程繼續運行。

2.1.4多級反饋隊列調度算法

(1)算法核心思想

多級反饋隊列調度算法是時間片輪轉和優先級調度算法的綜合發展。該算法的實現思想如下:

  • 設置多個就緒隊列,併爲每個隊列賦予不同的優先級,第1級隊列的優先級最高,第2級隊列次之,其他以此類推。
  • 賦予各個隊列中進程執行時間片的大小也各不相同,在優先級越高的隊列中,每個進程的運行時間片越小。一般低一級的隊列中時間片大小是緊鄰高一級隊列時間片大小的二倍。
  • 當一個新進程進入內存後,首先將它放入低級隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如果它能在該時間片內完成,便可撤離系統;如果它在一個時間片內尚未完成,調度程序便將該進程轉入第2級隊列的末尾,再同樣按FCFS原則僅從執行;以此類推。
  • 僅當高優先級的隊列爲空時,調度程序才調度第2級隊列中的進程運行。如果處理機正在執行第i級隊列中的某個進程時,又有新進程進入優先級較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程會搶佔正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i級隊列的末尾,把處理機分配給新到的更高優先級的進程。

(2)系統參數設計

  • 輸入數據參數:進程名稱、進程到達時間、運行時間、時間片長度;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間。

(3)算法設計

先進行數據的預處理。系統設置3個不同優先級就緒隊列,優先級分別爲1、2、3,1爲最高優先級,3爲最低優先級。所有進程到達後先進入最高優先級的隊列q1,然後取q1中的隊首進程,爲其分配處理機,獲得時間片大小爲q。當時間片結束後,該進程仍未完成,則進程進入低一級優先級隊列q2的隊尾;當高優先級隊列爲空時,低優先級隊列中的進程依次獲得時間片長度爲2*q;如果時間片結束,該進程進入最低一級優先級隊列q3的隊尾,運行時獲得4*q的時間片長度,如果時間片結束後,該進程仍未完成,則進入當前優先級隊列的隊尾,等待運行。當低優先級進程運行時,有高優先級進程到達,低優先級進程被迫釋放處理機,進入當前優先級隊列的隊尾,高優先級進程獲得處理機運行。

2.1.5高響應比優先調度算法

(1)算法核心思想

高響應比優先調度算法時對先來先服務(FCFS)調度算法和短作業優先(SJF)調度算法的綜合平衡,同時考慮每個作業的等待時間和估計的運行時間。在每次進行作業調度時,先計算後備作業隊列每個作業的響應比,從中選出響應比最高的作業投入運行。

響應比的計算公式可描述爲

響應比Rp=等待時間+要求服務時間要求服務時間 

  • 當作業的等待時間相同時,則要求服務時間越短,其響應比越高,有利於短作業。
  • 當要求服務時間相同時,作業的響應比由其等待時間決定,等待時間越長,其響應比越高,因而它實現的是先來先服務。
  • 對於長作業,作業的響應比可以隨等待時間的增加而提高,當其等待時間足夠長時,其響應比便可升到很高,從而也可獲得處理機。克服了飢餓狀態,兼顧長作業。

(2)系統參數設計

  • 輸入數據參數:進程名稱、進程到達時間、運行時間、時間片長度;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間。

(3)算法設計

先進行數據的預處理。建立一個鏈表存儲就緒隊列中的進程,每次執行前,先計算隊列中所有進程的響應比,選擇響應比最高的進程,爲其分配處理機,該進程運行完成後,時刻表更新,再重新計算就緒隊列中各進程的響應比,繼續運行。

2.1.6短作業優先調度算法

(1)算法核心思想

短作業優先(SJF)算法是從後備隊列中選擇一個或若干個估計運行時間最短的作業,將它們調入內存運行。而短進程優先(SPF)調度算法,則是從就緒隊列中選擇一個估計運行時間最短的進程,將處理機分配給它,使之立即執行, 直到完成或發生某件事而阻塞時,才釋放處理機。

(2)系統參數設計

  • 輸入數據參數:進程名稱、進程到達時間、運行時間;
  • 輸出數據參數:序號、進程名、到達時間、運行時間、運行結束時間。

(3)算法設計

先進行數據的預處理。對就緒隊列中的進程按照執行時間的長度遞增序列進行排序,選擇執行時間最短的進程,爲其分配處理機。新的進程到達後,進入就緒隊列,每次計算,按照上述方式運行進程。

2.2磁盤調度算法模擬設計

2.2.1先來先服務調度算法

(1)算法核心思想

FCFS算法根據進程請求訪問磁盤的先後順序進行調度。具有公平性,但是算法性能往往接近於隨機調度。

(2)系統參數設計

  • 輸入數據參數:磁頭初始位置、磁道名稱、磁道號;
  • 輸出數據參數:序號、磁道名稱、磁道號、尋到距離、平均尋道時間。

(3)算法設計

系統設置ArrayList<OSTrack>鏈表,用來存儲磁盤信息,按照用戶的輸入順序進行磁針的移動,每次移動磁針時計算磁針移動距離,並且記錄下來,模擬結束,計算平均尋道時間。

2.2.2最短尋道時間優先調度算法

(1)算法核心思想

SSTF算法選擇調度處理的磁道是與當前磁頭所在磁道距離最近的磁道,以使每次的尋找時間最短。該算法不能保證平均尋找時間最小,還可能會產生“飢餓”現象。

(2)系統參數設計

  • 輸入數據參數:磁頭初始位置、磁道名稱、磁道號;
  • 輸出數據參數:序號、磁道名稱、磁道號、尋到距離、平均尋道時間。

(3)算法設計

系統設置ArrayList<OSTrack>鏈表,用來存儲磁盤信息,將磁盤按照磁道號遞增順序進行排序,選取距離磁頭最近的磁道,將磁針移向該磁道,並且更新磁針記錄,每次移動磁針時計算磁針移動距離,並且記錄下來,模擬結束,計算平均尋道時間。

2.2.3掃描調度算法

(1)算法核心思想

SCAN算法在磁頭當前移動方向上選擇與當前磁頭所在磁道距離最近的請求作爲下一次服務的對象,實際上就是在最短尋找時間優先算法的基礎上規定了磁頭運動的方向。

(2)系統參數設計

  • 輸入數據參數:磁頭初始位置、磁道名稱、磁道號;
  • 輸出數據參數:序號、磁道名稱、磁道號、尋到距離、平均尋道時間。

(3)算法設計

系統設置ArrayList<OSTrack>鏈表,用來存儲磁盤信息,將磁盤按照磁道號遞增順序進行排序,從此時磁針位置開始向磁道號遞增方向掃描鏈表中的磁道到達最外層磁道後,再向磁道號遞減方向掃描,訪問磁道;到達最內層刺刀後,再次轉向磁道號遞增方向進行磁道掃描。每次移動磁針時計算磁針移動距離,並且記錄下來,模擬結束,計算平均尋道時間。

2.2.4循環掃描調度算法

(1)算法核心思想

在掃描算法的基礎上規定磁頭單向移動來提供服務回返時直接快速移動至起始端而不服務任何請求。

(2)系統參數設計

  • 輸入數據參數:磁頭初始位置、磁道名稱、磁道號;
  • 輸出數據參數:序號、磁道名稱、磁道號、尋到距離、平均尋道時間。

(3)算法設計

該算法與上述掃描調度算法類似,唯一不同的地方是磁針移動方向一直爲磁道號遞增方向,到達最外層磁道後,磁針直接返回到最內層需要訪問的磁道,再次向磁道號遞增方向進行掃描。

2.3請求分頁頁面置換算法模擬設計

2.3.1先進先出頁面置換算法

(1)算法核心思想

優先淘汰最早進入內存的頁面,亦即在內存中駐留時間最久的頁面。該算法可能會出現Belady現象。

(2)系統參數設計

  • 輸入數據參數:頁表大小、頁號;
  • 輸出數據參數:序號、頁號、頁面置換過程、是否缺頁、缺頁中斷次數、缺頁率。

(3)算法設計

系統設置兩個ArrayList<OSPage>鏈表,分別用來存放所需訪問頁面信息,另一個用來存放頁表內頁面的信息。系統按照用戶輸入順序訪問頁面,先判斷所訪問頁面是否再頁表中,如果該頁面在頁表中,直接訪問該頁面;如果該頁面不在頁表中, 如果頁表未滿,則將該頁調入頁表;如果頁表已滿,則選擇目前頁表中最先進入頁表的頁面,將其換出,將新頁面存放在該位置。

2.3.2最近最久未使用頁面置換算法

(1)算法核心思想

該算法選擇最近最長時間未訪問過的頁面予以淘汰,它認爲過去一段時間內爲訪問過的頁面,在最近的將來可能也不會被訪問。該算法爲每個頁面設置一個訪問字段,來記錄頁面自上次被訪問以來所經歷的時間,淘汰頁面時選擇現有頁面中值最大的予以淘汰。

(2)系統參數設計

  • 輸入數據參數:頁表大小、頁號;
  • 輸出數據參數:序號、頁號、頁面置換過程、是否缺頁、缺頁中斷次數、缺頁率。

(3)算法設計

系統設置兩個ArrayList<OSPage>鏈表,分別用來存放所需訪問頁面信息,另一個用來存放頁表內頁面的信息。頁表中的沒頁面設置一個參數p,表示距離該頁面最後一次被訪問的時間差,頁面調入頁表時,該參數設置爲1,每訪問一次頁面,頁表中所有頁面的p參數加一。系統按照用戶輸入順序訪問頁面,先判斷所訪問頁面是否再頁表中,如果該頁面在頁表中,直接訪問該頁面;如果該頁面不在頁表中, 如果頁表未滿,則將該頁調入頁表;如果頁表已滿,選擇頁表中最久未被訪問(即參數p值最大)的頁面,將其換出,將新頁面存放在此處。

2.3.3最少使用置換算法

(1)算法核心思想

該算法爲內存中的每個頁面設置一個移位寄存器,用來記錄該頁面被訪問的頻率。頁面置換時,選擇在最近時期使用最少的頁面作爲淘汰頁。

(2)系統參數設計

  • 輸入數據參數:頁表大小、頁號;
  • 輸出數據參數:序號、頁號、頁面置換過程、是否缺頁、缺頁中斷次數、缺頁率。

(3)算法設計

該算法與上述最近最久未使用算法類似,不同的是,在本算法中,參數p表示該頁面調入頁表後被訪問的次數。當有新的頁面被訪問時,選擇也表中被訪問此次數最少(即p參數最小)的進程,將其換出。

2.3.4輪轉置換算法

(1)算法核心思想

該算法爲每頁設置移位訪問位,再將內存中的所有頁面都通過鏈接指針鏈接成一個循環隊列。當某頁被訪問時,其訪問爲置1。置換算法在選擇一頁淘汰時,只需檢查頁的訪問頁。如果是0,就選擇該頁換出,若爲1,則重新將它置0,暫不換出,給予該頁第二次駐留內存的機會,再按FIFO算法檢查下一個頁面當檢查到隊列中的最後一個頁面時,若其訪問頁爲1,則返回到隊首去檢查第一個頁面。

(2)系統參數設計

  • 輸入數據參數:頁表大小、頁號;
  • 輸出數據參數:序號、頁號、頁面置換過程、是否缺頁、缺頁中斷次數、缺頁率。

(3)算法設計

系統設置兩個ArrayList<OSPage>鏈表,分別用來存放所需訪問頁面信息,另一個用來存放頁表內頁面的信息。對頁表中的每個頁面設置一個標誌位p,當p=0時,將該頁換出;若p=1,將p置爲0,繼續檢查下一個頁面。當掃描到頁面的尾部時,再轉到頁表首位繼續對頁面進行掃描。

 

3.系統展示(部分)

3.1首頁

 

3.2進程調度算法模擬實現

3.3盤調度算法模擬

3.4請求分頁頁面置換算法模擬

 

下附源代碼:

鏈接:https://pan.baidu.com/s/1Q9XvA2OptaTObFfCa41PKA 
提取碼:bchw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章