CPU密集型(CPU-bound):計算密集型,須要大量的CPU時間進行運算linux
實時進程:有實時需求,不該被低優先級的進程阻塞,響應時間要短要穩定。主要用於視頻、音配、機械控制。算法
調度策略:是一組規則,它們決定何時以怎樣的方式選擇一個新進程運行shell
Linux的調度基於分時和優先級策略:架構
調度策略本質上是一種算法,這些算法從實現的角度看僅僅是從運行隊列中選擇一個新進程,選擇的過程當中運用了不一樣的策略而已框架
用戶態進程只能被動調度,內核線程是隻有內核態沒有用戶態的特殊進程。函數
switch_to利用了prev和next兩個參數:prev指向當前進程,next指向被調度的進程操作系統
最通常的狀況:正在運行的用戶態進程X切換到運行用戶態進程Y的過程線程
關鍵點:中斷和中斷返回中有CPU上下文的切換,進程調度的過程當中有進程上下文的切換,此時切換了兩個進程間的堆棧3d
X86下的地址空間有4G,0~3G用戶態、內核態能夠訪問,3G以上只有內核態能夠訪問
內核是全部進程共享的。內核至關於出租車,進程至關於客人,對全部進程都同樣。沒有進程須要「承載」的時候,內核進入idle0號進程進行「空轉」
內核是各類中斷處理過程和內核線程的集合rest
最簡單、最複雜的操做——執行ls命令:
從CPU和內存的角度看Linux系統的執行:
完成跟蹤
linux調度的核心函數爲schedule,schedule函數封裝了內核調度的框架。細節實現上調用具體的調度類中的函數實現。當切換進程已經選好後,就開始用戶虛擬空間的處理,而後就是進程的切換switch_to()。所謂進程的切換主要就是堆棧的切換,這是由宏操做switch_to()完成的。並且知道schedule中調用next = pick_next_task(rq, prev);實行進程調度算法,其後調用context_switch(rq, prev, next);進行進程上下文切換,其中context_switch(rq, prev, next)中的宏switch_to起着關鍵做用。