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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OS- -调度(一)

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

OS- -調(diào)度(一)

文章目錄

  • OS- -調(diào)度(一)
    • 一、調(diào)度
      • 1.調(diào)度介紹
        • 進程行為
        • 何時調(diào)度
          • 什么是空閑進程
        • 調(diào)度算法的分類
        • 調(diào)度算法的目標(biāo)
      • 2.批處理中的調(diào)度
        • 先來先服務(wù)
        • 最短作業(yè)優(yōu)先
        • 最短剩余時間優(yōu)先

一、調(diào)度

  • 當(dāng)一個計算機是多道程序設(shè)計系統(tǒng)時,會頻繁的有很多進程或者線程來同時競爭CPU時間片。
  • 當(dāng)兩個 或兩個以上的進程/線程處于就緒狀態(tài)時,就會發(fā)生這種情況。如果只有一個CPU可用,那么必須選擇 接下來哪個進程/線程可以運行。
  • 操作系統(tǒng)中有一個叫做調(diào)度程序(scheduler)的角色存在,它就是 做這件事兒的,該程序使用的算法叫做 調(diào)度算法(scheduling algorithm)。
  • 盡管有一些不同,但許多適用于進程調(diào)度的處理方法同樣也適用于線程調(diào)度
  • 當(dāng)內(nèi)核管理線程的時候, 調(diào)度通常會以線程級別發(fā)生,很少或者根本不會考慮線程屬于哪個進程。

下面我們會首先專注于進程和 線程的調(diào)度問題,然后會明確的介紹線程調(diào)度以及它產(chǎn)生的問題。

1.調(diào)度介紹

  • 讓我們回到早期以磁帶上的卡片作為輸入的批處理系統(tǒng)的時代,那時候的調(diào)度算法非常簡單:依次運行 磁帶上的每一個作業(yè)。
  • 對于多道程序設(shè)計系統(tǒng),會復(fù)雜一些,因為通常會有多個用戶在等待服務(wù)。
  • 一些 大型機仍然將 批處理和 分時服務(wù)結(jié)合使用,需要調(diào)度程序決定下一個運行的是一個批處理作業(yè)還是 終端上的用戶。
  • 由于在這些機器中CPU是稀缺資源,所以好的調(diào)度程序可以在提高性能和用戶的滿意 度方面取得很大的成果。

進程行為

  • 幾乎所有的進程(磁盤或網(wǎng)絡(luò))I/O請求和計算都是交替運行的
  • 如上圖所示,CPU不停頓的運行一段時間,然后發(fā)出一個系統(tǒng)調(diào)用等待I/O讀寫文件。
  • 完成系統(tǒng)調(diào)用 后,CPU又開始計算,直到它需要讀更多的數(shù)據(jù)或者寫入更多的數(shù)據(jù)為止。當(dāng)一個進程等待外部設(shè)備 完成工作而被阻塞時,才是I/O活動
  • 上面a是CPU密集型進程;b是I/O密集型進程進程,a因為在計算的時間上花費時間更長,因此稱 為計算密集型(compute-bound)或者CPU密集型(CPU-bound) , b因為I/O發(fā)生頻率比較快因此稱 為I/O密集型(I/O-bound)
  • 計算密集型進程有較長的CPU集中使用和較小頻度的I/O等待。I/O 密集型進程有較短的CPU使用時間和較頻繁的I/O等待
  • 注意到上面兩種進程的區(qū)分關(guān)鍵在于CPU 的時間占用而不是I/O的時間占用。
  • I/O密集型的原因是因為它們沒有在I/O之間花費更多的計算、而 不是I/O請求時間特別長。
  • 無論數(shù)據(jù)到達后需要花費多少時間,它們都需要花費相同的時間來發(fā)出讀取 磁盤塊的硬件請求。
  • 值得注意的是,隨著CPU的速度越來越快,更多的進程傾向于I/O密集型。這種情況出現(xiàn)的原因是 CPU速度的提升要遠遠高于硬盤。這種情況導(dǎo)致的結(jié)果是,未來對I/O密集型進程的調(diào)度處理似乎更 為重要。
  • 這里的基本思想是,如果需要運行I/O密集型進程,那么就應(yīng)該讓它盡快得到機會,以便發(fā)出 磁盤請求并保持磁盤始終忙碌。

