操作系統———磁盤調度算法模擬

  • 實驗目的

?磁盤是可供多個進程共享的設備,當有多個進程都要求訪問磁盤是,應采用一種最佳調度算法,以使各進程對磁盤的平均訪問時間最小。目前最成用的磁盤調度算法有先來先服務(FCFS),最短尋道時間優先(SSTF),以及掃描算法(SCAN)。通過本實驗可以加深理解有關磁盤調度的目標,并體會和了解最短尋道時間優先算法和掃描算法的具體實施辦法。

  • 實驗內容

1 100#磁道開始,被訪問的磁道號分別為:555839189016015038184

2 要求用最短尋道時間優先算法的和掃描算法實現磁盤調度。

3 記錄下每訪問一個磁道磁頭移動的磁道數,并計算平均尋道長度(平均移動磁道數)。,,

  • 實驗要求

分別用兩種算法實現磁盤調度。在實驗結果分析中,將比較結果以列表的形式表現出來。用數組(或鏈表)TR[ ]存儲待訪問磁道號,將每次磁頭移動磁道數用數組AR[ ] 存儲。輸出結果應如下例:(注意空格)

150

50

160

10

184

24

18,,

166

38

20

39

1

55

16

58

3

90

32

平均尋道長度:35.8

  • 編程工具:

C++語言平臺(DevC++開發工具)

五、

(1)問題概述

  1. 磁盤調度算法的目的是優化磁盤I/O操作,減少磁頭移動距離,從而提高磁盤I/O效率。
  2. 常見的磁盤調度算法包括:先來先服務(FCFS)算法、最短尋道時間優先(SSTF)算法、輪轉優先(SCAN)算法、最少最近使用(LRU)算法等。
  3. FCFS算法按請求到達順序依次處理請求,簡單但效率低下。SSTF算法選擇離當前磁頭位置最近的請求處理,可以減少磁頭移動但難以實現。
  4. SCAN算法將磁盤劃分為多個區,依次掃描每個區處理請求,減少磁頭移動但響應時間長。LRU算法優先處理最近最久未使用的磁盤塊,需要記錄使用信息增加開銷。

(2)整體功能及設計

通過構建最短尋道時間優先算法函數、構建掃描算法函數,然后將創作主函數循環調用,并能夠輸出調度過程以及平均尋道長度。

(3)編程實現(附代碼和截圖)

