<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 調度,第 2 部分:調度過程:算法 > 原文:<https://github.com/angrave/SystemProgramming/wiki/Scheduling%2C-Part-2%3A-Scheduling-Processes%3A-Algorithms> ## 什么是眾所周知的調度算法? 對于所有的例子, 過程 1:運行時 1000ms 過程 2:運行時 2000ms 過程 3:運行時 3000ms 過程 4:運行時 4000ms 過程 5:運行時 5000ms ## 最短的工作優先(SJF) ![](https://img.kancloud.cn/0d/49/0d49b79ff99e485b5daed82421ca73c9_604x340.jpg) * P1 到達:0ms * P2 到達:0ms * P3 到達:0ms * P4 到達:0ms * P5 到貨:0ms 這些進程都在開始時到達,并且調度程序以最短的總 CPU 時間調度作業。明顯的問題是這個調度程序需要知道該程序在運行程序之前將持續運行多長時間。 技術說明:實際的 SJF 實現不會使用進程的總執行時間,而是使用突發時間(包括將來計算執行之前的總 CPU 時間將不再準備好運行)。可以通過使用基于先前突發時間的指數衰減加權滾動平均來估計預期突發時間,但是對于該展示,我們將簡化該討論以使用該過程的總運行時間作為突發時間的代理。 **優勢** * 較短的工作往往先運行 **缺點** * 需要算法是無所不知的 ## 搶先最短的工作優先(PSJF) 先搶先最短的作業首先是最短的作業,但是如果新作業的運行時間短于過程的剩余運行時間,則運行該作業。 (如果它與我們的算法相同,我們的算法可以選擇)。調度程序使用進程的總運行時間,如果你想剩下最短 _ 剩余 _ 時間,那就是 PSJF 的變體,稱為 Shortest Remaining Time First。 ![](https://img.kancloud.cn/8e/aa/8eaa82e20d259820cb53b2dd149bcd37_605x340.jpg) * P2 在 0ms * P1 在 1000ms * P5 在 3000ms * P4 在 4000ms * P3 在 5000ms 這是我們的算法所做的。它運行 P2 因為它是唯一運行的東西。然后 P1 進入 1000ms,P2 運行 2000ms,所以我們的調度程序先發制人地停止 P2,讓 P1 一直運行(這完全取決于算法因為時間相等)。然后,P5 進入 - 由于沒有進程正在運行,調度程序將運行進程 5.P4 進入,并且由于運行時間等于 P5,調度程序停止 P5 并運行 P4。最后 P3 進入,搶占 P4,并運行完成。然后 P4 運行,然后 P5 運行。 **Advantages** * 確保較短的工作首先運行 **Disadvantages** * 需要再次了解運行時 **注意:**此算法因歷史原因比較總運行時間 _ 而非 _ 剩余運行時間。如果您想考慮剩余時間,您將使用搶先最短剩余時間優先(PSRTF)。 ## 先到先得(FCFS) ![](https://img.kancloud.cn/ce/95/ce95e81a82fe1fa17cbefc1fd256b311_605x340.jpg) * P2 在 0ms * P1 在 1000ms * P5 在 3000ms * P4 在 4000ms * P3 在 5000ms 進程按到達順序安排。 FCFS 的一個優點是調度算法很簡單:就緒隊列只是一個 FIFO(先進先出)隊列。 FCFS 遭遇康宏效應。 在這里 P2 到達,然后 P1 到達,然后是 P5,然后是 P4,然后是 P3。你可以看到 P5 的護航效果。 **Advantages** * 簡單的實施 **Disadvantages** * 長時間運行的進程可以阻止所有其他進程 ## Round Robin(RR) 進程按其到達就緒隊列的順序進行安排。但是,經過一小段時間后,將強制從運行狀態中刪除正在運行的進程并將其放回就緒隊列。這可確保長時間運行的進程不會使所有其他進程無法運行。進程在返回就緒隊列之前可以執行的最長時間稱為時間量。在大時間量子點(時間量子長于所有過程的運行時間)的限制下,循環將等同于 FCFS。 ![](https://img.kancloud.cn/ef/76/ef7672e0378d84c54966c02685b8c046_605x340.jpg) * P1 到達:0ms * P2 到達:0ms * P3 到達:0ms * P4 到達:0ms * P5 到貨:0ms 量子= 1000ms 這里所有進程都在同一時間到達。 P1 運行 1 個量程并完成。 P2 為一個量子;然后,P3 停止了。在為量子運行所有其他進程之后,我們循環回到 P2,直到完成所有進程。 **Advantages** * 確保一些公平的概念 **Disadvantages** * 大量進程=大量切換 ## 優先 進程按優先級順序排列。例如,導航過程執行可能比記錄過程更重要。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看