何時調(diào)度

第一個和調(diào)度有關(guān)的問題是何時進行調(diào)度決策。存在著需要調(diào)度處理的各種情形。

  • 首先,在創(chuàng)建一個新 進程后,需要決定是運行父進程還是子進程。因為二者的進程都處于就緒態(tài)下,這是正常的調(diào)度決策,可以任意選擇,也就是說,調(diào)度程序可以任意的選擇子進程或父進程開始運行。
  • 第二,在進程退出時需要作出調(diào)度決定。因為此進程不再運行(因為它將不再存在),因此必須從就緒進程中選擇其他進程運行。如果沒有進程處于就緒態(tài),系統(tǒng)提供的空閑進程通常會運行
什么是空閑進程
  • 空閑進程(system-supplied idle process)是Microsoft公司windows操作系統(tǒng)帶有的系統(tǒng)進程,該進程是在各個處理器上運行的單個線程,它唯一的任務(wù)是在系統(tǒng)沒有處理其他線程時占用處理器 時間。
  • System Idle Process并不是一個真正的進程,它是核心虛擬出來的,多任務(wù)操作系統(tǒng)都存在。
  • 在沒有可用的進程時,系統(tǒng)處于空運行狀態(tài),此時就是System Idle Process在正在運行。
  • 你可以簡單 的理解成,它代表的是CPU的空閑狀態(tài),數(shù)值越大代表處理器越空閑,可以通過Windows任務(wù)管理 器查看Windows中的CPU利用率
  • 第三種情況是,當(dāng)進程阻塞在I/O、信號量或其他原因時,必須選擇另外一個進程來運行。有時,阻塞 的原因會成為選擇進程運行的關(guān)鍵因素。
  • 例如,如果A是一個重要進程,并且它正在等待B退出關(guān)鍵 區(qū)域,讓B退出關(guān)鍵區(qū)域從而使A得以運行。但是調(diào)度程序一般不會對這種情況進行考量。
  • 第四點,當(dāng)I/O中斷發(fā)生時,可以做出調(diào)度決策。如果中斷來自I/O設(shè)備,而I/O設(shè)備已經(jīng)完成了其工作,那么那些等待I/O的進程現(xiàn)在可以繼續(xù)運行。由調(diào)度程序來決定是否準(zhǔn)備運行新的進程還是重新運 行已經(jīng)中斷的進程。

如果硬件時鐘以50或60 Hz或其他頻率提供周期性中斷,可以在每個時鐘中斷或第k個時鐘中斷處做 出調(diào)度決策。

根據(jù)如何處理時鐘中斷可以把調(diào)度算法可以分為兩類:

  • 非搶占式(nonpreemptive)調(diào)度算法挑選一個進程,讓該進程運行直到被阻塞(阻塞在I/O上或等待另一個進程),或者直到該進程自 動釋放CPU。

  • 即使該進程運行了若干個小時后,它也不會被強制掛起。這樣會在時鐘中斷發(fā)生時不會 進行調(diào)度。

  • 在處理完時鐘中斷后,如果沒有更高優(yōu)先級的進程等待,則被中斷的進程會繼續(xù)執(zhí)行。

  • 另外一種情況是搶占式調(diào)度算法,它會選擇一個進程,并使其在最大固定時間內(nèi)運行。

  • 如果在時間間 隔結(jié)束后仍在運行,這個進程會被掛起,調(diào)度程序會選擇其他進程來運行(前提是存在就緒進程)。

  • 進 行搶占式調(diào)度需要在時間間隔結(jié)束時發(fā)生時鐘中斷,以將CPU的控制權(quán)交還給調(diào)度程序。如果沒有可 用的時鐘,那么非搶占式就是唯一的選擇

調(diào)度算法的分類

