真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux進(jìn)程調(diào)度命令 linux進(jìn)程調(diào)度算法代碼

Linux系統(tǒng)的進(jìn)程調(diào)度

Linux進(jìn)程調(diào)度

創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元蘭州做網(wǎng)站,已為上家服務(wù),為蘭州各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

1.調(diào)度方式

Linux系統(tǒng)的調(diào)度方式基本上采用“ 搶占式優(yōu)先級(jí) ”方式,當(dāng)進(jìn)程在用戶模式下運(yùn)行時(shí),不管它是否自愿,核心在一定條件下(如該進(jìn)程的時(shí)間片用完或等待I/O)可以暫時(shí)中止其運(yùn)行,而調(diào)度其他進(jìn)程運(yùn)行。一旦進(jìn)程切換到內(nèi)核模式下運(yùn)行時(shí),就不受以上限制,而一直運(yùn)行下去,僅在重新回到用戶模式之前才會(huì)發(fā)生進(jìn)程調(diào)度。

Linux系統(tǒng)中的調(diào)度基本上繼承了UNIX系統(tǒng)的 以優(yōu)先級(jí)為基礎(chǔ) 的調(diào)度。也就是說,核心為系統(tǒng)中每個(gè)進(jìn)程計(jì)算出一個(gè)優(yōu)先級(jí),該優(yōu)先級(jí)反映了一個(gè)進(jìn)程獲得CPU使用權(quán)的資格,即高優(yōu)先級(jí)的進(jìn)程優(yōu)先得到運(yùn)行。核心從進(jìn)程就緒隊(duì)列中挑選一個(gè)優(yōu)先級(jí)最高的進(jìn)程,為其分配一個(gè)CPU時(shí)間片,令其投入運(yùn)行。在運(yùn)行過程中,當(dāng)前進(jìn)程的優(yōu)先級(jí)隨時(shí)間遞減,這樣就實(shí)現(xiàn)了“負(fù)反饋”作用,即經(jīng)過一段時(shí)間之后,原來級(jí)別較低的進(jìn)程就相對(duì)“提升”了級(jí)別,從而有機(jī)會(huì)得到運(yùn)行。當(dāng)所有進(jìn)程的優(yōu)先級(jí)都變?yōu)?(最低)時(shí),就重新計(jì)算一次所有進(jìn)程的優(yōu)先級(jí)。

2.調(diào)度策略

Linux系統(tǒng)針對(duì)不同類別的進(jìn)程提供了3種不同的調(diào)度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于 短實(shí)時(shí)進(jìn)程 ,它們對(duì)時(shí)間性要求比較強(qiáng),而每次運(yùn)行所需的時(shí)間比較短。一旦這種進(jìn)程被調(diào)度且開始運(yùn)行,就一直運(yùn)行到自愿讓出CPU或被優(yōu)先級(jí)更高的進(jìn)程搶占其執(zhí)行權(quán)為止。

SCHED_RR對(duì)應(yīng)“時(shí)間片輪轉(zhuǎn)法”,適合于每次運(yùn)行需要 較長(zhǎng)時(shí)間的實(shí)時(shí)進(jìn)程 。一個(gè)運(yùn)行進(jìn)程分配一個(gè)時(shí)間片(200 ms),當(dāng)時(shí)間片用完后,CPU被另外進(jìn)程搶占,而該進(jìn)程被送回相同優(yōu)先級(jí)隊(duì)列的末尾,核心動(dòng)態(tài)調(diào)整用戶態(tài)進(jìn)程的優(yōu)先級(jí)。這樣,一個(gè)進(jìn)程從創(chuàng)建到完成任務(wù)后終止,需要經(jīng)歷多次反饋循環(huán)。當(dāng)進(jìn)程再次被調(diào)度運(yùn)行時(shí),它就從上次斷點(diǎn)處開始繼續(xù)執(zhí)行。

SCHED_OTHER是傳統(tǒng)的UNIX調(diào)度策略,適合于交互式的 分時(shí)進(jìn)程 。這類進(jìn)程的優(yōu)先級(jí)取決于兩個(gè)因素:一個(gè)是進(jìn)程剩余時(shí)間配額,如果進(jìn)程用完了配給的時(shí)間,則相應(yīng)優(yōu)先級(jí)降到0;另一個(gè)是進(jìn)程的優(yōu)先數(shù)nice,這是從UNIX系統(tǒng)沿襲下來的方法,優(yōu)先數(shù)越小,其優(yōu)先級(jí)越高。nice的取值范圍是-20 19。用戶可以利用nice命令設(shè)定進(jìn)程的nice值。但一般用戶只能設(shè)定正值,從而主動(dòng)降低其優(yōu)先級(jí);只有特權(quán)用戶才能把nice的值設(shè)置為負(fù)數(shù)。進(jìn)程的優(yōu)先級(jí)就是以上二者之和。

