傳統進程是單線程結構進程程序員
單線程結構進程的問題:算法
單線程結構進程在併發程序設計上存在的問題,進程切換開銷大,進程通訊開銷大,限制了進程併發的粒度,下降了並行計算的效率網絡
解決問題的思路:數據結構
把進程的兩項功能,即「獨立分配資源」與「被調度分派執行」分離開來,進程做爲系統資源分配和保護的獨立單位,不須要頻繁地切換,線程做爲系統調度和分派的基本單位,能輕裝運行,會被頻繁地調度和切換,線程的出現會減小進程併發執行所付出的時空開銷,使得併發粒度更細、併發性更好多線程
多線程環境下進程的概念:併發
在多線程環境中,進程是操做系統中進行保護和資源分配的獨立單位。具備:用來容納進程映像的虛擬地址空間,對進程、文件和設備的存取保護機制性能
線程是進程的一條執行路徑,是調度的基本單位,同一個進程中的全部線程共享進程得到的主存空間和資源。它具備:線程執行狀態,受保護的線程上下文,當線程不運行時,用於存儲現場信息,獨立的程序指令計數器,執行堆棧,容納局部變量的靜態存儲器操作系統
線程狀態有運行、就緒和睡眠,無掛起,與線程狀態變化有關的線程操做有:孵化、封鎖、活化、剝奪、指派、結束,OS感知線程環境下:處理器調度對象是線程,進程沒有三狀態(或者說只有掛起狀態),OS不感知線程環境下:處理器調度對象還是進程,用戶空間中的用戶調度程序調度線程線程
併發多線程程序設計的優勢:快速線程切換,減小(系統)管理開銷,(線程)通訊易於實現,並行程度提升,節省內存空間設計
多線程技術的應用:前臺和後臺工做,C/S應用模式,加快執行速度,設計用戶接口
線程管理的全部工做由OS內核來作,OS提供了一個應用程序設計接口API,供開發者使用KLT,OS直接調度KLT用戶空間P內核空間P
進程中的一個線程被阻塞了,內核能調度同一進程的其它線程佔有處理器運行,多處理器環境中,內核能同時調度同一進程中多個線程並行執行,內核自身也可用多線程技術實現,能提升操做系統的執行速度和效率,應用程序線程在用戶態運行,線程調度和管理在內核實現,在同一進程中,控制權從一個線程傳送到另外一個線程時須要模式切換,系統開銷較大
用戶空間運行的線程庫,提供多線程應用程序的開發和運行支撐環境,任何應用程序均需經過線程庫進行程序設計,再與線程庫鏈接後運行,線程管理的全部工做都由應用程序完成,內核沒有意識到線程的存在P用戶空間線程庫內核空間
全部線程管理數據結構均在進程的用戶空間中,線程切換不須要內核模式,能節省模式切換開銷和內核的寶貴資源,容許進程按應用特定須要選擇調度算法,甚至根據應用需求裁剪調度算法,能運行在任何OS上,內核在支持ULT方面不須要作任何工做,不能利用多處理器的優勢,OS調度進程,僅有一個ULT能執行,一個ULT的阻塞,將引發整個進程的阻塞
把阻塞式系統調用改形成非阻塞式的,當線程陷入系統調用時,執行jacketing程序,由jacketing程序來檢查資源使用狀況,以決定是否執行進程切換或傳遞控制權給另外一個線程
ULT適用於解決邏輯並行性問題,KLT適用於解決物理並行性問題
線程建立是徹底在用戶空間作的,單應用的多個ULT能夠映射成一些KLT,經過調整KLT數目,能夠達到較好的並行效果
組合用戶級線程/內核級線程設施,線程建立徹底在用戶空間中完成,線程的調度和同步也在應用程序中進行,一個應用中的多個用戶級線程被映射到一些(小於等於用戶級線程數目)內核級線程上,程序員能夠針對特定應用和機器調節內核級線程的數目,以達到總體最佳結果,該方法將會結合純粹用戶級線程方法和內核級線程方法的優勢,同時減小它們的缺點
KLT三態,系統調度負責,ULT三態,用戶調度負責,活躍態ULT表明綁定KLT的三態,活躍態ULT運行時可激活用戶調度,非阻塞系統調用可以使用Jacketing啓動用戶調度,調整活躍態ULT
高級調度:又稱長程調度,做業調度,決定可否加入到執行的進程池中
中級調度,又稱平衡負載調度,決定主存中的可用進程集合
低級調度:又稱短程調度,進程調度,決定哪一個可用進程佔用處理器執行
分時OS中,高級調度決定:是否接受一個終端用戶的鏈接,命令可否被系統接納並構成進程,新建態進程是否加入就緒進程隊列
批處理OS中,高級調度又稱爲做業調度,功能是按照某種原則從後備做業隊列中選取做業進入主存,併爲做業作好運行前的準備工做和完成後的善後工做
引進中級調度是爲了提升內存利用率和做業吞吐量,中級調度決定那些進程被容許駐留在主存中參與競爭處理器及其餘資源,起到短時間調整系統負荷的做用,中級調度把一些進程換出主存,從而使之進入「掛起」狀態,不參與進程調度,以平順系統的負載
低級調度:又稱處理器調度、進程調度、短程調度,按照某種原則把處理器分配給就緒態進程或內核級線程,進程調度程序:又稱分派程序,操做系統中實現處理器調度的程序,是操做系統的最核心部分,處理器調度策略的優劣直接影響到整個系統的性能
低級調度的主要功能:
根據分配給進程的優先數決定運行進程:搶佔式優先數調度算法(對實時的適用),非搶佔式優先數調度算法(對大多數適合)
優先數的肯定準則:進程負擔任務的緊迫程度,進程的交互性,進程使用外設的頻度,進程進入系統的時間長短
又稱多隊列策略,反饋循環隊列,基本思想是創建多個不一樣優先級的就緒進程隊列,多個就緒進程隊列間按照優先數調度,高優先級就緒進程,分配的時間片短,單個就緒進程隊列中進程的優先數和時間片相同
基本思想:爲進程發放針對系統各類資源(如CPU時間)的彩票;當調度程序須要作出決策時,隨機選擇一張彩票,持有該彩票的進程將得到系統資源,合做進程之間的彩票交換