毫無疑問,不同的環(huán)境下需要不同的調(diào)度算法。之所以出現(xiàn)這種情況,是因為不同的應(yīng)用程序和不同的 操作系統(tǒng)有不同的目標(biāo)。

也就是說,在不同的系統(tǒng)中,調(diào)度程序的優(yōu)化也是不同的。這里有必要劃分出 三種環(huán)境

  • ?批處理(Batch)

  • ?交互式(Interactive)

  • ?實時(Real time)

  • 批處理系統(tǒng)廣泛應(yīng)用于商業(yè)領(lǐng)域,比如用來處理工資單、存貨清單、賬目收入、賬目支出、利息計算、 索賠處理和其他周期性作業(yè)。

  • 批處理系統(tǒng)中,一般會選擇使用非搶占式算法或者周期性比較長的搶占 式算法。這種方法可以減少線程切換因此能夠提升性 能。

  • 在交互式用戶環(huán)境中,為了避免一個進程霸占CPU拒絕為其他進程服務(wù),所以需要搶占式算法。

  • 即使 沒有進程有意要一直運行下去,但是,由于某個進程出現(xiàn)錯誤也有可能無限期的排斥其他所有進程。為 了避免這種情況,搶占式也是必須的。

  • 服務(wù)器也屬于此類別,因為它們通常為多個(遠程)用戶提供服 務(wù),而這些用戶都非常著急。計算機用戶總是很忙。

  • 在實時系統(tǒng)中,搶占有時是不需要的,因為進程知道自己可能運行不了很長時間,通常很快的做完自己 的工作并阻塞。

  • 實時系統(tǒng)與交互式系統(tǒng)的差別是,實時系統(tǒng)只運行那些用來推進現(xiàn)有應(yīng)用的程序,而交 互式系統(tǒng)是通用的,它可以運行任意的非協(xié)作甚至是有惡意的程序。

調(diào)度算法的目標(biāo)

為了設(shè)計調(diào)度算法,有必要考慮一下什么是好的調(diào)度算法。

有一些目標(biāo)取決于環(huán)境(批處理、交互式或 者實時)蛋大部分是適用于所有情況的

下面是一些需要考量的因素,我們會在下面一起討論。

  • 在所有的情況中,公平是很重要的。對一個進程給予相較于其他等價的進程更多的CPU時間片對其 他進程來說是不公平的。當(dāng)然,不同類型的進程可以采用不同的處理方式。
  • 與公平有關(guān)的是系統(tǒng)的強制執(zhí)行,什么意思呢?
  • 如果某公司的薪資發(fā)放系統(tǒng)計劃在本月的15號,那么碰上了疫情大家生活都很拮據(jù),此時老板說要在14號晚上發(fā)放薪資,那么調(diào)度程序必須強制使進程執(zhí)行 14號晚上發(fā)放薪資的策略。
  • 另一個共同的目標(biāo)是保持系統(tǒng)的所有部分盡可能的忙碌。如果CPU和所有的I/O設(shè)備能夠一直運行, 那么相對于讓某些部件空轉(zhuǎn)而言,每秒鐘就可以完成更多的工作。
  • 例如,在批處理系統(tǒng)中,調(diào)度程序控 制哪個作業(yè)調(diào)入內(nèi)存運行。
  • 在內(nèi)存中既有一些CPU密集型進程又有一些I/O密集型進程是一個比較好的想法,好于先調(diào)入和運行所有的CPU密集型作業(yè),然后在它們完成之后再調(diào)入和運行所有I/O密集型作業(yè)的做法。
  • 使用后者這種方式會在CPU密集型進程啟動后,爭奪CPU ,而磁盤卻在空轉(zhuǎn),而當(dāng)I/O密集型進程啟動后,它們又要為磁盤而競爭,CPU卻又在空轉(zhuǎn)。。。。。。
  • 顯然,通過結(jié)合I/O密集型和CPU密集型,能夠使整個系統(tǒng)運行更流暢,效率更高。
  • 批處理系統(tǒng)
  • 通常有三個指標(biāo)來衡量系統(tǒng)工作狀態(tài):吞吐量、周轉(zhuǎn)時間和CPU利用率,吞吐量(throughout)是 系統(tǒng)每小時完成的作業(yè)數(shù)量。