#include<stdio.h> 
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
//55 58 39 18 90 160 150 38 184
void SSTF(int a[], int n) {//最短尋道時間優先調度int site = 1;//確定開始磁道中間位置int m, Left, Right;int i, j, sum = 0;double Average=0;int Temp; sort(a, a + n);//對磁道號進行從小到大排列printf("排序后磁道數組如下:\n");for (i = 0; i < n; i++) //輸出排序后的磁道號數組printf("%d ", a[i]);printf("\n請輸入開始的磁道號: ");scanf("%d", &m);printf("\nSSTF(最短尋道優先)調度過程如下: \n");printf("\n被訪問的下一個磁道號             移動距離(磁道數)\n"); int mark = m;//用來計算差值或移動距離if (a[n - 1] <= m)//整個數組里的數都小于開始磁道號的情況{for (i = n - 1; i >= 0; i--) { //將數組磁道號就逆序輸出printf("%10d ---------------------- %-3d\n", a[i], mark - a[i]);mark = a[i];}sum = m - a[0];}else if (a[0] >= m)//整個數組里的數都大于開始磁道號的情況{for (i = 0; i < n; i++) { //將磁道號從小到大順序輸出printf("%10d ---------------------- %-3d\n", a[i], a[i] - mark);mark = a[i];}sum = a[n - 1] - m;}else{while (a[site] < m)//找位置{site++;}Left = site - 1;Right = site;//確定開始磁道在已排的序列中的位置while ((Left >= 0) && (Right < n)){if ((m - a[Left]) <= (a[Right] - m))//找最短距離是在左側還是右側{printf("%10d ---------------------- %-3d\n", a[Left], mark - a[Left]);mark = a[Left];sum += m - a[Left];m = a[Left];Left = Left - 1;}else//在右側{printf("%10d ---------------------- %-3d\n", a[Right], a[Right] - mark);mark = a[Right];sum += a[Right] - m;m = a[Right];Right = Right + 1;}}if (Left = -1){for (j = Right; j < n; j++)//順序輸出 {printf("%10d ---------------------- %-3d\n", a[j], a[j] - mark);mark = a[j];}sum += a[n - 1] - a[0];}else{for (j = Left; j >= 0; j--)//逆序輸出 {printf("%10d ---------------------- %-3d\n", a[j], mark - a[j]);mark = a[j];}sum += a[n - 1] - a[0];}}printf("\n");Average = (double)sum / n;printf(" 可見平均尋道的長度為: %.2f \n", Average);
}void SCAN(int a[], int n) {///掃描算法或電梯調度算法int i, j, sum = 0;double Average;for (i = 0; i < n; i++){sort(a, a + n);//升序排序}printf("排序后的磁道數組如下:\n");for (i = 0; i < n; i++){printf("%d ", a[i]);}printf("\n請輸入開始的磁道號: ");int m;scanf("%d", &m);printf("\nSCAN(掃描或電梯)調度過程如下:\n");printf("\n被訪問的下一個磁道號             移動距離(磁道數)\n"); int pointer;int mark = m;for (i = 0; i < n; i++){if (a[i] >= m)//找到比開始磁道號大的數 {pointer = i;sum += abs(a[i] - m);break;}}for (i = pointer; i < n; i++){if (i != pointer)//順著磁頭方向順序輸出 sum += abs(a[i] - a[i - 1]);printf("%10d ---------------------- %-3d\n", a[i], a[i] - mark);mark = a[i];}if (pointer >= 1)sum += abs(a[n - 1] - a[pointer - 1]);for (i = pointer - 1; i >= 0; i--)//逆著磁頭方向順序輸出 {if (i)sum += abs(a[i] - a[i - 1]);printf("%10d ---------------------- %-3d\n", a[i], mark - a[i]);mark = a[i];}Average = (double)sum / n;printf("\n 平均尋道的長度為:%.2f\n", Average);
}
int main() {int track[100];//定義磁道號數組int select;int i = 0;int n;printf("請先輸入磁道數量: \n");scanf("%d", &n);printf("請先輸入磁道序列: \n");for (i = 0; i < n; i++){scanf("%d", &track[i]);}printf("\n");while (1){printf("1.最短尋道時間優先算法(SSTF) \n");printf("2.掃描算法(SCAN)\n");printf("3.退出\n");printf("\n");printf("請選擇要使用的調度算法: ");scanf("%d", &select);switch (select)//算法選擇{case 1:SSTF(track, n);//最短服務時間優先算法printf("\n");break;case 2:SCAN(track, n);//掃描算法printf("\n");break;case 3:exit(0);}}return 0;
}

(4)使用說明

輸入磁道數量、輸入磁道序列、然后回車根據菜單選擇相應的調度算法。

(5)結果分析

1. 最短尋道時間優先算法(Shortest Seek Time First, SSTF)

- 優點:能有效減少磁頭移動距離,從而減少平均I/O等待時間。

- 缺點:可能導致 starvation,后來請求的I/O等待時間可能很長。

2. 掃描算法(SCAN)

- 優點:能較好避免 starvation 問題,后來請求不會等待過長時間。

- 缺點:磁頭移動距離可能較大,平均I/O等待時間較長。

3. 對比分析:

- SSTF算法在減少磁頭移動距離上優于SCAN算法,平均I/O等待時間可能較短。

- 但SSTF可能出現一個請求等待時間特別長的情況,不如SCAN在公平性上。

- SSTF更依賴請求分布,如果請求分布不均勻,性能下降明顯。

- SCAN算法性能更穩定,不易受請求分布影響。但移動距離較大,平均等待時間較長。

4. 綜上,在I/O等待時間優先的場景下,SSTF算法效果較好;在公平性和穩定性要求較高的場景,SCAN算法更適用。

5. 實際使用中,也可以根據負載動態調整兩種算法,兼顧等待時間和公平性的優點。

所以兩種算法各有優劣,需要根據實際場景具體選擇或結合使用,以達到最佳磁盤調度效果。

(6)設計體會

操作系統磁盤調度算法設計和實現給我帶來以下幾點體會:

1. 磁盤調度算法直接影響系統I/O性能,是操作系統優化的重要一環。不同算法在不同場景下會有很大差異。

