七種狀態轉換圖
乙個程序在其生存期內,可處於一組不同的狀態下,稱為程序狀態,如下圖所示。程序狀態儲存在程序任務結構的state欄位中。當程序正在等待 系統中的資源而處於等待狀態時,則稱其處於睡眠等待狀態。在linux系統中,睡眠等待狀態分為可中斷的和不可中斷的等待狀態。
執行狀態(task_running)。當程序正在被cpu執行,或已經準備就緒隨時可由排程程式執行,則稱該程序為處於執行狀態 (running)。若此時程序沒有被cpu執行,則稱其處於就緒執行狀態。程序可以在核心態執行,也可以在使用者態運 行。當乙個程序在核心**中執行時,我們稱其處於核心執行態,或簡稱為核心態;當乙個程序正在執行使用者自己的**時,我們稱其為處於使用者執行態(使用者態)。當系統資源已經可用時,程序就被喚醒而進入準備執行狀態,該狀態稱為就緒態。這些狀態(在核心中表示方法相同,都被稱為處於 task_running狀態。當乙個新程序剛被建立出後就處於本狀態中。
(2)可中斷睡眠狀態(task_interruptible)。當程序處於可中斷等待(睡眠)狀態時,系統不會排程該程序執行。當系統產生乙個中斷或者釋放了程序正在等待的資源,或者程序收到乙個訊號,都可以喚醒程序轉換到就緒狀態(即可執行狀態)。
(3)不可中斷睡眠狀態(task_uninterruptible)。除了不會因為收到訊號而被喚醒,該狀態與可中斷睡眠狀態類似。但處於該狀態 的程序只有被使用wake_up()函式明確喚醒時才能轉換到可執行的就緒狀態。該狀態通常在程序需要不受干擾地等待或者所等待事件會很快發生時使用。
(4)暫停狀態(task_stopped)。當程序收到訊號sigstop、sigtstp、sigttin或sigttou時就會進入暫停狀 態。可向其傳送sigcont訊號讓程序轉換到可執行狀態。程序在除錯期間接收到任何訊號均會進入該狀態。
(5)僵死狀態(task_zombie)。當程序已停止執行,但其父程序還沒有呼叫wait()詢問其狀態時,則稱該程序處於僵死狀態。為了了讓 父程序能夠獲取其停止執行的資訊,此時子程序的任務資料結構資訊還需要保留著。一旦父程序呼叫wait()取得了子程序的資訊,則處於該狀態程序的任務數 據結構就會被釋放。
當乙個程序的執行時間片用完,系統就會使用排程程式強制切換到其他的程序去執行。另外,如果程序在核心態執行時需要等待系統的某個資源,此時該程序 就會呼叫sleep_on()或interruptible_sleep_on()自願地放棄cpu的使用權,而讓排程程式去執行其他程序。程序則進入睡 眠狀態。
只有當程序從"核心執行態"轉移到"睡眠狀態"時,核心才會進行程序切換操作。在核心態下執行的程序不能被其他程序搶占,而且乙個程序不能改變另乙個程序的狀態。為了避免程序切換時造成核心資料錯誤,核心在執行臨界區**時會禁止一切中斷。
OSPF的七種狀態機
router id 在乙個ospf域內,用於標識每台路由器的id。選舉規則 1.手工指定 建議 2.如果沒有手工指定,使用loopback介面中最大的ip位址作為router id 3.如果沒有配置loopback介面,那麼使用物理介面中最大的ip位址作為router id 鏈路狀態資訊 鏈路資訊包...
Linux七種執行級別
linux系統的7種執行級別 linux系統有7個執行級別 runlevel 執行級別0 系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動 執行級別1 單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸 執行級別2 多使用者狀態 沒有nfs 執行級別3 完全的多使用者狀態 有nf...
Linux的七種執行模式
0 代表 關機模式 此模式 linux是關機狀態 1 代表 單使用者模式 例如root的密碼忘記了,可以在該模式下完成密碼的找回 2 沒有nfs網路共享的多使用者模式 nfs network file system 3 代表的是命令列模式 一般生產環境都是使用的該模式,該模式下沒有桌面程式 4 暫時...