后臺(tái)命令對(duì)應(yīng)后臺(tái)進(jìn)程(又稱后臺(tái)作業(yè))。后臺(tái)進(jìn)程的優(yōu)先級(jí)低于任何交互(前臺(tái))進(jìn)程的優(yōu)先級(jí)。所以,只有當(dāng)系統(tǒng)中當(dāng)前不存在可運(yùn)行的交互進(jìn)程時(shí),才調(diào)度后臺(tái)進(jìn)程運(yùn)行。后臺(tái)進(jìn)程往往按批處理方式調(diào)度運(yùn)行。

3.調(diào)度時(shí)機(jī)

核心進(jìn)行進(jìn)程調(diào)度的時(shí)機(jī)有以下5種情況:

(1)當(dāng)前進(jìn)程調(diào)用系統(tǒng)調(diào)用nanosleep( )或者pause( ),使自己進(jìn)入睡眠狀態(tài),主動(dòng)讓出一段時(shí)間的CPU的使用權(quán)。

(2)進(jìn)程終止,永久地放棄對(duì)CPU的使用。

(3)在時(shí)鐘中斷處理程序執(zhí)行過程中,發(fā)現(xiàn)當(dāng)前進(jìn)程連續(xù)運(yùn)行的時(shí)間過長(zhǎng)。

(4)當(dāng)喚醒一個(gè)睡眠進(jìn)程時(shí),發(fā)現(xiàn)被喚醒的進(jìn)程比當(dāng)前進(jìn)程更有資格運(yùn)行。

(5)一個(gè)進(jìn)程通過執(zhí)行系統(tǒng)調(diào)用來改變調(diào)度策略或者降低自身的優(yōu)先級(jí)(如nice命令),從而引起立即調(diào)度。

4.調(diào)度算法

進(jìn)程調(diào)度的算法應(yīng)該比較簡(jiǎn)單,以便減少頻繁調(diào)度時(shí)的系統(tǒng)開銷。Linux執(zhí)行進(jìn)程調(diào)度時(shí),首先查找所有在就緒隊(duì)列中的進(jìn)程,從中選出優(yōu)先級(jí)最高且在內(nèi)存的一個(gè)進(jìn)程。如果隊(duì)列中有實(shí)時(shí)進(jìn)程,那么實(shí)時(shí)進(jìn)程將優(yōu)先運(yùn)行。如果最需要運(yùn)行的進(jìn)程不是當(dāng)前進(jìn)程,那么當(dāng)前進(jìn)程就被掛起,并且保存它的現(xiàn)場(chǎng)—— 所涉及的一切機(jī)器狀態(tài),包括程序計(jì)數(shù)器和CPU寄存器等,然后為選中的進(jìn)程恢復(fù)運(yùn)行現(xiàn)場(chǎng)。

(二)Linux常用調(diào)度命令

· nohup命令

nohup命令的功能是以忽略掛起和退出的方式執(zhí)行指定的命令。其命令格式是:

nohup command?。踑rguments]

其中,command是所要執(zhí)行的命令,arguments是指定命令的參數(shù)。

nohup命令告訴系統(tǒng),command所代表的命令在執(zhí)行過程中不受任何結(jié)束運(yùn)行的信號(hào)(hangup和quit)的影響。例如,

$ nohup find / -name exam.txt -printf1

find命令在后臺(tái)運(yùn)行。在用戶注銷后,它會(huì)繼續(xù)運(yùn)行:從根目錄開始,查找名字是exam.txt的文件,結(jié)果被定向到文件f1中。

如果用戶沒有對(duì)輸出進(jìn)行重定向,則輸出被附加到當(dāng)前目錄的nohup.out文件中。如果用戶在當(dāng)前目錄中不具備寫權(quán)限,則輸出被定向到$HOME/nohup.out 中。

· at命令

at命令允許指定命令執(zhí)行的時(shí)間。at命令的常用形式是:

at time command

