多任務操做系統就是能同時併發的交互執行多個進程的操做系統
多任務操做系統分爲:linux
進程能夠被分爲:算法
Linux採用了兩種不一樣的優先級範圍:併發
時間片:被搶佔以前持續運行的時間函數
Linux調度器是以模塊方式提供的,其目的是爲了容許不一樣類型的進程能夠有針對性的選擇算法
現代進程調度器有兩個通用的概念:進程優先級和時間片
徹底公平調度(CFS)的出發點基於一個簡單的理論:進程調度的效果應如同系統擁有一個完美的多任務處理器,即在系統中,每一個進程將得到1/n的處理器時間---有n個可運行進程
徹底公平調度(CFS)的作法是容許每一個進程運行一段時間,循環輪轉,選擇運行最少的進程做爲下個運行進程,而不是採用分配給每一個進程時間片了操作系統
調度器實體結構:CFS使用調度器實體結構來追蹤進程運行記帳
虛擬實時:vruntime變量存放進程虛擬運行時間,CFS使用vruntime變量來記錄程序到底運行了多長時間以及還用運行多長時間進程
進程選擇:CFS調度算法的核心----選擇具備最小vruntime的任務內存
進程調度的主要入口點是schedule(),他正是內核其餘部分用於調用進程調度器的入口:選擇那個進程能夠運行,什麼時候將其投入運行get
上下文切換:從一個可執行進程切換到另外一個可執行進程,由context_switch()函數負責處理
該函數完成兩項基本工做:it
用戶搶佔發生的狀況:變量
Linux提供了兩種調度策略:
系統調用能夠用來操做和處理進程優先級,調度策略及處理器綁定,同時還提供了顯式的將處理器交給其餘進程的機制
與調度策略和優先級相關的系統調用:
與處理器綁定相關的系統調用:
Linux調度程序提供強制的處理器綁定(processor affinity)機制
放棄處理器時間:Linux經過sched_yield()系統調用提供了一種讓進程顯式的將處理器時間讓給其餘等待執行進程的機制