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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OS- -调度(二)

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS- -调度(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OS- -調度(二)

文章目錄

  • OS- -調度(二)
    • 一、調度
      • 3.交互式系統中的調度
        • 輪詢調度(時間片法)
        • 優先級調度
        • 多級隊列
        • 最短進程優先
        • 保證調度
        • 彩票調度
        • 公平分享調度
      • 4.實時系統中的調度
      • 5.調度策略和機制
      • 6.線程調度

一、調度

3.交互式系統中的調度

交互式系統中在個人計算機、服務器和其他系統中都是很常用的,所以有必要來探討一下交互式調度

輪詢調度(時間片法)

  • 一種最古老、最簡單、最公平并且最廣泛使用的算法就是輪詢算法(round-robin)

  • 每個進程都會被 分配一個時間段,稱為時間片(quantum),在這個時間片內允許進程運行。

  • 如果時間片結束時進程還 在運行的話,則搶占一個CPU并將其分配給另一個進程。

  • 如果進程在時間片結束前阻塞或結束,則 CPU立即進行切換。

  • 輪詢算法比較容易實現。調度程序所做的就是維護一個可運行進程的列表,就像 下圖中的a,當一個進程用完時間片后就被移到隊列的末尾,就像下圖的b。

  • 時間片輪詢調度中唯一有意思的一點就是時間片的長度。

  • 從一個進程切換到另一個進程需要一定的時間 進行管理處理,包括保存寄存器的值和內存映射、更新不同的表格和列表、清除和重新調入內存高速緩 存等。這種切換稱作 進程間切換(process switch)和 上下文切換(context switch)。

  • 如果進程 間的切換時間需要1ms,其中包括內存映射、清除和重新調入高速緩存等,再假設時間片設為4 ms, 那么CPU在做完4 ms有用的工作之后,CPU將花費1 ms來進行進程間的切換。

  • 因此,CPU的時間 片會浪費20%的時間在管理開銷上。耗費巨大。

  • 為了提高CPU的效率,我們把時間片設置為100 ms。現在時間的浪費只有1%。

  • 但是考慮會發現下面 的情況,如果在一個非常短的時間內到達50個請求,并且對CPU有不同的需求,此時會發生什么?

  • 50個進程都被放在可運行進程列表中。如果CPU是空閑的,第一個進程會立即開始執行,第二個直 到100 ms以后才會啟動,以此類推。

  • 不幸的是最后一個進程需要等待5秒才能獲得執行機會。大部分 用戶都會覺得對于一個簡短的指令運行5秒中是很慢的。如果隊列末尾的某些請求只需要幾號秒鐘的運 行時間的話,這種設計就非常糟糕了。

  • 另外一個因素是如果時間片設置長度要大于CPU使用長度,那么搶占就不會經常發生。相反,在時間 片用完之前,大多數進程都已經阻塞了,那么就會引起進程間的切換。消除搶占可提高性能,因為進程 切換僅在邏輯上必要時才發生,即流程阻塞且無法繼續時才發生。

  • 結論可以表述如下:將上下文切換時間設置得太短會導致過多的進程切換并降低CPU效率,但設置時 間太長會導致一個短請求很長時間得不到響應。最好的切換時間是在20 -50毫秒之間設置。

優先級調度

  • 輪詢調度假設了所有的進程是同等重要的。但事實情況可能不是這樣。

例如,在一所大學中的等級制 度,首先是院長,然后是教授、秘書、后勤人員,最后是學生。

這種將外部情況考慮在內就實現了優先 級調度(priority scheduling)

例如你的家庭地位:孩子 > 女朋友 > 狗🐶 >你自己😊🐯

  • 它的基本思想很明確,每個進程都被賦予一個優先級,優先級高的進程優先運行。
  • 但是也不意味著高優先級的進程能夠永遠一直運行下去,調度程序會在每個時鐘中斷期間降低當前運行 進程的優先級。
  • 如果此操作導致其優先級降低到下一個最高進程的優先級以下,則會發生進程切換。或 者,可以為每個進程分配允許運行的最大時間間隔。當時間間隔用完后,下一個高優先級的進程會得到 運行的機會。
  • 可以靜態或者動態的為進程分配優先級。
  • 在一臺軍用計算機上,可以把將軍所啟動的進程設為優先級100,上校為90,少校為80,上尉為70,中尉為60,以此類推。
  • UNIX中有一條命令為nice ,它允許用戶為了照顧他人而自愿降低自己進程的優先級,但是一般沒人用。
  • 優先級也可以由系統動態分配,用于實現某種目的

  • 例如,有些進程為I/O密集型,其多數時間用來等 待I/O結束。當這樣的進程需要CPU時,應立即分配CPU,用來啟動下一個I/O請求,這樣就可以在 另一個進程進行計算的同時執行I/O操作。

  • 這類I/O密集型進程長時間的等待CPU只會造成它長時間 占用內存。使I/O密集型進程獲得較好的服務的一種簡單算法是,將其優先級設為1/f , f為該進程 在上一時間片中所占的部分。

  • 一個在50 ms的時間片中只使用1 ms的進程將獲得優先級50 ,而在阻 塞之前用掉25 ms的進程將具有優先級2,而使用掉全部時間片的進程將得到優先級1。

  • 可以很方便的將一組進程按優先級分成若干類,并且在各個類之間采用優先級調度,而在各類進程的內 部采用輪轉調度。

下面展示了一個四個優先級類的系統

  • 它的調度算法主要描述如下:上面存在優先級為4類的可運行進程,首先會按照輪轉法為每個進程運行 一個時間片,此時不理會較低優先級的進程。
  • 若第4類進程為空,則按照輪詢的方式運行第三類進程。
  • 若第4類和第3類進程都為空,則按照輪轉法運行第2類進程。
  • 如果不對優先級進行調整,則低優先 級的進程很容易產生饑餓現象。

多級隊列

  • 最早使用優先級調度的系統是CTSS(Compatible Timesharing System)

  • CTSS是一種兼容分時 系統,它有一個問題就是進程切換太慢,其原因是舊M 7094內存只能放進一個進程。

  • CTSS在每次切換前都需要將當前進程換出到磁盤,并從磁盤上讀入一個新進程。

  • CTSS的設計者很快 就認識到,為CPU密集型進程設置較長的時間片比頻繁地分給他們很短的時間要更有效(減少交換次 數)。

  • 另一方面,如前所述,長時間片的進程又會影響到響應時間,解決辦法是設置優先級類。

  • 屬于最 高優先級的進程運行一個時間片,次高優先級進程運行2個時間片,再下面一級運行4個時間片

  • 以 此類推。當一個進程用完分配的時間片后,它被移到下一類。

最短進程優先

  • 對于批處理系統而言,由于最短作業優先常常伴隨著最短響應時間,所以如果能夠把它用于交互式進程,那將是非常好的。在某種程度上,的確可以做到這一點。

  • 交互式進程通常遵循下列模式:等待命 令、執行命令、等待命令、執行命令。。。

  • 如果我們把每個命令的執行都看作一個分離的作業,那么我 們可以通過首先運行最短的作業來使響應時間最短。

  • 這里唯一的問題是如何從當前可運行進程中找出最 短的那一個進程。

  • 一種方式是根據進程過去的行為進行推測,并執行估計運行時間最短的那一個。

  • 假設每個終端上每條命 令的預估運行時間為T0 ,現在假設測量到其下一次運行時間為T1 ,可以用兩個值的加權來改進估 計時間,即aT0+ (1- 1)T1

  • 通過選擇a的值,可以決定是盡快忘掉老的運行時間,還是在一段長 時間內始終記住它們。

當a = 1/2時,可以得到下面這個序列

  • 可以看到,在三輪過后,T0在新的估計值中所占比重下降至1/8。
  • 有時把這種通過當前測量值和先前估計值進行加權平均從而得到下一個估計值的技術稱作老化 (aging)。這種方法會使用很多預測值基于當前值的情況。

保證調度

  • 一種完全不同的調度方法是對用戶做出明確的性能保證。

  • 一種實際而且容易實現的保證是:若用戶工作 時有n個用戶登錄,則每個用戶將獲得CPU處理能力的1/n。

  • 類似地,在一個有n個進程運行的單用 戶系統中,若所有的進程都等價,則每個進程將獲得1/n的CPU時間。

彩票調度

  • 對用戶進行承諾并在隨后兌現承諾是一件好事,不過很難實現。但是存在著一種簡單的方式,有一種既可以給出預測結果而又有一種比較簡單的實現方式的算法,就是彩票調度(lottery scheduling)算 法。
  • 其基本思想是為進程提供各種系統資源(例如CPU時間)的彩票。當做出一個調度決策的時候,就隨 機抽出一張彩票,擁有彩票的進程將獲得該資源。在應用到CPU調度時,系統可以每秒持有50次抽 獎,每個中獎者將獲得比如20毫秒的CPU時間作為獎勵。
  • George Orwell關于所有的進程是平等的,但是某些進程能夠更平等一些。一些重要的進程可以給 它們額外的彩票,以便增加他們贏得的機會。
  • 如果出售了 100張彩票,而且有一個進程持有了它們中的 20張,它就會有20%的機會去贏得彩票中獎。在長時間的運行中,它就會獲得20%的CPU。
  • 相反, 對于優先級調度程序,很難說明擁有優先級40究竟是什么意思,這里的規則很清楚,擁有彩票f份額 的進程大約得到系統資源的f份額。
  • 如果希望進程之間協作的話可以交換它們之間的票據。
  • 例如,客戶端進程給服務器進程發送了一條消息 后阻塞,客戶端進程可能會把自己所有的票據都交給服務器,來增加下一次服務器運行的機會。當服務 完成后,它會把彩票還給客戶端讓其有機會再次運行。
  • 事實上,如果沒有客戶機,服務器也根本不需要 彩票。

可以把彩票理解為buff,這個buff有15%的幾率能讓你產生 速度之靴 的效果。

公平分享調度

  • 到目前為止,我們假設被調度的都是各個進程自身,而不用考慮該進程的擁有者是誰。
  • 結果是,如果用 戶1啟動了 9個進程,而用戶2啟動了一個進程,使用輪轉或相同優先級調度算法,那么用戶1將得 到90 %的CPU時間,而用戶2將之得到10 %的CPU時間。
  • 為了阻止這種情況的出現,一些系統在調度前會把進程的擁有者考慮在內。在這種模型下,每個用戶都 會分配一些CPU時間,而調度程序會選擇進程并強制執行。
  • 因此如果兩個用戶每個都會有50%的 CPU時間片保證,那么無論一個用戶有多少個進程,都將獲得相同的CPU份額。

4.實時系統中的調度

  • 實時系統(real-time)是一個時間扮演了重要作用的系統。

  • 算機一個服務請求,而計算機必須在一個確定的時間范圍內恰當的做出反應。

  • 例如,在CD播放器中的 計算機會獲得從驅動器過來的位流,然后必須在非常短的時間內將位流轉換為音樂播放出來。
  • 如果計算時間過長,那么音樂就會聽起來有異常。
  • 再比如說醫院特別護理部門的病人監護裝置、飛機中的自動駕駛系統、列車中的煙霧警告裝置等
  • 在這些例子中,正確但是卻緩慢的響應要比沒有響應甚至還糟糕。
  • 實時系統可以分為兩類:硬實時(hard real time)和軟實時(soft real time)系統,前者意味著必須要滿足絕對的截止時間;后者的含義是雖然不希望偶爾錯失截止時間,但是可以容忍。

  • 在這兩種 情形中,實時都是通過把程序劃分為一組進程而實現的,其中每個進程的行為是可預測和提前可知的。

  • 這些進程一般壽命較短,并且極快的運行完成。在檢測到一個外部信號時,調度程序的任務就是按照滿 足所有截止時間的要求調度進程。

  • 實時系統中的事件可以按照響應方式進一步分類為周期性(以規則的時間間隔發生)事件或 非周期性(發生時間不可預知)事件。一個系統可能要響應多個周期性事件流,根據每個事件處理所需的時間,可能 甚至無法處理所有事件。

例如,如果有m個周期事件,事件i以周期Pi發生,并需要Ci秒CPU時間 處理一個事件,那么可以處理負載的條件是:

  • 只有滿足這個條件的實時系統稱為可調度的,這意味著它實際上能夠被實現。一個不滿足此檢驗標準 的進程不能被調度,因為這些進程共同需要的CPU時間總和大于CPU能提供的時間。
  • 舉一個例子,考慮一個有三個周期性事件的軟實時系統,其周期分別是100 ms、200 m和500 ms。
  • 如果這些事件分別需要50 ms、30ms和100 ms的CPU時間,那么該系統時可調度的,因為0.5 + 0.15 + 0.2 < 1。
  • 如果此時有第四個事件加入,其周期為1秒,那么此時這個事件如果不超過150 ms, 那么仍然是可以調度的。
  • 忽略上下文切換的時間。
  • 實時系統的調度算法可以是靜態的或動態的。前者在系統開始運行之前做出調度決策;后者在運行過程中進行調度決策。只有在可以提前掌握所完成的工作以及必須滿足的截止時間等信息時,靜態調度才能 工作,而動態調度不需要這些限制。

5.調度策略和機制

  • 到目前為止,我們隱含的假設系統中所有進程屬于不同的分組用戶并且進程間存在相互競爭CPU的情 況。
  • 通常情況下確實如此,但有時也會發生一個進程會有很多子進程并在其控制下運行的情況。
  • 例如, 一個數據庫管理系統進程會有很多子進程。
  • 每一個子進程可能處理不同的請求,或者每個子進程實現不 同的功能(如請求分析、磁盤訪問等)。
  • 主進程完全可能掌握哪一個子進程最重要(或最緊迫),而哪一個最不重要。
  • 但是,以上討論的調度算法中沒有一個算法從用戶進程接收有關的調度決策信息,這就 導致了調度程序很少能夠做出最優的選擇。
  • 解決問題的辦法是將 調度機制(scheduling mechanism)和 調度策略(scheduling policy)分開,這是長期一貫的原則。

  • 這也就意味著調度算法在某種方式下被參數化了,但是參數可以被用戶進程 填寫。

  • 讓我們首先考慮數據庫的例子。
  • 假設內核使用優先級調度算法,并提供了一條可供進程設置優先 級的系統調用。
  • 這樣,盡管父進程本身并不參與調度,但它可以控制如何調度子進程的細節。
  • 調度機制位于內核,而調度策略由用戶進程決定,調度策略和機制分離是一種關鍵性思路。

6.線程調度

  • 當若干進程都有多個線程時,就存在兩個層次的并行:進程和線程。在這樣的系統中調度處理有本質的差別,這取決于所支持的是用戶級線程還是內核級線程(或兩者都支持)。
  • 首先考慮用戶級線程,由于內核并不知道有線程存在,所以內核還是和以前一樣地操作,選取一個進 程假設為A,并給予A以時間片控制。
  • A中的線程調度程序決定哪個線程運行。假設為A1。
  • 由于多 道線程并不存在時鐘中斷,所以這個線程可以按其意愿任意運行多長時間。如果該線程用完了進程的全 部時間片,內核就會選擇另一個進程繼續運行。
  • 在進程A終于又一次運行時,線程A1會接著運行。該線程會繼續耗費A進程的所有時間,直到它完 成工作。
  • 不過,線程運行不會影響到其他進程。其他進程會得到調度程序所分配的合適份額,不會考慮 進程A內部發生的事情。
  • 現在考慮A線程每次CPU計算的工作比較少的情況
  • 例如:在50 ms的時間片中有5 ms的計算工 作。
  • 于是,每個線程運行一會兒,然后把CPU交回給線程調度程序。
  • 這樣在內核切換到進程B之前,就會有序列 A1,A2,A3,A1,A2,A3,A1,A2,A3,A1。

如下所示:

  • 運行時系統使用的調度算法可以是上面介紹算法的任意一種。
  • 從實用方面考慮,輪轉調度和優先級調度 更為常用。唯一的局限是,缺乏一個時鐘中斷運行過長的線程。但由于線程之間的合作關系,這通常也 不是問題
  • 現在考慮使用內核線程的情況,內核選擇一個特定的線程運行。它不用考慮線程屬于哪個進程,不過如 果有必要的話,也可以這么做。對被選擇的線程賦予一個時間片,而且如果超過了時間片,就會強制掛 起該線程。
  • 一個線程在50 ms的時間片內,5 ms之后被阻塞,在30 ms的時間片中,線程的順序會 是A1,B1,A2,B2,A3,B3

如下圖所示:

  • 用戶級線程和內核級線程之間的主要差別在于性能。用戶級線程的切換需要少量的機器指令(想象一下Java程序的線程切換),而內核線程需要完整的上下文切換,修改內存映像,使高速緩存失效,這會 導致了若干數量級的延遲。
  • 另一方面,在使用內核級線程時,一旦線程阻塞在I/O上就不需要在用戶級 線程中那樣將整個進程掛起。
  • 從進程A的一個線程切換到進程B的一個線程,其消耗要遠高于運行進程A的兩個線程(涉及修改內 存映像,修改高速緩存),內核對這種切換的消耗是了解到,可以通過這些信息作出決定。

總結

以上是生活随笔為你收集整理的OS- -调度(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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