其中,time是指定命令command在將來執(zhí)行時(shí)的時(shí)間和日期。時(shí)間的指定方法有多種,用戶可以使用絕對(duì)時(shí)間,也可以用相對(duì)時(shí)間。該指定命令將以作業(yè)形式在后臺(tái)運(yùn)行。例如:

$ at 15:00 Oct 20

回車后進(jìn)入接收方式,接著鍵入以下命令:

mail -s "Happy Birthday!" liuzheny

按下D鍵,屏幕顯示:

job 862960800.a at Wed Oct 20 15:00:00 CST 1999

$

表明建立了一個(gè)作業(yè),其作業(yè)ID號(hào)是862960800.a,運(yùn)行作業(yè)的時(shí)間是1999年10月20日下午3:00,給liuzheny發(fā)一條標(biāo)題為“Happy Birthday!”(生日快樂)的空白郵件。

利用 at -l 可以列出當(dāng)前at隊(duì)列中所有的作業(yè)。

利用 at -r 可以刪除指定的作業(yè)。這些作業(yè)以前由at或batch命令調(diào)度。例如,

at -r 862960797.a

將刪除作業(yè)ID號(hào)是862960797.a的作業(yè)。其一般使用形式是:

at -r job_id

注意,結(jié)尾是.a的作業(yè)ID號(hào),表示這個(gè)作業(yè)是由at命令提交的;結(jié)尾是.b的作業(yè)ID號(hào),表示這個(gè)作業(yè)是由batch命令提交的。

· batch命令

batch命令不帶任何參數(shù),它提交的作業(yè)的優(yōu)先級(jí)比at命令提交的作業(yè)的優(yōu)先級(jí)低。batch無法指定作業(yè)運(yùn)行的時(shí)間。實(shí)際運(yùn)行時(shí)間要看系統(tǒng)中已經(jīng)提交的作業(yè)數(shù)量。如果系統(tǒng)中優(yōu)先級(jí)較高的作業(yè)比較多,那么,batch提交的作業(yè)則需要等待;如果系統(tǒng)空閑,則運(yùn)行batch提交的作業(yè)。例如,

$ batch

回車后進(jìn)入接收方式,接著鍵入命令:

find / -name exam.txt -print

按下D。退出接收方式,屏幕顯示:

job 862961540.b at Thu Nov 18 14:30:00 CST 1999

表示find命令被batch作為一個(gè)作業(yè)提交給系統(tǒng),作業(yè)ID號(hào)是862961540.b。如果系統(tǒng)當(dāng)前空閑,這個(gè)作業(yè)被立即執(zhí)行,其結(jié)果同樣作為郵件發(fā)送給用戶。

· jobs命令

jobs命令用來顯示當(dāng)前shell下正在運(yùn)行哪些作業(yè)(即后臺(tái)作業(yè))。例如:

$ jobs

[2] + Running tar tv3 *

[1] - Running find / -name README -print logfile

$

其中,第一列方括號(hào)中的數(shù)字表示作業(yè)序號(hào),它是由當(dāng)前運(yùn)行的shell分配的,而不是由操作系統(tǒng)統(tǒng)一分配的。在當(dāng)前shell環(huán)境下,第一個(gè)后臺(tái)作業(yè)的作業(yè)號(hào)為1,第二個(gè)作業(yè)的作業(yè)號(hào)為2,等等。

第二列中的“ ”號(hào)表示相應(yīng)作業(yè)的優(yōu)先級(jí)比“-”號(hào)對(duì)應(yīng)作業(yè)的優(yōu)先級(jí)高。

第三列表明作業(yè)狀態(tài),是否為運(yùn)行、中斷、等待輸入或停止等。

最后列出的是創(chuàng)建當(dāng)前這個(gè)作業(yè)所對(duì)應(yīng)的命令行。

利用 jobs -l 形式,可以在作業(yè)號(hào)后顯示出相應(yīng)進(jìn)程的PID。如果想只顯示相應(yīng)進(jìn)程的PID,不顯示其它信息,則使用 jobs -p 形式。

· fg命令

fg命令把指定的后臺(tái)作業(yè)移到前臺(tái)。其使用格式是:

fg [job…]

其中,參數(shù)job是一個(gè)或多個(gè)進(jìn)程的PID,或者是命令名稱或者作業(yè)號(hào)(前面要帶有一個(gè)“%”號(hào))。例如:

$ jobs

[2] + Running tar tv3 *

[1] - Running find / -name README -print logfile

