【操作系統】處理機調度簡述

来源:http://www.cnblogs.com/libra-yong/archive/2017/07/16/7191491.html
-Advertisement-
Play Games

處理機的調度 標簽(空格分隔): 進程調度 調度演算法 操作系統 基本概念 定義 : 操作系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇進程(請求)來占用資源, 我們稱之為調度。 其目的是控制資源使用者的數量,選取資源使用者許可 ...


處理機的調度

標簽(空格分隔): 進程調度 調度演算法 操作系統


基本概念

定義
: 操作系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇進程(請求)來占用資源, 我們稱之為調度。

其目的是控制資源使用者的數量,選取資源使用者許可占用資源或占用資源。處理機調度的三個層次:

  • 高級調度:作業調度, 調度對象為作業.
  • 中級調度:記憶體調度(實質是存儲器的對換功能)
  • 低級調度:進程調度, 調度對象為進程或內核級線程

作業調度的演算法也適用於進程調度

服務時間\(T_s\): 系統為作業或進程提供服務的時間
周轉時間\(T_i\): 作業或進程被提交給系統到作業或進程完成為止的時間間隔.
通常包括:

作業在外存後備隊列上等待調度的時間.
進程在就緒隊列上等待進程調度的時間.
進程在cpu上執行的時間.
進程等待I/O操作完成的時間.

平均周轉時間:
\[T = \frac{\sum_{i=1}^n T_i}{n}\]
帶權周轉時間: 作業的周轉時間與為它提供服務的時間之比
\[W_i = \frac{T_i}{T_s}\]
平均帶權周轉時間:
\[W = \frac{\sum_{i=1}^n \frac{T_i}{T_s}}{n}\]

調度時機、切換與過程

進程調度和切換程式是操作系統內核程式。當請求調度的事件發生後,才可能會運行進程調度程式,當調度了新的就緒進程後,才會去進行進程間的切換。理論上這三件事情應該順序執行,但在實際設計中,在操作系統內核程式運行時,如果某時發生了引起進程調度的因素,並不一定能夠馬上進行調度與切換。

現代操作系統中,不能進行進程的調度與切換的情況有以下幾種情況:

  1. 在處理中斷的過程中:中斷處理過程複雜,在實現上很難做到進程切換,而且中斷處理是系統工作的一部分,邏輯上不屬於某一進程,不應被剝奪處理機資源。

  2. 進程在操作系統內核程式臨界區中:進入臨界區後,需要獨占式地訪問共用數據,理論上必須加鎖,以防止其他並行程式進入,在解鎖前不應切換到其他進程運行,以加快該共用數據的釋放。

  3. 其他需要完全屏蔽中斷的原子操作過程中:如加鎖、解鎖、中斷現場保護、恢復等原子操作。在原子過程中,連中斷都要屏蔽,更不應該進行進程調度與切換。

如果在上述過程中發生了引起調度的條件,並不能馬上進行調度和切換,應置系統的請求調度標誌,直到上述過程結束後才進行相應的調度與切換。

應該進行進程調度與切換的情況有:

  1. 當發生引起調度條件,且當前進程無法繼續運行下去時,可以馬上進行調度與切換。如果操作系統只在這種情況下進行進程調度,就是非剝奪調度。

  2. 當中斷處理結束或自陷處理結束後,返回被中斷進程的用戶態程式執行現場前,若置上請求調度標誌,即可馬上進行進程調度與切換。如果操作系統支持這種情況下的運行調度程式,就實現了剝奪方式的調度。

進程切換往往在調度完成後立刻發生,它要求保存原進程當前切換點的現場信息,恢復被調度進程的現場信息。現場切換時,操作系統內核將原進程的現場信息推入到當前進程的內核堆棧來保存它們,並更新堆棧指針。內核完成從新進程的內核棧中裝入新進程的現場信息、更新當前運行進程空間指針、重設PC寄存器等相關工作之後,開始運行新的進程。