綜合考慮,每小時完成50個工作要比每小時完成40個工作好。

  • 周轉(zhuǎn)時 間(Turnaround time)是一種平均時間,它指的是從一個批處理提交開始直到作業(yè)完成時刻為止平均 時間。該數(shù)據(jù)度量了用戶要得到輸出所需的平均等待時間。周轉(zhuǎn)時間越小越好。
  • CPU利用率(CPU utilization)通常作為批處理系統(tǒng)上的指標(biāo)。即使如此,CPU利用率也不是一 個好的度量指標(biāo),真正有價值的衡量指標(biāo)是系統(tǒng)每小時可以完成多少作業(yè)(吞吐量),以及完成作業(yè)需 要多長時間(周轉(zhuǎn)時間)。
  • 把CPU利用率作為度量指標(biāo),就像是引擎每小時轉(zhuǎn)動了多少次來比較汽車 的性能一樣。
  • 而且知道CPU的利用率什么時候接近100%要比什么什么時候要求得到更多的計算能力 要有用。
  • 交互式系統(tǒng)

  • 對于交互式系統(tǒng),則有不同的指標(biāo)。最重要的是盡量減少響應(yīng)時間。這個時間說的是從執(zhí)行指令開始 到得到結(jié)果的時間。

  • 再有后臺進程運行(例如,從網(wǎng)絡(luò)上讀取和保存E-mail文件)的個人計算機上, 用戶請求啟動一個程序或打開一個文件應(yīng)該優(yōu)先于后臺的工作。
  • 能夠讓所有的交互式請求首先運行的就 是一個好的服務(wù)。
  • 一個相關(guān)的問題是 均衡性(proportionality),用戶對做一件事情需要多長時間總是有一種固定 (不過通常不正確)的看法。
  • 當(dāng)認為一個請求很復(fù)雜需要較多時間時,用戶會認為很正常并且可以接受,但是一個很簡單的程序卻花費了很長的運行時間,用戶就會很惱怒。
  • 可以拿彩印和復(fù)印來舉出一個 簡單的例子,彩印可能需要1分鐘的時間,但是用戶覺得復(fù)雜并且愿意等待一分鐘,相反,復(fù)印很簡單 只需要5秒鐘,但是復(fù)印機花費1分鐘卻沒有完成復(fù)印操作,用戶就會很焦躁。
  • 實時系統(tǒng)

實時系統(tǒng)則有著和交互式系統(tǒng)不同的考量因素,因此也就有不同的調(diào)度目標(biāo)。

  • 實時系統(tǒng)的特點是必須滿 足最后的截止時間。
  • 例如,如果計算機控制著以固定速率產(chǎn)生數(shù)據(jù)的設(shè)備,未能按時運行的話可能會導(dǎo) 致數(shù)據(jù)丟失。
  • 因此,實時系統(tǒng)中最重要的需求是滿足所有(或大多數(shù))時間期限。
  • 在一些實事系統(tǒng)中,特別是涉及到多媒體的,可預(yù)測性很重要。偶爾不能滿足最后的截止時間不重要, 但是如果音頻多媒體運行不穩(wěn)定,聲音質(zhì)量會持續(xù)惡化。
  • 視頻也會造成問題,但是耳朵要比眼睛敏感很 多。

為了避免這些問題,進程調(diào)度必須能夠高度可預(yù)測的而且是有規(guī)律的。

2.批處理中的調(diào)度

現(xiàn)在讓我們把目光從一般性的調(diào)度轉(zhuǎn)換為特定的調(diào)度算法。

下面我們會探討在批處理中的調(diào)度。

先來先服務(wù)