$ fg %find

find / -name README -print logfile

注意,顯示的命令行末尾沒有“”符號(hào)。下面命令能產(chǎn)生同樣的效果:

$ fg %1

這樣,find命令對(duì)應(yīng)的進(jìn)程就在前臺(tái)執(zhí)行。當(dāng)后臺(tái)只有一個(gè)作業(yè)時(shí),鍵入不帶參數(shù)的fg命令,就能使相應(yīng)進(jìn)程移到前臺(tái)。當(dāng)有兩個(gè)或更多的后臺(tái)作業(yè)時(shí),鍵入不帶參數(shù)的fg,就把最后進(jìn)入后臺(tái)的進(jìn)程首先移到前臺(tái)。

· bg命令

bg命令可以把前臺(tái)進(jìn)程換到后臺(tái)執(zhí)行。其使用格式是:

bg [job…]

其中,job是一個(gè)或多個(gè)進(jìn)程的PID、命令名稱或者作業(yè)號(hào),在參數(shù)前要帶“%”號(hào)。例如,在cc(C編譯命令)命令執(zhí)行過程中,按下Z鍵,使這個(gè)作業(yè)掛起。然后鍵入以下命令:

$ bg %cc

該掛起的作業(yè)在后臺(tái)重新開始執(zhí)行。

Linux系統(tǒng)進(jìn)程調(diào)度

主要參考 :Linux manual page - sched

自從linux內(nèi)核2.6.23以來,默認(rèn)的進(jìn)程調(diào)度器就被設(shè)置為完全公平調(diào)度器(CFS,complete fair scheduler),取代了之前的O(1)調(diào)度器。

每個(gè)線程都有一個(gè)靜態(tài)調(diào)度優(yōu)先級(jí),即 sched_priority 字段。

一個(gè)線程的調(diào)度策略決定了線程會(huì)被插入到同級(jí)靜態(tài)優(yōu)先級(jí)的線程隊(duì)列的位置,以及它在隊(duì)列中會(huì)怎樣移動(dòng)。

所有的調(diào)度都是可插入的,如果一個(gè)更高靜態(tài)優(yōu)先級(jí)的線程準(zhǔn)備好了,現(xiàn)在運(yùn)行中的線程就會(huì)被插入。而調(diào)度策略則僅僅影響了同樣靜態(tài)優(yōu)先級(jí)的線程。

進(jìn)程(線程)可以通過系統(tǒng)調(diào)用設(shè)置自身或者其他進(jìn)程(線程)的調(diào)度策略。

其中 pid 為0時(shí),設(shè)置自身的調(diào)度策略和參數(shù)。結(jié)構(gòu)體 sched_attr 包含以下字段: size 、 sched_policy (即調(diào)度策略,具體會(huì)在下一節(jié)介紹)、 sched_flags 、 sched_nice 、 sched_runtime 、 sched_deadline 、 sched_period (最后三個(gè)為 SCHED_DEADLINE 相關(guān)的參數(shù))。當(dāng)設(shè)置成功,系統(tǒng)調(diào)用返回0;否則返回-1,并會(huì)設(shè)置 errno 。

普通進(jìn)程: SCHED_OTHER / SCHED_BATCH / SCHED_IDLE

實(shí)時(shí)進(jìn)程: SCHED_FIFO / SCHED_RR

特殊實(shí)時(shí)進(jìn)程: SCHED_DEADLINE

靜態(tài)優(yōu)先級(jí):Static_priority:對(duì)于普通進(jìn)程,靜態(tài)優(yōu)先級(jí)為0;對(duì)于實(shí)時(shí)進(jìn)程,靜態(tài)優(yōu)先級(jí)為1-99,99為最高優(yōu)先級(jí)。

動(dòng)態(tài)優(yōu)先級(jí):Dynamic_priority:僅對(duì)普通進(jìn)程有用,取決于nice和一個(gè)動(dòng)態(tài)調(diào)整的量(比如進(jìn)程ready卻沒被調(diào)度,則增加)。

Linux中如何啟動(dòng)進(jìn)程?進(jìn)程調(diào)度命令有哪些?

Linux技術(shù)的發(fā)展引起了很多企業(yè)和個(gè)人的關(guān)注。市場(chǎng)對(duì)Linux運(yùn)維的需求逐漸增加,學(xué)習(xí)Linux技術(shù)的人越來越多。在Linux運(yùn)維中,進(jìn)程是必須學(xué)習(xí)掌握的技能。那么Linux中如何啟動(dòng)進(jìn)程?常用的進(jìn)程調(diào)度命令有哪些?