2. 算法設計需要考慮公平性、等待時間、移動距離等多方面因素,難度較大。一個好的算法需要兼顧各項指標。

3. 實際系統I/O請求模式復雜,簡單的算法在實際中效果可能不如預期。需要結合負載動態調整策略。

4. 算法實現需要考慮多磁盤和多請求并發場景,數據結構和同步機制的設計很重要。

5. 不同算法在不同系統和應用場景下性能也會有差異。需要通過實驗對比分析不同參數和場景下的優劣。

7. 算法是一個需要不斷優化和更新的模塊。需要提供良好的擴展接口支持后期升級。

8. 理解主流算法原理和思路,對設計和優化自己的算法很有幫助。

9. 磁盤調度涉及操作系統、算法和性能優化多個知識點。整個設計過程讓我對系統有了更深入的認識。

總體來說,磁盤調度算法設計是一個系統性和實踐性很強的學習過程,給我帶來很多收獲。它也反映了操作系統研發需要考慮的各個方面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot的配置文件

配置文件的作用 整個項目中所有重要的數據都是在配置文件中配置&#xff0c;如數據庫的連接信息&#xff0c;項目的啟動端口&#xff0c;用于發現和定位問題的普通日志和異常日志等等。配置文件可以分為兩類 系統使用的配置文件&#xff08;系統配置文件&#xff09;&#xf…

【Kotlin】

Lambda 就是一小段可以作為參數傳遞的代碼。 因為正常情況下&#xff0c;我們向某個函數傳參時只能傳入變量&#xff0c;而借助Lambda 卻允許傳入一小段代碼。 Lambda 表達式的語法結構&#xff1a; {參數名1: 參數類型, 參數名2: 參數類型 -> 函數體}首先&#xff0c;最外…

JS基礎源碼之手寫模擬new

JS基礎源碼之手寫模擬new 手寫模擬new初步實現最終實現 手寫模擬new new 運算符創建一個用戶定義的對象類型的實例或具有構造函數的內置對象類型之一。 我們先看看new實現了哪些功能&#xff1a; function Person (name,age){this.name name;this.age age;this.habit Games;…

開發猿的平平淡淡周末---2023/12/9

上周回顧 完成了遺留的開發任務&#xff0c;基本全部完成進一步了解了系統當時設計的原理熟悉了代碼的重構 2023.12.9 天氣晴 溫度適宜 前言 小伙伴們大家好&#xff0c;時間很快&#xff0c;又來到了周末&#xff0c;也是一個平平淡淡的周末。上周只更了一篇博客...原…

滲透測試 | 滲透測試之信息收集

滲透測試&#xff08;penetration test&#xff0c;pentest&#xff09;是實施安全評估&#xff08;即審計&#xff09;的具體手段。 滲透測試可能是單獨進行的一項工作&#xff0c;也可能是常規研發生命周期&#xff08;例如&#xff0c;Microsoft SDLC&#xff09;里 IT 安全…

Unicode編碼解碼

一、Unicode概述 Unicode是一種字符編碼標準&#xff0c;旨在解決不同字符集之間的兼容性問題。它為全球所有語言提供了一種統一的編碼方式&#xff0c;使得各種字符能夠在計算機系統中正確顯示和處理。Unicode字符集包含了世界上幾乎所有的字符&#xff0c;包括中文字符、英文…

算法Day23 簡單吃飯(0-1背包)

簡單吃飯&#xff08;0-1背包&#xff09; Description Input Output Sample 代碼 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int total scanner.nextInt(…

WebDriver核心方法和屬性:掌握自動化測試的利器

在自動化測試中&#xff0c;Selenium WebDriver是一個非常重要的工具。它提供了一種方式來模擬用戶與瀏覽器的交互&#xff0c;從而進行各種操作&#xff0c;如點擊按鈕、輸入文本等。本文將介紹WebDriver的核心方法和屬性&#xff0c;以及如何使用它們。 1. 啟動和關閉瀏覽器…

使用es256算法生成jwt

1、使用hutool來做 1、先去jwt解密/加密 - bejson在線工具弄個公私鑰 2、導入hutool maven <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><depe…

高項備考葵花寶典-項目進度管理輸入、輸出、工具和技術(中,很詳細考試必過)

