Linux設計與實現學習筆記之程序排程

2021-06-26 13:20:13 字數 1204 閱讀 4636

程序排程

這一章講的內容是非常有趣的,很多的思想和觀點生活中也能用到呢。這一章最重要的兩個字是排程。何為排程,就是在有限的處理器和無限的程序中尋找平衡點的策略,方法。排程的目的:最大限度地利用處理器。排程的原則:高效,公平。

多工系統的兩種方式:搶占式多工和非搶占式多工。非搶占式多工有點像計畫經濟,每個程序占用cpu資源完全靠自願,讓步。這樣會出現很多分配不公的現象。而搶占式多工則是市場經濟,符合市場規律(排程演算法)。這種規律保證了每個程序能相對公平的占用cpu的時間。

幾個名詞:

搶占:搶占式多工系統中出現的概念。正在執行的程序被排程程式強制掛起,以便新的程序得到執行的機會。這個動作叫做搶占。

時間片:程序在被搶占之前已經預設好的時間。

linux程序排程發展簡史:

2.4版本及以前:簡陋的程序排程

2.5版本:o(1)排程,對互動式程序不理想。

2.6版本:cfs

linux程序排程策略:

程序分為兩類:i/o消耗型程序和處理器消耗型程序。前者是說像gui這種大部分時間需要等待鍵盤,滑鼠等外設的輸入,並且要及時處理並給予響應的程序。後者是說一些執行演算法的程式,需要大量的耗費cpu.當然這兩個只是對程序特性的描述,很多程序是兼而有之的。

了解了程序的分類,排程策略就是要在上面兩個矛盾中尋找平衡,這也是整個排程程式最核心的工作。

程序的優先順序:

事實上天底下沒有完全的公平,人有美醜富窮,程序也分了三流九等。程序排程程式要保證的也是相對的公平,而不是絕對的公平。如何區分程序的優先順序呢,linux是採用了兩個方法:第一種是nice值,它的範圍是-20~19,nice值越大,優先順序越低。nice值代表時間片的比例,而不是絕對值。通過ps -el命令可以看到標記為ni的一列,這就是這個程序的nice值。第二張就是實時優先順序,這是實時程序才有的。事實上這地方比較複雜,優先順序裡面有區分為靜態優先順序和動態優先順序,這裡mark一下,回頭再研究。

時間片:

乙個矛盾:時間片分配的過長,系統對互動系統的響應表現欠佳。時間片分配的太短,又會增大程序切換的消耗。如何定義時間表的長度,恆定的值是有問題的。cfs排程器沒有直接分配時間片帶程序,而是將處理器的使用比分給了程序。這樣,程序被分配的時間片是動態的,與系統的負載以及分配的nice值有關係。

搶占時機:

排程器會比較新的程序和正在執行的程序消耗了多少cpu占用比,如果新的程序使用比比當前程序小,則新程序立刻投入執行,否則推遲執行。

Linux設計與實現學習筆記

從第三章開始吧,前面都是overview的介紹 第三章 程序管理 程序的概念 處於執行期的程式 其他占用的資源 開啟的檔案,掛起的訊號.linux中線程是一種特殊的程序,區別於其他系統。fork exec exit 程序描述符及任務結構 每個程序對應乙個資料結構 task struct,稱為程序描述...

Redis設計實現 學習筆記

最近在準備面試,問到redis相關知識,只能說個皮毛,說的既不深入也不全面,所以抓緊突擊一下,先學 redis設計與實現 選擇看書的原因是 書中全面深入,且能出書一定十分用心 搜部落格也找不到比書更全面的文章,且費時 直接看原始碼乙個是對c掌握不好,且易困,效率不高,所以跟著書同步學原始碼,是我認為...

《Redis設計與實現》學習筆記 Lua指令碼

redis從2.6開始支援lua指令碼,和事務的功能類似,可以通過lua指令碼原子的執行多個redis命令。redis提供了eval和evalsha命令執行lua指令碼。redis在伺服器內嵌了乙個lua壞境,並進行了一系列的修改,從而確保這個lua壞境可以滿足redis伺服器的需要,通過下列步驟建...