很像是先到先得。。。

  • 可能最簡單的非搶占式調(diào)度算法的設(shè)計就是 先來先服務(wù)(first-come,first-serverd)。使用此算法,將按照請求順序為進程分配CPU。
  • 最基本的,會有一個就緒進程的等待隊 列。當(dāng)?shù)谝粋€任務(wù)從外部進入系統(tǒng)時,將會立即啟動并允許運行任意長的時間。它不會因為運行時間太 長而中斷。
  • 當(dāng)其他作業(yè)進入時,它們排到就緒隊列尾部。當(dāng)正在運行的進程阻塞,處于等待隊列的第一 個進程就開始運行。
  • 當(dāng)一個阻塞的進程重新處于就緒態(tài)時,它會像一個新到達的任務(wù),會排在隊列的末 尾,即排在所有進程最后。
  • 這個算法的強大之處在于易于理解和編程,在這個算法中,一個單鏈表記錄了所有就緒進程。
  • 要選取一 個進程運行,只要從該隊列的頭部移走一個進程即可;要添加一個新的作業(yè)或者阻塞一個進程,只要把 這個作業(yè)或進程附加在隊列的末尾即可。

這是很簡單的一種實現(xiàn)。

  • 不過,先來先服務(wù)也是有缺點的,那就是沒有優(yōu)先級的關(guān)系,
  • 試想一下,如果有100個I/O進程正在排 隊,第101個是一個CPU密集型進程,那豈不是需要等100個I/O進程運行完畢才會等到一個CPU 密集型進程運行
  • 這在實際情況下根本不可能,所以需要優(yōu)先級或者搶占式進程的出現(xiàn)來優(yōu)先選擇重要 的進程運行。

最短作業(yè)優(yōu)先

  • 批處理中,第二種調(diào)度算法是最短作業(yè)優(yōu)先(Shortest Job First)

  • 我們假設(shè)運行時間已知。例 如,一家保險公司,因為每天要做類似的工作,所以人們可以相當(dāng)精確地預(yù)測處理1000個索賠的一批 作業(yè)需要多長時間。

  • 當(dāng)輸入隊列中有若干個同等重要的作業(yè)被啟動時,調(diào)度程序應(yīng)使用最短優(yōu)先作業(yè)算法

  • 如上圖a所示,這里有4個作業(yè)A、B、C、D,運行時間分別為8、4、4、4分鐘。

  • 若按圖中的次序 運行,則A的周轉(zhuǎn)時間為8分鐘,B為12分鐘,C為16分鐘,D為20分鐘,平均時間內(nèi)為14分 鐘。

  • 現(xiàn)在考慮使用最短作業(yè)優(yōu)先算法運行4個作業(yè),如上圖b所示,目前的周轉(zhuǎn)時間分別為4、8、12、 20,平均為11分鐘,可以證明最短作業(yè)優(yōu)先是最優(yōu)的。

  • 考慮有4個作業(yè)的情況,其運行時間分別為 a、b、c、d。第一個作業(yè)在時間a結(jié)束,第二個在時間a + b結(jié)束,以此類推。平均周轉(zhuǎn)時間為(4a + 3b + 2c + d)/4。

  • 顯然a對平均值的影響最大,所以a應(yīng)該是最短優(yōu)先作業(yè),其次是b,然后是c , 最后是d它就只能影響自己的周轉(zhuǎn)時間了。

  • 需要注意的是,在所有的進程都可以運行的情況下,最短作業(yè)優(yōu)先的算法才是最優(yōu)的。

最短剩余時間優(yōu)先

  • 最短作業(yè)優(yōu)先的搶占式版本被稱作為最短剩余時間優(yōu)先(Shortest Remaining Time Next)算法。

  • 使用這個算法,調(diào)度程序總是選擇剩余運行時間最短的那個進程運行

  • 當(dāng)一個新作業(yè)到達時,其整個時 間同當(dāng)前進程的剩余時間做比較。如果新的進程比當(dāng)前運行進程需要更少的時間,當(dāng)前進程就被掛起, 而運行新的進程

  • 這種方式能夠使短期作業(yè)獲得良好的服務(wù)。

未完。。。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。