調度的方式

  • 非搶占方式
    一旦處理機分配給某進程後, 就一直讓它運行下去, 決不會因為時鐘中斷或任何其他原因取搶占當前正在運行進程的處理機, 直至該進程完成, 或發生某事件而被阻塞時, 才把處理機分配給其他進程.
  • 搶占方式
    系統允許調度程式根據某種原則, 取暫停某個正在執行的進程, 將已分配個該進程的處理機重新分配給另一進程.
    "搶占"時應遵循一定的原則:
    • 優先權原則
    • 短進程優先原則
    • 時間片原則

典型的調度演算法

先來先服務調度演算法(first-come first-served):

即FCFS調度演算法, 既可用於作業調度, 也可用於進程調度. 系統按照作業到達的先後次序(優先考慮在就緒隊列中等待時間最長的作業)進行調度.
缺點:未考慮作業的緊迫程度, 只能順序運行

短作業(進程)優先的調度演算法(short job first):

為短作業而設立, 因為操作系統中大多為短作業.系統在作業運行時, 選出運行時間最短的作業將其調入記憶體.

  1. SJF(不可搶占):演算法以作業的長短(作業需要運行的時間)來計算優先順序, 作業越短, 其優先順序越高.
  2. SPF(可搶占):同上, 但是當有作業優先順序較高時, 便可以搶占資源優先執行.

缺點:

  • 必須預知作業的運行時間
  • 對作業程不利
  • 無法實現人機交互
  • 沒有考慮到作業的緊迫程度

優先順序調度演算法(priority-scheduling algorithm):

PSA演算法基於作業的緊迫程度, 由外部賦予作業相應的優先順序, 根據作業優先順序進行調度.

高響應閉優先調度演算法(highest request ratio next):

HRRN演算法即考慮了作業的等待時間, 又考慮了作業運行時間. 為沒有作業引入一個動態優先順序:

優先權 = (等待時間+要求服務時間) / 要求服務時間

可縮寫為:

R = 響應時間 / 要求服務時間

特點:

  1. 作業等待時間相同, 則要求服務時間越短, 優先權越高越, 類似於SJF演算法, 有利於短作業
  2. 作業要求服務時間相同時, 則作業等待時間約長, 優先權越高, 類似於FCFS演算法, 有利於長作業
  3. 對於長作業(要求服務時間長), 隨著等待的時間足夠長, 也可獲得較高的優先順序. 不會一直等下去.

時間片輪轉調度演算法(RR)

原理: 系統根據FCFS策略將所有的就緒進程排成一個就緒隊列, 並設置每隔一段時間產生依次中斷, 激活系統中的進程調度程式, 完成依次調度, 將cpu分配給新的隊首進程(或新到達的緊迫進程).

進程切換

  1. 若一個時間片尚未用完, 正在運行的進程便已完成, 則立即激活調度程式, 將其從執行隊列中刪除, 在調度就緒隊列的隊首進程運行, 並啟動一個新的時間片.
  2. 在一個時間片用完時, 計時中斷處理程式被激活, 如果進程尚未運行完畢, 則調度程式將它送往就緒隊列末尾, 並調度就緒隊列的隊首進程運行, 並啟動新時間片.

註意:時間片選取過小, 則將頻繁的執行進程調度和進程長下文切換, 增加系統開銷; 時間片選取過長, 則RR演算法退化為FCFS演算法, 無法滿足短作業和互動式用戶需求. 時間片應選取略大於依次典型的交互所需要的時間, 是大多數進程在一個時間片內完成.

多級反饋隊列調度演算法(multileved feedback queue):

  1. 設置多個就緒隊列, 併為每個隊列賦予不同的優先順序, 優先順序越高的隊列其時間片越小.優先順序最高的隊列最先進入待調度的隊列
  2. 隊列之間採用FCFS調度演算法.只有高優先順序隊列中的全部進程完成時才調度下一隊列
  3. 隊列內的進程按照輪轉演算法調度.新進程進入記憶體後首先進入優先順序最高的隊列
  4. 在低優先順序隊列運行時, 若有新進程到達, 那麼在運行完這個時間片後,CPU馬上分配給新到達的作業(搶占式)。

實時系統中的進程調度演算法

