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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

常见操作系统调度算法研究(2)

發(fā)布時間:2023/12/2 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常见操作系统调度算法研究(2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

輪轉(zhuǎn)策略

輪轉(zhuǎn)策略(Round-Robin)簡稱為RR,在RR里面,每個準(zhǔn)備就緒的任務(wù)只能在有限的時間內(nèi)運(yùn)行,也就是說不管這個任務(wù)完成與否,都會切換任務(wù)到下一個。
由于它要頻繁的切換隊列,我們可以把準(zhǔn)備就緒的隊列視為FIFO隊列,假設(shè)任務(wù)A需要30ms,cpu的時間切片為10ms,那么它執(zhí)行到10ms時,cpu便會產(chǎn)生一個中斷信號,此時任務(wù)A來到隊尾,任務(wù)B接著上去。這樣做看似雨露均沾,它的平均等待時間確實比較長的。假設(shè)使用4ms的時間片,A、B、C的任務(wù)時間分別為10ms,15ms,20ms,那么它在采用RR策略下的平均等待時間為(6+11+16)/3=11ms
一般來說CPU的調(diào)度時間小于切片時間,如果我們最關(guān)心的指標(biāo)是操作系統(tǒng)的調(diào)度時間,那么使用RR顯然不是一個明智的選擇。

公平策略的得與失

RR策略是一種公平策略,使用任何一種公平策略的時候就要考慮到小任務(wù)不會被優(yōu)先處理,這在某一種程度上是令人難受的,但這也是現(xiàn)實世界的哲學(xué),沒有什么算法是十全十美的,我們更多的是要結(jié)合使用場景來選擇對當(dāng)前場景最有利的算法。
優(yōu)化了周轉(zhuǎn)時間比如SJF,STCF優(yōu)化了中轉(zhuǎn)時間,但對響應(yīng)時間不利
優(yōu)化了響應(yīng)時間比如RR優(yōu)化了響應(yīng)時間,但由于頻繁切換任務(wù)浪費(fèi)的時間,對周轉(zhuǎn)時間不利。

多級反饋隊列

多級反饋隊列的出現(xiàn)主要是為了平衡周轉(zhuǎn)時間與響應(yīng)時間,這里涉及到一個MLFQ的概念,它是把所有待處理的任務(wù)都分成隊列,然后給每個隊列標(biāo)上不同的優(yōu)先級。
MLFQ(Multilevel Feedback Queue Scheduling)先處理優(yōu)先級最高的隊列,將優(yōu)先級較低的隊列放到后面處理,如果遇到兩個優(yōu)先級一樣的隊列就會采用輪詢的方式來處理

比例分額

并不是我們所有的算法目的都是為了在周轉(zhuǎn)時間與響應(yīng)時間之間找到一個平衡點,有時候只需要保準(zhǔn)CPU對每一個任務(wù)都有一波雨露均就可以了。用一個直接粗暴的方法,每隔一段時間隨機(jī)抽取一個任務(wù)處理,這個被稱作彩票處理方法,隨機(jī)方法具有輕量的特性,它無需比較數(shù)據(jù)庫中任務(wù)的大小,直接利用隨機(jī)數(shù)抽取。
這里會用到步長調(diào)度算法。步長調(diào)度也很簡單。系統(tǒng)中的每個工作都有自己的步長,這個值與票數(shù)值成反比。在上面的例子中,A、B、C這3個工作的票數(shù)分別是100、50和250,我們通過用一個大數(shù)分別除以他們的票數(shù)來獲得每個進(jìn)程的步長。比如用10000除以這些票數(shù)值,得到了3個進(jìn)程的步長分別為100、200和40。我們稱這個值為每個進(jìn)程的步長(stride)。每次進(jìn)程運(yùn)行后,我們會讓它的計數(shù)器 [稱為行程(pass)值] 增加它的步長,記錄它的總體進(jìn)展。

多核處理器調(diào)度

初學(xué)者編寫程序時,大多數(shù)情況下編寫的程序都是單核調(diào)度的,增加了CPU的個數(shù)并沒有對你這個程序運(yùn)行有任何作用,為了解決這個問題不得不重寫應(yīng)用程序,讓其采用多線程的方式執(zhí)行。
程序第一次讀取數(shù)據(jù),花費(fèi)時間比較長,讀取之后你會把它放在緩存中,以防后續(xù)再有程序想要讀取它, 這個叫做時間局限性;空間局限性是指,程序讀取了這個地址的數(shù)據(jù),它接下來很有可能讀取這個地址周圍地址的數(shù)據(jù),這兩種局部性存在于絕大多數(shù)系統(tǒng),這只是在一個處理器的情況下,當(dāng)有多個處理器的時候情況會變成怎樣?

緩存一致性

存在這樣一種情況,當(dāng)程序A想要修改在內(nèi)存上的一個數(shù)據(jù),由于這個數(shù)據(jù)不在CPU的cache里面,我們便會首先訪問內(nèi)存并且修改數(shù)據(jù),把數(shù)據(jù)位置從d轉(zhuǎn)移到DDD假設(shè)這個時候,操作系統(tǒng)中斷了這個任務(wù)的操作,這時候第二個任務(wù)也要來修改這個數(shù)據(jù),那么它肯定在d處是找不到這個數(shù)據(jù)的,但是它不知道d處已經(jīng)發(fā)生了變化,還會從d處讀取一個過時的數(shù)據(jù)。
解決這個問題的方法是監(jiān)控內(nèi)存的訪問,硬件可以保證獲得正確的數(shù)據(jù),并保證共享內(nèi)存的唯一性。在基于總線的系統(tǒng)中,一種方式是使用總線窺探(bus snooping)[G83]。每個緩存都通過監(jiān)聽鏈接所有緩存和內(nèi)存的總線,來發(fā)現(xiàn)內(nèi)存訪問。如果CPU發(fā)現(xiàn)對它放在緩存中的數(shù)據(jù)的更新,會作廢(invalidate)本地副本(從緩存中移除),或更新(update)它(修改為新值)。

同步

在跨CPU訪問數(shù)據(jù)的時候,會涉及到互斥原語,這里說幾種CPU鎖的結(jié)構(gòu)

互斥鎖

不管是互斥鎖還是自旋鎖,加鎖的目的就是保證共享資源在任意時間里,只有一個線程訪問,這樣就可以避免多線程導(dǎo)致共享數(shù)據(jù)錯亂的問題。
互斥鎖,確保同一時間只有一個線程訪問數(shù)據(jù)。對共享資源的訪問,先對互斥量進(jìn)行加鎖,如果互斥量已經(jīng)上鎖,調(diào)用線程會阻塞,直到互斥量被解鎖。在完成了對共享資源的訪問后,要對互斥量進(jìn)行解鎖

自旋鎖

當(dāng)一個線程在獲取鎖的時候,如果鎖已經(jīng)被其它線程獲取,那么該線程將循環(huán)等待,然后不斷的判斷鎖是否能夠被成功獲取,直到獲取到鎖才會退出循環(huán)。 獲取鎖的線程一直處于活躍狀態(tài),但是并沒有執(zhí)行任何有效的任務(wù),使用這種鎖會造成 busy-waiting 。

總結(jié)

以上是生活随笔為你收集整理的常见操作系统调度算法研究(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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