Linux下的阻塞(Block)

2021-06-15 21:17:00 字數 741 閱讀 1410

阻塞(

block

這個概念。

當程序呼叫乙個阻塞的系統函式時,該程序被置於睡眠(

sleep

)狀態,

這時核心排程其它程序執行,直到該程序等待的事件發生了

(比如網路上接收到資料報,或者呼叫

sleep

指定的睡眠時間到了

)它才有可能繼續執行

。與睡眠狀態相對的是執行(running

)狀態,在

linux

核心中,處於執行狀態的程序分為兩種情況: ¨

正在被排程執行

cpu處於該程序的上下文環境中,程式計數器(

eip)裡儲存著該程序的指令位址,通用暫存器裡儲存著該程序運算過程的中間結果,正在執行該程序的指令,正在讀寫該程序的位址空間。 ¨

就緒狀態。該程序不需要等待什麼事件發生,隨時都可以執行,但

cpu暫時還在執行另乙個程序,所以該程序在乙個就緒佇列中等待被核心排程。系統中可能同時有多個就緒的程序,那麼該排程誰執行呢?核心的排程演算法是基於優先順序和時間片的

而且會根據每個程序的運**況動態調整它的優先順序和時間片

,讓每個程序都能比較公平地得到機會執行,同時要兼顧使用者體驗,不能讓和使用者互動的程序響應太慢。

linux下阻塞 非阻塞區別

socket基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方 式來判斷具體操作是否成功。對於connect,accpet操作,通過select判斷,對於recv,recvfrom,sen...

linux下串列埠的阻塞和非阻塞操作

有兩個可以進行控制串列埠阻塞性 同時控制read和write 乙個是在開啟串列埠的時候,open函式是否帶o ndelay 第二個是可以在開啟串列埠之後通過fcntl 函式進行控制。阻塞的定義 對於read,block指當串列埠輸入緩衝區沒有資料的時候,read函式將會阻塞在這裡,移植到串列埠輸入緩...

linux下串列埠的阻塞和非阻塞操作

有兩個可以進行控制串列埠阻塞性 同時控制read和write 乙個是在開啟串列埠的時候,open函式是否帶o ndelay 第二個是可以在開啟串列埠之後通過fcntl 函式進行控制。阻塞的定義 對於read,block指當串列埠輸入緩衝區沒有資料的時候,read函式將會阻塞在這裡,移植到串列埠輸入緩...