阻塞(
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函式將會阻塞在這裡,移植到串列埠輸入緩...