執(zhí)行中的程序稱作進(jìn)程。當(dāng)程序的可執(zhí)行文件存儲(chǔ)在存儲(chǔ)器中并運(yùn)行時(shí),每個(gè)進(jìn)程將被動(dòng)態(tài)分配系統(tǒng)資源、內(nèi)存、安全屬性和相關(guān)狀態(tài)。多個(gè)進(jìn)程可以與同一個(gè)程序相關(guān)聯(lián),并在同一時(shí)間執(zhí)行,而不會(huì)相互干擾。操作系統(tǒng)將有效地管理和跟蹤所有正在運(yùn)行的進(jìn)程。

Linux中如何啟動(dòng)進(jìn)程?啟動(dòng)進(jìn)程的方法是什么?

手工啟動(dòng)。用戶在輸入端發(fā)出命令,直接啟動(dòng)進(jìn)程。分為前臺(tái)啟動(dòng)和后臺(tái)啟動(dòng)。前臺(tái)啟動(dòng):直接在SHELL中輸入命令進(jìn)行啟動(dòng)。后臺(tái)啟動(dòng):?jiǎn)?dòng)一個(gè)目前并不緊急的進(jìn)程。

調(diào)度啟動(dòng)。系統(tǒng)管理員根據(jù)系統(tǒng)資源和進(jìn)程占用資源的情況,事先進(jìn)行調(diào)度安排,指定任務(wù)運(yùn)行的時(shí)間和場(chǎng)合,到時(shí)候系統(tǒng)會(huì)自動(dòng)完成該任務(wù)。

常用的進(jìn)程調(diào)度命令有哪些?

常用的進(jìn)程調(diào)度命令有:at、batch、crontab。

以上便是關(guān)于“如何啟動(dòng)或終止進(jìn)程?常用的進(jìn)程調(diào)度命令有哪些?”的相關(guān)介紹。想要成為一名優(yōu)秀的Linux運(yùn)維工程師,需要掌握更多的Linux知識(shí)。

Linux進(jìn)程的調(diào)度

上回書說到 Linux進(jìn)程的由來 和 Linux進(jìn)程的創(chuàng)建 ,其實(shí)在同一時(shí)刻只能支持有限個(gè)進(jìn)程或線程同時(shí)運(yùn)行(這取決于CPU核數(shù)量,基本上一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)CPU),在一個(gè)運(yùn)行的操作系統(tǒng)上可能運(yùn)行著很多進(jìn)程,如果運(yùn)行的進(jìn)程占據(jù)CPU的時(shí)間很長(zhǎng),就有可能導(dǎo)致其他進(jìn)程餓死。為了解決這種問題,操作系統(tǒng)引入了 進(jìn)程調(diào)度器 來進(jìn)行進(jìn)程的切換,輪流讓各個(gè)進(jìn)程使用CPU資源。

1)rq: 進(jìn)程的運(yùn)行隊(duì)列( runqueue), 每個(gè)CPU對(duì)應(yīng)一個(gè) ,包含自旋鎖(spinlock)、進(jìn)程數(shù)量、用于公平調(diào)度的CFS信息結(jié)構(gòu)、當(dāng)前運(yùn)行的進(jìn)程描述符等。實(shí)際的進(jìn)程隊(duì)列用紅黑樹來維護(hù)(通過CFS信息結(jié)構(gòu)來訪問)。

2)cfs_rq: cfs調(diào)度的進(jìn)程運(yùn)行隊(duì)列信息 ,包含紅黑樹的根結(jié)點(diǎn)、正在運(yùn)行的進(jìn)程指針、用于負(fù)載均衡的葉子隊(duì)列等。

3)sched_entity: 把需要調(diào)度的東西抽象成調(diào)度實(shí)體 ,調(diào)度實(shí)體可以是進(jìn)程、進(jìn)程組、用戶等。這里包含負(fù)載權(quán)重值、對(duì)應(yīng)紅黑樹結(jié)點(diǎn)、 虛擬運(yùn)行時(shí)vruntime 等。

4)sched_class:把 調(diào)度策略(算法)抽象成調(diào)度類 ,包含一組通用的調(diào)度操作接口。接口和實(shí)現(xiàn)是分離,可以根據(jù)調(diào)度接口去實(shí)現(xiàn)不同的調(diào)度算法,使一個(gè)Linux調(diào)度程序可以有多個(gè)不同的調(diào)度策略。

