新聞中心
在linux操作系統(tǒng)下,有多種狀態(tài)的進程分布于用戶的操作中。其中最為常見的是D狀態(tài)的進程,它位于 R(正在運行)進程與S(掛起)進程之間,既不是正在運行的進程,也不是掛起的進程。

D狀態(tài)進程即為不可中斷的睡眠狀態(tài),該進程就此進入暫停狀態(tài),擁有被掛起進程具備的所有權(quán)限,但不占用CPU資源,也不允許外部的中斷端口喚醒它。這是因為D狀態(tài)的進程正在等待IO操作的完成,而這需要一段時間,所以D狀態(tài)的進程要一直保持暫停狀態(tài)直至IO的完成,才可被喚醒繼續(xù)運行。
D狀態(tài)進程的切換是通過“休眠(sleep)”和”喚醒(wake)”兩個操作實現(xiàn)的。在系統(tǒng)調(diào)度時,進程會根據(jù)不同情況進入休眠狀態(tài),例如,當(dāng)進程等待IO操作完成時,會進入休眠狀態(tài);當(dāng)IO操作完成時,調(diào)度器會喚醒I/O等待進程,給予它運行的機會。這就說明:使用“休眠(sleep)”和”喚醒(wake)”,可以實現(xiàn)進程從R(正在運行)與S(掛起)間的切換,而當(dāng)進程從R進入休眠狀態(tài),系統(tǒng)內(nèi)的進程狀態(tài)會從R變更為D,反之則從D變更為R。
代碼實現(xiàn)如下:
// 休眠(sleep)
int sleep(int seconds)
{
int ret;
// 先設(shè)定一個信號掛起的處理函數(shù)
handler my_handler = {.sa_handler = suspender};
sigaction(SIGALARM, &my_handler, NULL);
// 設(shè)置定時器,每seconds秒觸發(fā)一次SIGALARM信號
struct itimerval timer;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
timer.it_value.tv_sec = seconds;
timer.it_value.tv_usec = 0;
ret = setitimer(ITIMER_REAL, &timer, NULL);
if (ret
return ret;
// 通過發(fā)送SIGALARM信號來調(diào)節(jié)進程的狀態(tài)
sigaction(SIGALARM, &my_handler, NULL);
return 0;
}
// 喚醒(wake)
int wake(int seconds)
{
int ret;
// 設(shè)置定時器,每seconds秒觸發(fā)一次SIGALARM信號
struct itimerval timer;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
timer.it_value.tv_sec = seconds;
timer.it_value.tv_usec = 0;
ret = setitimer(ITIMER_REAL, &timer, NULL);
if (ret
return ret;
// 再次設(shè)定一個喚醒的處理函數(shù)
Handler my_handler = {.sa_handler = waker};
sigaction(SIGALARM, &my_handler, NULL);
// 通過發(fā)送SIGALARM信號來恢復(fù)進程的狀態(tài)
sigaction(SIGALARM, &my_handler, NULL);
return 0;
}
在Linux操作系統(tǒng)下,D狀態(tài)的進程是運行與掛起的中介,即不是正在運行的進程,又不是掛起的進程。它的運行與掛起切換是通過“休眠(sleep)”和”喚醒(wake)”兩個操作實現(xiàn)的,它不僅能夠更好地優(yōu)化系統(tǒng)調(diào)度,增強系統(tǒng)的吞吐量,而且還能有效地減少對CPU的資源消耗,從而提高系統(tǒng)的性能。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機房服務(wù)器托管租用。
當(dāng)前標(biāo)題:Linux下D狀態(tài)進程:運行與掛起間的切換(linuxd狀態(tài)的進程)
網(wǎng)站鏈接:http://www.5511xx.com/article/dhiieio.html


咨詢
建站咨詢
