java的磁盤移臂調度算法(用於磁盤移臂調度算法)

本文目錄一覽:

在磁盤移臂調度算法中,()算法可能會隨時改變移動臂的運動方向

D

老師說的

我的解釋是

先來先服務,是按到達時間順序,一個服務完了,磁頭回去去找第二個,找到馬上執行,類推,不知道下一個什麼時候到,不能確定回到哪個點

最短尋道,是一個服務完,找離磁頭最近的那個進程,也不固定

電梯調度,磁頭固定的在兩個點之間運動,哪個進程能搭上就運行掉

單項掃描,磁頭從一邊掃到另一邊,完了立刻跳回到開頭,回來過程中不處理進程

OK!就這樣理解下

磁盤移動調度的目的是什麼,算法又有哪些呢?

磁盤它移動磁盤臂進行調度的主要目的是為了儘可能的減少輸入輸出造作中的尋找時間。磁盤調度算法有先來先服務調度算法,這個就是誰先到,誰先執行,如果有空間的話,後來的可以繼續佔用並調度,如果沒有空間的話,必須等待。再有就是最短尋找時間調度算法。還有就是電梯調度算法和單向調度算法。這些算法要根據不同的需要加以選擇。

目前常用的磁盤調度算法有哪幾種?每種算法優先考慮的問題是什麼?

(1)先來先服務(FCFS,First-Come First-Served)

此算法根據進程請求訪問磁盤的先後次序進行調度。

(2)最短尋道時間優先(SSTF ,ShortestSeekTimeFirst)

該算法選擇這樣的進程,其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,但這種調度算法卻不能保證平均尋道時間最短。

(3)掃描(SCAN)算法

SCAN算法不僅考慮到欲訪問的磁道與當前磁道的距離,更優先考慮的是磁頭的當前移動方向。

(4)循環掃描(CSCAN)算法

CSCAN算法規定磁頭單向移動,避免了掃描算法導致的某些進程磁盤請求的嚴重延遲。

(5) N-Step-SCAN和FSCAN調度算法

1) N-Step-SCAN算法。為克服前述SSTF、SCAN、CSCAN等調度算法都可能出現的磁臂停留在某處不動的情況即磁臂粘着現象,將磁盤請求隊列分成若干個長度為N的子隊列,按先來先服務算法依次處理這些子隊列,而各隊列分別以掃描算法進行處理。

2) FSCAN算法

FSCAN算法實質上是N步SCAN算法的簡化。它只將磁盤請求訪問隊列分成兩個子隊列。一是當前所有請求磁盤I/O的進程形成的隊列,由磁盤調度按SCAN算法進行處理。另一個隊列則是在 掃描期間,新出現的所有請求磁盤I/O進程的隊列,放入另一等待處理的請求隊列。這樣,所有的新請求都將被推遲到下一次掃描時處理。

求磁盤調度算法scan算法的java代碼

1、先來先服務算法(FCFS)First Come First Service

這是一種比較簡單的磁盤調度算法。它根據進程請求訪問磁盤的先後次序進行調度。此算法的優點是公平、簡單,且每個進程的請求都能依次得到處理,不會出現某一進程的請求長期得不到滿足的情況。此算法由於未對尋道進行優化,在對磁盤的訪問請求比較多的情況下,此算法將降低設備服務的吞吐量,致使平均尋道時間可能較長,但各進程得到服務的響應時間的變化幅度較小。

先來先服務 (125)86.147.91.177.94.150.102.175.130

[java] view plain copy print?

