什麼是用戶態?什麼是核心態?用戶態切換到內核態的3種方式?
操作系統需要兩種CPU狀態:
• 內核態(Kernel Mode):運行操作系統程序
• 用戶態(User Mode):運行用戶程序
特權級別:
特權環:R0、R1、R2和R3
R0相當於內核態,R3相當於用戶態;
不同級別能夠運行不同的指令集合;
主要差別:
當程序運行在3級特權級上時,就可以稱之爲運行在用戶態,因爲這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態;反之,當程序運行在特權級(0級)上時,就可以稱之爲運行在內核態。
用戶態切換到內核態
- 系統調用:這是用戶態進程主動要求切換到內核態的一種方式,用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作。而系統調用的機制其核心還是使用了操作系統爲用戶特別開放的一箇中斷來實現,例如Linux的int 80h中斷。
- 異常:當CPU在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常。
- 外圍設備的中斷:當外圍設備完成用戶請求的操作後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,如果先前執行的指令是用戶態下的程序,那麼這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行後續操作等。
什麼是TCP的流量控制?
接收端處理數據的速度是有限的,如果發送方的速度太快,就會把接收端的緩衝區打滿。這個時候如果繼續發送數據,就會導致丟包等一系列連鎖反應。
所以TCP支持根據接收端能力來決定發送端的發送速度。這個機制叫做流量控制。
TCP流量控制是怎麼實現的?
rwnd—接受方根據自己的緩存大小,動態地調整發送方發送窗口大小,這就是接受窗口的rwnd,即TCP報文首部的“窗口”字段值。
什麼是TCP的擁塞控制
擁塞控制是防止過多的數據注入網絡,使得網絡中的路由器或者鏈路過載。流量控制是點對點的通信量控制,而擁塞控制是全局的網絡流量整體性的控制。發送方有一個擁塞控制窗口——cwnd。該窗口值反映了網絡的當前容量。
TCP的擁塞控制是怎麼實現的?
- 慢開始和擁塞避免
-
慢開始
最開始發送方的擁塞窗口爲1,由小到大逐漸增大發送窗口和擁塞窗口。每經過一個RTT(即一個往返時間),擁塞窗口cwnd加倍。當cwnd增大到規定的慢開始門限(ssthresh),則使用擁塞避免算法,避免cwnd增長過大。 -
擁塞避免
cwnd>ssthresh後,停止慢開始算法而使用擁塞避免算法。
在該階段,每經過一個RTT,cwnd就增長1(加法增大)。
在慢開始和擁塞避免的過程中,一旦發現網絡擁塞(即發送方沒有按時收到確認),就把ssthresh設爲當前值的一半(乘法減小),並且重新設置cwnd爲1,重新慢啓動。
- 快重傳與快恢復
TCP連接有時會因爲等待重傳計時的超時而空閒較長時間,慢開始和擁塞避免無法解決這類問題,因此提出了快重傳。
當網絡擁塞時,慢開始和擁塞避免算法會將cwnd重新置爲1,發送速率降低太多,因此提出了快恢復算法。
快重傳與快恢復是對慢開始和擁塞避免算法的改進。
- 快重傳
接收方每次收到一個失序的報文段(如報文M1,M2,M4,M5,M6中,由於沒有M3,後面的M4,M5,M6均爲失序報文)後就立即發出對M2(注意不是M3)的重複確認,發送方只要連續收到三個重複確認就立即重傳M3(不用等待重傳計時器)。
注:如果發送方收到了4次M2報文的確認,後三次爲重複確認。也就是說總共要收到4次確認報文才重傳。 - 快恢復
當發送方連續收到了三個重複確認,就乘法減半(慢開始門限減半),將當前的cwnd設置爲慢開始門限,並且採用擁塞避免算法。