日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

深入理解 操作系统 SJF算法(以洛谷P1223题为例)

發布時間:2025/3/15 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解 操作系统 SJF算法(以洛谷P1223题为例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CPU Scheduling Algorithms

重要的CPU調度算法如下:

  • FCFS Scheduling(First-Come, First-Served)
  • SJF Scheduling(Shortest-Job-First)
    • Non-Preemptive SJF Scheduling
    • Preemptive SJF Scheduling
  • Priority Scheduling
  • RR Scheduling(Round Robin)

FCFS與SJF

這里只說FCFS和SJF。


先到先服務調度:先請求CPU的進程被首先分配到CPU,可采用FIFO隊列實現。


ProcessBurst Time
P124
P23
P33

Suppose that the processes arrive in the order: P1 , P2 , P3 The Gantt Chart for the schedule is:

Waiting time for P1 = 0; P2 = 24; P3 = 27
Average waiting time: (0 + 24 + 27)/3 = 17

FCFS策略的平均等待時間通常相當長。例子中,平均等待時間為17ms。


Suppose that the processes arrive in the order: P2 , P3 , P1 The Gantt chart for the schedule is:

Waiting time for P1 = 6; P2 = 0; P3 = 3
Average waiting time: (6 + 0 + 3)/3 = 3
Convoy effect : short process behind long process.

進程區間變化很大時,平均等待時間也會變化很大。
護航現象(convoy effect):所有其他進程都等待一個大進程釋放CPU,導致CPU和設備的使用率變得更低。
FCFS調度算法是非搶占的。一旦CPU被分配給了一個進程,該進程就會保持CPU知道釋放CPU為止。


最短作業優先調度:將每個進程與其下一個CPU區間相關聯。當CPU為可用時,它會賦給具有最短后續CPU區間的進程。如果兩個進程具有同樣長度的CPU區間,那么可以使用FCFS調度來處理。


ProcessBurst Time
P16
P28
P37
P43

The Gantt Chart for the schedule is:

Waiting time for P1 = 3; P2 = 16; P3 = 9; P4 = 0
Average waiting time: (3 + 16 + 9 + 0)/4 = 7

如果使用FCFS調度方案,平均等待時間為10.25ms。
可以證明對于給定的一組進程SJF算法的平均等待時間最小。通過將短進程移到長進程之前,短進程等待時間的減少大于長進程等待時間的增加。因而,平均等待時間減少了。

詳解SJF

SJF的困難是如何知道下一個CPU請求的長度。
對于長期調度:可以使用用戶在提交作業時制定的作業時間極限作為長度,因此,在長期調度中經常使用SJF。
對于短期調度:無法獲得下一個CPU區間的長度,因此,只能試圖近似SJF調度。


SJF算法可能是搶占的或非搶占的。
當一個新進程到達就緒隊列而以前進程正在執行時,就需要選擇。新進程與當前運行進程所產生的CPU區間相比,可能有一個更短的下一個CPU區間。
可搶占SJF算法可能會搶占當前運行進程,有時稱最短剩余時間優先調度;
非搶占SJF算法會允許當前運行進程先完成其CPU區間。


ProcessArrival TimeBurst Time
P10.07
P22.04
P34.01
P45.04

SJF (non-preemptive)


Waiting time for P1 = 0; P2 = 6; P3 = 3; P4 = 7
Average waiting time = (0 + 6 + 3 + 7)/4 = 4


ProcessArrival TimeBurst Time
P10.07
P22.04
P34.01
P45.04

SJF (preemptive)

Waiting time for P1 = 9; P2 = 1; P3 = 0; P4 = 2
Average waiting time = (9 + 1 + 0 +2)/4 = 3


洛谷P1223題

題目要求

P1223題目鏈接

分析

其實本題正是如此,OS難以知道和確定接下來哪個進程剩余時間最短,但這里知道啊!

所謂的“最優策略”,來自于貪心算法,需要先排個序,耗時短的先結束任務可以使得總平均等待時間最短。

AC代碼(Java語言描述)

import java.util.Arrays; import java.util.Comparator; import java.util.Scanner;public class Main {private static class Person {Integer time;int id;public Person(int time, int id) {this.time = time;this.id = id;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();Person[] array = new Person[num];for (int i = 0; i < num; i++) {array[i] = new Person(scanner.nextInt(), i+1);}scanner.close();Arrays.sort(array, Comparator.comparing(person -> person.time));long waitingTime = 0, sum = 0;StringBuilder result = new StringBuilder();for (Person p : array) {waitingTime += sum;sum += p.time;result.append(p.id).append(" ");}System.out.println(result.toString().trim());System.out.printf("%.2f", waitingTime/(double)num);} }

總結

FCFS算法和SJF算法是兩種重要的算法。FCFS其實基于普通隊列即可實現。比起算法本身,更重要的是領會到SJF算法的思想,并能在處理實際問題的時候得以啟發,這樣就很好啦!

另外,OS 的 SJF CPU調度算法也應該深刻理解,這是涉及計算機原理的重要知識。

希望對不懂SJF算法的讀者一些啟示,也希望幫助對洛谷P1223題理解不深的讀者加深理解。
總之,希望對大家有所幫助!

總結

以上是生活随笔為你收集整理的深入理解 操作系统 SJF算法(以洛谷P1223题为例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。