項目進度管理的目標是使項目按時完成。有效的進度管理是項目管理成功的關鍵之一&#xff0c;進度問題在項目生命周期內引起的沖突最多。 小型項目中&#xff0c;定義活動、排列活動順序、估算活動持續時間及制定進度模型形成進度計劃等過程的聯系非常密切&#xff0c;可以視為一…

Pytorch中的resize和reshape

torch.reshape() 官方文檔的大致意思是&#xff1a; 返回與輸入具有相同數據和元素數量的張量&#xff0c;但是具有指定形狀。如果可能&#xff0c;返回的張量將是輸入的視圖&#xff0c;也就是說原本的tensor并沒有被改變&#xff0c;如果想要改變那么就將改變的tensor賦值給…

情深不必糾纏

那一年&#xff0c;男孩女孩在萬千人中相遇了。多年后女人的一封郵件&#xff0c;讓男人與女人的靈魂相遇了。他們無緣夫妻&#xff0c;卻發現彼此是靈魂的陪伴。不能攜手相守&#xff0c;卻懂得彼此的心靈。 有一天&#xff0c;女人告訴男人要回家了&#xff0c;問男人心里會不…

ejs —— 三目運算符的用法

EJS&#xff08;Embedded JavaScript&#xff09;是一種簡單的模板語言&#xff0c;它允許將JavaScript代碼嵌入到HTML中。在EJS中&#xff0c;<%、<%和<%-是用于將JavaScript代碼嵌入到模板中的語法。 <%&#xff1a;這是EJS的輸出表達式&#xff0c;用于將變量的…

阿里云安裝docker

文章目錄 一、 yum 進行安裝&#xff08;os版本 CentOS 7&#xff09; 推薦二、 apt-get 進行安裝(os版本 Ubuntu 14.04/16.04&#xff09;三、測試四、阿里云docker加速 一、 yum 進行安裝&#xff08;os版本 CentOS 7&#xff09; 推薦 # step 1: 安裝必要的一些系統工具 su…

<HarmonyOS第一課>應用服務上架【課后考核】

【習題】HarmonyOS應用/元服務上架 判斷題 元服務發布的國家與地區僅限于“中國大陸” 正確(True) 編譯打包的軟件包存放在項目目錄build > outputs > default下 正確(True) 單選題 創建應用時&#xff0c;應用包名需要和app.json5或者config.json文件中哪個字段保持…

VMware安裝Ubuntu20.04并使用Xshell連接虛擬機

文章目錄 虛擬機環境準備重置虛擬網絡適配器屬性&#xff08;可選&#xff09;配置NAT模式的靜態IP創建虛擬機虛擬機安裝配置 Xshell連接虛擬機 虛擬機環境準備 VMware WorkStation Pro 17.5&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGr…

基于Java旅游信息管理系統

基于Java旅游信息管理系統 功能需求 1、旅游目的地管理&#xff1a;系統需要能夠記錄和管理各個旅游目的地的詳細信息&#xff0c;包括景點介紹、交通方式、住宿推薦等。管理員可以添加、編輯和刪除目的地信息。 2、旅游線路規劃&#xff1a;系統需要提供旅游線路規劃功能&a…

C++類名后面跟大括號和跟小括號的區別

在 C 中&#xff0c;類名后面跟著大括號 {} 和小括號 () 有不同的含義和作用。 大括號 {}&#xff1a; 初始化對象&#xff1a;當在聲明類對象時使用大括號 {} 時&#xff0c;這表示對對象進行初始化。這種方式也稱為列表初始化或者統一初始化。示例&#xff1a;MyClass obj{};…

網上下載的pdf文件,為什么不能復制文字?

不知道大家有沒有到過這種情況&#xff1f;在網上下載的PDF文件打開之后&#xff0c;發現選中文字之后無法復制。甚至其他功能也都無法使用&#xff0c;這是怎么回事&#xff1f;該怎么辦&#xff1f; 當我們發現文件打開之后&#xff0c;編輯功能無法使用&#xff0c;很可能是…

AlexNet

概念 過擬合:根本原因是特征維度過多&#xff0c;模型假設過于復雜&#xff0c;參數過多&#xff0c;訓練數據過少&#xff0c;噪聲過多&#xff0c;導致擬合的函數完美的預測訓練集&#xff0c;但對新數據的測試集預測結果差。 過度的擬合了訓練數據&#xff0c;而沒有考慮到…