1) 關(guān)閉內(nèi)核搶占 ,初始化部分變量。獲取當(dāng)前CPU的ID號(hào),并賦值給局部變量CPU, 使rq指向CPU對(duì)應(yīng)的運(yùn)行隊(duì)列 。 標(biāo)識(shí)當(dāng)前CPU發(fā)生任務(wù)切換 ,通知RCU更新狀態(tài),如果當(dāng)前CPU處于rcu_read_lock狀態(tài),當(dāng)前進(jìn)程將會(huì)放入rnp- blkd_tasks阻塞隊(duì)列,并呈現(xiàn)在rnp- gp_tasks鏈表中。 關(guān)閉本地中斷 ,獲取所要保護(hù)的運(yùn)行隊(duì)列的自旋鎖, 為查找可運(yùn)行進(jìn)程做準(zhǔn)備 。

2) 檢查prev的狀態(tài),更新運(yùn)行隊(duì)列 。如果不是可運(yùn)行狀態(tài),而且在內(nèi)核態(tài)沒被搶占,應(yīng)該從運(yùn)行隊(duì)列中 刪除prev進(jìn)程 。如果是非阻塞掛起信號(hào),而且狀態(tài)為TASK_INTER-RUPTIBLE,就把該進(jìn)程的狀態(tài)設(shè)置為TASK_RUNNING,并將它 插入到運(yùn)行隊(duì)列 。

3)task_on_rq_queued(prev) 將pre進(jìn)程插入到運(yùn)行隊(duì)列的隊(duì)尾。

4)pick_next_task 選取將要執(zhí)行的next進(jìn)程。

5)context_switch(rq, prev, next)進(jìn)行 進(jìn)程上下文切換 。

1) 該進(jìn)程分配的CPU時(shí)間片用完。

2) 該進(jìn)程主動(dòng)放棄CPU(例如IO操作)。

3) 某一進(jìn)程搶占CPU獲得執(zhí)行機(jī)會(huì)。

Linux并沒有使用x86 CPU自帶的任務(wù)切換機(jī)制,需要通過手工的方式實(shí)現(xiàn)了切換。

進(jìn)程創(chuàng)建后在內(nèi)核的數(shù)據(jù)結(jié)構(gòu)為task_struct , 該結(jié)構(gòu)中有掩碼屬性cpus_allowed,4個(gè)核的CPU可以有4位掩碼,如果CPU開啟超線程,有一個(gè)8位掩碼,進(jìn)程可以運(yùn)行在掩碼位設(shè)置為1的CPU上。

Linux內(nèi)核API提供了兩個(gè)系統(tǒng)調(diào)用 ,讓用戶可以修改和查看當(dāng)前的掩碼:

1) sched_setaffinity():用來修改位掩碼。

2) sched_getaffinity():用來查看當(dāng)前的位掩碼。

在下次task被喚醒時(shí),select_task_rq_fair根據(jù)cpu_allowed里的掩碼來確定將其置于哪個(gè)CPU的運(yùn)行隊(duì)列,一個(gè)進(jìn)程在某一時(shí)刻只能存在于一個(gè)CPU的運(yùn)行隊(duì)列里。

在Nginx中,使用了CPU親和度來完成某些場(chǎng)景的工作:

worker_processes? ? ? 4;

worker_cpu_affinity 0001001001001000;

上面這個(gè)配置說明了4個(gè)工作進(jìn)程中的每一個(gè)和一個(gè)CPU核掛鉤。如果這個(gè)內(nèi)容寫入Nginx的配置文件中,然后Nginx啟動(dòng)或者重新加載配置的時(shí)候,若worker_process是4,就會(huì)啟用4個(gè)worker,然后把worker_cpu_affinity后面的4個(gè)值當(dāng)作4個(gè)cpu affinity mask,分別調(diào)用ngx_setaffinity,然后就把4個(gè)worker進(jìn)程分別綁定到CPU0~3上。

worker_processes? ? ? 2;

worker_cpu_affinity 01011010;

上面這個(gè)配置則說明了兩個(gè)工作進(jìn)程中的每一個(gè)和2個(gè)核掛鉤。


文章名稱:linux進(jìn)程調(diào)度命令 linux進(jìn)程調(diào)度算法代碼
文章來源:http://weahome.cn/article/doipjsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部