1、內核
看做是不斷對請求進行響應的服務器
內核服務
2 內核搶佔
內核搶佔特點:一個內核態運行的進程,可能在執行內核函數期間被另外一個進程取代
用戶搶佔:內核即將返回用戶空間的時候,如果need resched標誌被設置,會導致schedule()被調用,此時就會發生用戶搶佔。在內核返回用戶空間的時候,它知道自己是安全的。所以,內核無論是在從中斷處理程序還是在系統調用後返回,都會檢查need resched標誌。如果它被設置了,那麼,內核會選擇一個其他(更合適的)進程投入運行。
簡而言之,用戶搶佔在以下情況時產生:
(1)從系統調返回用戶空間。
(2)從中斷處理程序返回用戶空間。
內核搶佔目的:
減少用戶態進程的分派延遲(diapatch tatency),即從進程變爲可執行狀態到它實際開始運行之間的時間間隔。
什麼情況不允許內核搶佔:當被current_thread_info()宏所引用的thread_info描述符的preempt_count字段大於0時,就禁止內核搶佔。
內核搶佔時機:只有當內核正在執行異常處理程序(尤其是系統調用),而且內核搶佔沒有被顯式的禁用時(即preempt_count=0),纔可能搶佔內核。本地CPU必須打開本地中斷,否則無法完成內核搶佔。
3 同步原語