磁盤調度算法

  上文介紹了磁盤的結構,本文介紹磁盤的調度算法相關的內容。

   本文內容

   尋找時間(尋道時間) T s :在讀/寫數據前,需要將磁頭移動到指定磁道所花費的時間。

  尋道時間分兩步:

  則尋道時間 T s = s + m * n。

  磁頭移動到指定的磁道,但是不一定正好在所需要讀/寫的扇區,所以需要通過磁盤旋轉使磁頭定位到目標扇區。

   延遲時間T R :通過旋轉磁盤,使磁頭定位到目標扇區所需要的時間。設磁盤轉速為r(單位:轉/秒,或轉/分),則 平均所需延遲時間T R = (1/2)*(1/r) = 1/2r。

   傳輸時間T R :從磁盤讀出或向磁盤中寫入數據所經歷的時間,假設磁盤轉速為r,此次讀/寫的位元組數為b,每個磁道上的位元組數為N,則傳輸時間 T R = (b/N) * (1/r) = b/(rN)。

  總的平均時間 T a = T s + 1/2r + b/(rN) ,由於延遲時間和傳輸時間都是與磁盤轉速有關的,且是線性相關。而轉速又是磁盤的固有屬性,因此無法通過操作系統優化延遲時間和傳輸時間。所以只能優化尋找時間。

  算法思想: 根據進程請求訪問磁盤的先後順序進行調度。

  假設磁頭的初始位置是100號磁道,有多個進程先後陸續地請求訪問55、58、39、18、90、160、150、38、184號磁道。

  按照先來先服務算法規則,按照請求到達的順序,磁頭需要一次移動到55、58、39、18、90、160、150、38、184號磁道。

  磁頭共移動了 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 = 498個磁道。響應一個請求平均需要移動498 / 9 = 55.3個磁道(平均尋找長度)。

  優點: 公平;如果請求訪問的磁道比較集中的話,算法性能還算可以 。

  缺點: 如果大量進程競爭使用磁盤,請求訪問的磁道很分散,FCFS在性能上很差,尋道時間長 。

  算法思想: 優先處理的磁道是與當前磁頭最近的磁道。可以保證每次尋道時間最短,但是不能保證總的尋道時間最短 。(其實是貪心算法的思想,只是選擇眼前最優,但是總體未必最優)。

  假設磁頭的初始位置是100號磁道,有多個進程先後陸續地請求訪問55、58、39、18、90、160、150、38、184號磁道。

  磁頭總共移動了(100 -18)+ (184 -18) = 248個磁道。響應一個請求平均需要移動248 / 9 = 27.5個磁道(平均尋找長度)。

  缺點: 可能產生飢餓現象 。

  本例中,如果在處理18號磁道的訪問請求時又來了一個38號磁道的訪問請求,處理38號磁道的訪問請求又來了一個18號磁道訪問請求。如果有源源不斷的18號、38號磁道訪問請求,那麼150、160、184號磁道請求的訪問就永遠得不到滿足,從而產生飢餓現象。這裡產生飢餓的原因是 磁頭在一小塊區域來回移動。

  SSTF算法會產生飢餓的原因在於:磁頭有可能再一個小區域內來回得移動。為了防止這個問題,可以規定: 磁頭只有移動到請求最外側磁道或最內側磁道才可以反向移動,如果在磁頭移動的方向上已經沒有請求,就可以立即改變磁頭移動,不必移動到最內/外側的磁道。 這就是掃描算法的思想。由於磁頭移動的方式很像電梯,因此也叫 電梯算法 。

  假設某磁盤的磁道為0~200號,磁頭的初始位置是100號磁道,且此時磁頭正在往磁道號增大的方向移動,有多個進程先後陸續的訪問55、58、39、18、90、160、150、38、184號磁道。

  磁頭共移動了(184 – 100)+ (184 -18) = 250個磁道。響應一個請求平均需要移動 250 / 9 = 27.5個磁道(平均尋找長度)。

  優點: 性能較好,尋道時間較短,不會產生飢餓現象。

  缺點: SCAN算法對於各個位置磁道的響應頻率不平均 。(假設此時磁頭正在往右移動,且剛處理過90號磁道,那麼下次處理90號磁道的請求就需要等待低頭移動很長一段距離;而響應了184號磁道的請求之後,很快又可以再次響應184號磁道請求了。)

  SCAN算法對各個位置磁道的響應頻率不平均,而C-SCAN算法就是為了解決這個問題。規定只有磁頭朝某個特定方向移動時才處理磁道訪問請求,而 返回時直接快速移動至最靠邊緣的並且需要訪問的磁道上而不處理任何請求。

  通俗理解就是SCAN算在改變磁頭方向時不處理磁盤訪問請求而是直接移動到另一端最靠邊的磁盤訪問請求的磁道上。

  假設某磁盤的磁道為0~200號,磁頭的初始位置是100號磁道,且此時磁頭正在往磁道號增大的方向移動,有多個進程先後陸續的訪問55、58、39、18、90、160、150、38、184號磁道。

  磁頭共移動了(184 -100)+ (184 – 18)+(90 – 18)=322個磁道。響應一個請求平均需要移動322 / 9 = 35.8個磁道(平均尋找長度)。

  優點: 相比於SCAN算法,對於各個位置磁道響應頻率很平均。

  缺點: 相比於SCAN算法,平均尋道時間更長。

下列算法中用於磁盤移臂調度的是?

最短尋道時間優先調度算法用於磁盤移臂調度磁盤調度算法包括1.先來先服務調度算法(FCFS)2.最短尋道時間優先調度算法(SSTF)

原創文章,作者:JIDC5,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/128863.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JIDC5的頭像JIDC5
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論