日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入剖析:Linux等待隊列和完成量的區(qū)別(linux等待隊列和完成量區(qū)別)

Linux是一個開源的操作系統(tǒng),它的核心部分是由C語言編寫的,運行在各種硬件設(shè)備上。在Linux中,等待隊列和完成量非常重要,它們對于進程的掛起和喚醒,以及異步通信起著重要的作用。但是,對于初學者來說,它們不易理解,容易混淆。本文將深入剖析Linux等待隊列和完成量的區(qū)別,幫助大家更清楚地了解它們之間的差別,以及在程序設(shè)計中的應(yīng)用。

1. 等待隊列

等待隊列是Linux中一種用來掛起進程的機制,一般用于同步線程之間的數(shù)據(jù)交換。比如,當一個進程需要訪問共享資源時,如果該資源當前正在被占用,則需要等待。這時,會把當前進程加入到等待隊列中,并掛起該進程,直到資源被釋放。在Linux中,等待隊列可以是一個列表,也可以是一個數(shù)組,它們都是由等待隊列頭結(jié)構(gòu)等管理的。

等待隊列頭結(jié)構(gòu)包括了等待隊列中所有掛起的進程,包括其線程ID和等待原因。同時,等待隊列頭結(jié)構(gòu)還包含了當前掛起的進程數(shù)量和信號量。在等待隊列頭結(jié)構(gòu)中,有一個指針,指向喚醒所有進程的函數(shù)。當資源被釋放時,該函數(shù)將被調(diào)用,此時等待隊列中的所有進程都將被喚醒。

在Linux中,等待隊列是實現(xiàn)進程間同步的重要手段。在多線程的環(huán)境下,等待隊列可以有效地防止資源的競爭,提高了程序的效率。

2. 完成量

完成量是Linux中用于異步通信的機制,它可以在數(shù)據(jù)處理完畢后,通知等待者已經(jīng)完成。在Linux中,完成量可以看成是一種與信號量相關(guān)的數(shù)據(jù)結(jié)構(gòu),在某些情況下,完成量可以替代信號量的使用。

完成量通過原子操作實現(xiàn),它不僅可以與其他進程通信,還能與硬件設(shè)備通信。在Linux中,硬件設(shè)備可以發(fā)送一個中斷信號,該信號會觸發(fā)一個中斷服務(wù)例程,中斷服務(wù)例程可以通過完成量來通知進程,已經(jīng)處理完畢。

在Linux中,完成量可以作為一種同步機制,它可以實現(xiàn)等待者與處理者之間的同步,提高系統(tǒng)的處理能力。同時,完成量還可以作為一種異步通信機制,用于在不同的進程之間進行通信。

3. 等待隊列與完成量的區(qū)別

在Linux中,等待隊列和完成量都是用來實現(xiàn)進程間同步和異步通信的機制。它們之間的主要區(qū)別在于:

(1)等待隊列用于掛起一個或多個進程,并在資源可用時喚醒它們。而完成量則用于異步通信,在數(shù)據(jù)處理完畢后,通知等待者已經(jīng)完成。

(2)等待隊列可以防止資源的競爭,提高程序的效率;而完成量則可以實現(xiàn)等待者和處理者之間的同步和異步通信。

(3)等待隊列是一種在時間上長時間等待的機制,而完成量則是在時間上短時間等待的機制。

等待隊列和完成量都是Unix/Linux操作系統(tǒng)中非常重要的機制,它們可以實現(xiàn)進程間的同步和異步通信,有助于提高系統(tǒng)的運行效率和處理能力。在程序設(shè)計中,正確理解等待隊列和完成量的區(qū)別,能幫助我們更好地利用這兩種機制,從而設(shè)計出更高效、更可靠的程序。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!

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

Linux進程調(diào)度

1.調(diào)度方式

Linux系統(tǒng)的調(diào)度方式基本上采用“

搶占式優(yōu)先級

”方式,當進程在用戶模式下運行時,不管它是否自愿,核心在一定條件下(如該進程的時間片用完或等待I/O)可以暫時中止其運行,而調(diào)度其他進程運行。一旦進程切換到內(nèi)核模式下運行時,就不受以上限制,而一直運行下去,僅在重新回到用戶模式之前才會發(fā)生進程調(diào)度。

Linux系統(tǒng)中的調(diào)度基本上繼承了UNIX系統(tǒng)的

以優(yōu)先級為基礎(chǔ)

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

2.調(diào)度策略

Linux系統(tǒng)針對不同類別的進程提供了3種不同的調(diào)度策略,即SCHED_FIFO、SCHED_RR及SCHED_OTHER。其中,SCHED_FIFO適合于

短實時進程

,它們對時間性要求比較強,而每次運行所需的時間比較短。一旦這種進程被調(diào)度且開始運行,就一直運行到自愿讓出CPU或被優(yōu)先級更高的進程搶占其執(zhí)行權(quán)為止。

SCHED_RR對應(yīng)“時間片輪轉(zhuǎn)法”,適合于每次運行需要

較長時間的實時進程

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

SCHED_OTHER是傳統(tǒng)的UNIX調(diào)度策略,適合于交互式的

分時進程

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

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

3.調(diào)度時機

核心進行進程調(diào)度的時機有以下5種情況:

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

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

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

(4)當喚醒一個睡眠進程時,發(fā)現(xiàn)被喚醒的進程比當前進程更有資格運行。

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

4.調(diào)度算法

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

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

· nohup命令

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

nohup command?。踑rguments]

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

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

$ nohup find / -name exam.txt -print>f1 &

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

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

· at命令

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

at time command

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

$ at 15:00 Oct 20

回車后進入接收方式,接著鍵入以下命令:

mail -s “Happy Birthday!” liuzheny

按下D鍵,屏幕顯示:

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

$

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

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

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

at -r.a

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

at -r job_id

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

· batch命令

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

$ batch

回車后進入接收方式,接著鍵入命令:

find / -name exam.txt -print

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

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

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

· jobs命令

jobs命令用來顯示當前shell下正在運行哪些作業(yè)(即后臺作業(yè))。例如:

$ jobs

+ Running tar tv3 *&

– Running find / -name README -print > logfile &

$

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

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

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

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

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

· fg命令

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

fg

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

$ jobs

+ Running tar tv3 *&

– Running find / -name README -print > logfile&

$ fg %find

find / -name README -print > logfile

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

$ fg %1

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

· bg命令

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

bg

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

$ bg %cc

linux等待隊列和完成量區(qū)別的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux等待隊列和完成量區(qū)別,深入剖析:Linux等待隊列和完成量的區(qū)別,Linux系統(tǒng)的進程調(diào)度的信息別忘了在本站進行查找喔。

四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機租用。成都機房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長,共創(chuàng)價值。


網(wǎng)站標題:深入剖析:Linux等待隊列和完成量的區(qū)別(linux等待隊列和完成量區(qū)別)
網(wǎng)站地址:http://m.5511xx.com/article/coochgi.html