操作系統磁盤調度——SCAN實例講解

      網友投稿 1242 2022-05-28

      操作系統之進程調度——優先權法和輪轉法(附上樣例講解)

      操作系統之銀行家算法—詳解流程及案例數據

      操作系統之多線程編程—讀者優先/寫者優先詳解

      操作系統之存儲管理——FIFO算法和LRU算法

      操作系統之磁盤調度——SCAN實例講解

      要求

      一、實驗目的:

      磁盤是高速、大容量、旋轉型、可直接存取的存儲設備。它作為計算機系統的輔助存儲器,擔負著繁重的輸入輸出工作,在現代計算機系統中往往同時會有若干個要求訪問磁盤的輸入輸出要求。系統可采用一種策略,盡可能按最佳次序執行訪問磁盤的請求。由于磁盤訪問時間主要受尋道時間T的影響,為此需要采用合適的尋道算法,以降低尋道時間。本實驗要求學生模擬設計一個磁盤調度程序,觀察調度程序的動態運行過程。通過實驗讓學生理解和掌握磁盤調度的職能。

      二、實驗內容:

      模擬電梯調度算法,對磁盤進行移臂操作

      三、提示及要求:

      1、假設磁盤只有一個盤面,并且磁盤是可移動頭磁盤。

      2、磁盤是可供多個進程共享的存儲設備,但一個磁盤每個時刻只能為一個進程服務。當有進程在訪問某個磁盤時,其它想訪問該磁盤的進程必須等待,直到磁盤一次工作結束。當有多個進程提出輸入輸出請求而處于等待狀態時,可用電梯調度算法從若干個等待訪問者中選擇一個進程,讓它訪問磁盤。為此設置“驅動調度”進程。

      3、由于磁盤與處理器是并行工作的,所以當磁盤在為一個進程服務時,占有處理器的其它進程可以提出使用磁盤(這里我們只要求訪問磁道),即動態申請訪問磁道,為此設置“接受請求”進程。

      4、為了模擬以上兩個進程的執行,可以考慮使用隨機數來確定二者的允許順序,程序結構圖參考附圖:

      5、“接受請求”進程建立一張“進程請求I/O”表,指出等待訪問磁盤的進程要求訪問的磁道,表的格式如下:

      | 進程名 | 要訪問的磁道 |

      |進程id| 磁道號:|

      6、 “磁盤調度”的功能是查“請求I/O”表,當有等待訪問的進程時,按電梯調度算法(SCAN算法)從中選擇一個等待訪問的進程,按其指定的要求訪問磁道。SCAN算法參考課本第九章。算法模擬框圖略。

      7、附圖中的“初始化”工作包括:初始化“請求I/O”表,設置置當前移臂方向;當前磁道號。并且假設程序運行前“請求I/O”表中已有若干進程(4~8個)申請訪問相應磁道。

      四、實驗報告:

      1、實驗題目。

      2、程序中用到的數據結構及其說明。

      3、打印源程序并附注釋。

      4、實驗結果內容如下:打印“請求I/O”表,當前磁道號,移臂方向,被選中的進程名和其要求訪問的磁道,看是否體現了電梯調度(SCAN)算法。體會與問題。

      五、 附圖:

      理解

      上面就是實驗要求。

      本實驗的核心就是對SCAN算法的理解,SCAN被稱為梯度算法。因為它不僅兼顧距離的遠近還兼顧方向性。

      Scan算法思想大致為:

      當設備無訪問請求時,磁頭不動;

      當有訪問請求時,磁頭按一個方向移動,在移 [2] 動過程中對遇到的訪問請求進行服務,然后判斷該方向上是否還有訪問請求,如果有則繼續掃描;否則改變移動方向,并為經過的訪問請求服務,如此反復。

      如下圖所示:

      代碼

      這大致就是流程,當然,你可以動態的增加io請求(接受請求)。

      附上代碼:

      import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class 磁盤調度 { private static void getstatus(Listlist) { // TODO 自動生成的方法存根 System.out.println("進程id: 磁道: 是否調度?:"); for(int i=0;i list, int index, int cidao) { if(index==1)//向左面 { int mid=0; for(int i=0;i<=list.size();i ) { if(list.get(i).cidao>cidao&&list.get(i).isdiaodu==false) { mid=i-1;break; } } while(mid>=0) { if(list.get(mid).isdiaodu==false) { io io=list.get(mid); io.isdiaodu=true; System.out.println("進程" io.id " 磁道:" io.cidao " 已經調度"); } mid--; } mid ; while(midcidao&&list.get(i).isdiaodu==false) { mid=i;break; } } while(mid=0) { if(list.get(mid).isdiaodu==false) { io io=list.get(mid); io.isdiaodu=true; System.out.println("進程" io.id " 磁道:" io.cidao " 已經調度"); } mid--; } } } public static void main(String[] args) { // TODO 自動生成的方法存根 Scanner sc=new Scanner(System.in); System.out.println("請輸入訪問磁盤的進程數量"); int n=sc.nextInt(); System.out.println("請輸入訪問進程的id和磁道號"); Listlist=new ArrayList<>(); for(int i=0;icompare=new Comparator( ) { @Override public int compare(io o1, io o2) { // TODO 自動生成的方法存根 return o1.cidao-o2.cidao; } }; static class io { int id; int cidao; boolean isdiaodu; public io(int id,int cidao) { this.id=id; this.cidao=cidao; } } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      操作系統之磁盤調度——SCAN實例講解

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      輸出案例

      測試數據:

      若有錯誤的地方,還請大神指正。

      如果對后端、爬蟲、數據結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Netty - 探究PageCache磁盤高速緩存
      下一篇:10.14 Linux fdisk命令詳解:給硬盤分區
      相關文章
      久久亚洲日韩看片无码| 亚洲Av无码精品色午夜 | 亚洲一区二区三区成人网站| 亚洲αv久久久噜噜噜噜噜| 久久亚洲国产午夜精品理论片| 国产亚洲av人片在线观看| 国产AV日韩A∨亚洲AV电影| 最新亚洲人成网站在线观看| 国产91成人精品亚洲精品| 国产在亚洲线视频观看| 亚洲精品tv久久久久久久久久| 国产成人综合亚洲绿色| 无码天堂亚洲国产AV| 亚洲国产欧美一区二区三区| 亚洲AV成人精品一区二区三区| 国产精品亚洲va在线观看| 亚洲裸男gv网站| 亚洲日韩精品一区二区三区| 亚洲成A人片在线观看无码不卡| 国产亚洲人成网站观看| 五月天网站亚洲小说| 亚洲精品无码久久久久久久| 亚洲国产av一区二区三区丶| 亚洲一级特黄特黄的大片 | 亚洲av中文无码乱人伦在线播放 | 亚洲精品国产高清在线观看| 色婷婷亚洲一区二区三区| 亚洲人成网站色在线入口| 中文字幕在亚洲第一在线| 亚洲成av人在线视| 亚洲黄色高清视频| 国产亚洲精aa在线看| 老子影院午夜伦不卡亚洲| 最新精品亚洲成a人在线观看| 亚洲中文字幕无码一区| 亚洲AV永久无码精品成人| 亚洲毛片在线观看| 亚洲第一页在线视频| 亚洲综合一区无码精品| 亚洲成a人无码av波多野按摩| 亚洲综合国产精品第一页|