實時系統是指系統能及時響應外部事件的請求並及時處理這些請求.基於這一特性, 實時系統在工業(武器)控制, 多媒體等系統中常見.
實時系統中通分為存在一個截止時間, 硬實時任務(HRT)要求在開始截止時間前必須執行, 在結束截止時間前必須結束. 軟實時任務同上, 但並不嚴格.
在實時系統中有兩類演算法值得註意:最早截止時間優先演算法(Earliest Deadline First)和最低鬆弛度優先演算法(Least Laxity First).兩類演算法都可用搶占式和非搶占式調度, 但後者常用於搶占式調度.
在m個周期性的實時調度中, 每個實時任務的處理時間\(C_i\), 周期時間\(P_i\), 在但處理機的情況下, 需滿足條件:$\sum_{i=1}^m\frac{C_i}{P_i} \(小於1; 多處理機條件下, 須滿足條件\)\sum_{i=1}^m\frac{C_i}{P_i} $小於N, N為處理機數量.

最早截止時間優先演算法(EDF)

該演算法在實時系統中根據任務的截止時間確定其優先順序.

  1. 非搶占式

  2. 搶占式

最低鬆弛度優先演算法(LLF)

在該法中根據任務的緊急程度(鬆弛程度)賦予其優先順序, 越緊急的任務優先順序越高.

任務的鬆弛程度 = 必須完成時間 - 其本身運行時間 - 當前時間

系統的任務按照鬆弛度排成一個就緒隊列, 鬆弛度低的任務排在隊列前面, 即調度程式優先執行.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.表結構 2.數據類型 3.索引 4.約束 為欄位設定not null非空約束,因為null不僅占據更多的空間,還使對比與索引變得複雜。 5.SQL語句 6.緩存 現在我們大多數時候都是通過ORM框架訪問數據,這些框架往往提供緩存功能(一級緩存或者二級緩存),開啟緩存可以減少訪問資料庫的次數,不僅 ...
  • 關聯規則挖掘最典型的例子是購物籃分析,通過分析可以知道哪些商品經常被一起購買,從而可以改進商品貨架的佈局。 1. 基本概念 首先,介紹一些基本概念。 (1) 關聯規則:用於表示數據內隱含的關聯性,一般用X表示先決條件,Y表示關聯結果。 (2) 支持度(Support):所有項集中{X,Y}出現的可能 ...
  • 前言 資料庫系統與文件系統最大的區別在於資料庫能保證操作的原子性,一個操作要麼不做要麼都做,即使在資料庫宕機的情況下,也不會出現操作一半的情況,這個就需要資料庫的日誌和一套完善的奔潰恢復機制來保證。本文仔細剖析了InnoDB的奔潰恢復流程,代碼基於5.6分支。 基礎知識 lsn: 可以理解為資料庫從 ...
  • 一 資料庫常用操作 mysql -u+username -p+password:登陸資料庫管理系統,如mysql -uroot -p123。 create database dbName:創建資料庫。 drop database dbName:刪除資料庫。 use dbName:使用指定資料庫,因為 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/7190785.html (保留出處並非什麼原創作品權利,本人拙作還遠遠達不到,僅僅是為了鏈接到原文,因為後續對可能存在的一些錯誤進行修正或補充,無他) 先拋出一個性能問題,前幾天遇到一個生產環境性能極其低下的存儲過程,開發人員 ...
  • MySQL主從複製環境可以說是一切高可用的基礎。它的原理也比較簡單,下麵我們先來瞭解下主從複製的原理: 雖然圖上一共有7步,可以簡化一下幫助記憶和理解: 1. Master上進行改、寫操作; 2. MySQL把修改數據寫進binlog; 3. Slave發起IO thread,把master上新的b ...
  • 2017-07-17 09:32:07 輸入read: 用途: 從標準輸入讀取一行,或者從文件描述符FD(file descriptor)中讀取一行,並且將其分割成欄位。 用法: read [-ers] [-a 數組] [-d 分隔符] [-i 緩衝區文字] [-n 讀取字元數] [-N 讀取字元數 ...
  • 博主今日投身於SLAM的研究事業,放棄了以往win10下各種IDE的開發環境,選擇了在自己的xps13上裝上ubuntu16.04,投身於更為方便的linux進行學習和開發。 因為在xps13上安裝配置好linux實在是一件麻煩事(各種各樣的bug,以及補安裝各種各樣的驅動),博主歷盡周折才暫時配置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...