2 核心執行緒和使用者執行緒
3 執行緒模型
前面章節提到,引入程序是為了解決程式併發所出現的一些問題,程序具有兩個基本的屬性:
正是因為程序具有這兩個基本屬性,所以程序成為併發執行的基本單位, 在一些早期的os中,比如大多數unix系統、linux等,程序同時具有這二個屬性,由於 程序是乙個資源的擁有者 ,因而在程序建立、撤銷、排程切換時,系統需要付出較大的時空開銷,所以程序的數目不宜過多,程序切換頻率不宜過高,否則會限制併發程度,作業系統的設計目標是提高併發度,減小系統開銷,顯然程序還不能做到完全的高效,所以引入了執行緒的概念。
那麼有沒有一種方法能夠既提高系統併發,還能減少系統開銷呢,我們採用的方法是將程序的兩個基本屬性分開,對於擁有資源的基本單位,不對其進行頻繁切換,對於排程的基本單位,不作為擁有資源的單位,「輕裝上陣」,引入執行緒以小的開銷來提高程序內的併發程度。
在沒有引入執行緒之前,程序作為資源分配單位(儲存器、檔案)和cpu排程單位。當引入執行緒後把執行緒作為作為cpu排程單位,而程序只作為其他資源分配單位。相比程序,執行緒只擁有必不可少的資源,如:執行緒狀態、程式計數器、暫存器上下文和棧,執行緒同樣具有就緒、阻塞和執行三種基本狀態,乙個程序可以建立多個執行緒,執行緒與同屬乙個程序的其它執行緒共享程序擁有的全部資源,並且這些執行緒可以併發執行。
執行緒(輕型程序)是cpu運用的乙個基本單元,包括:
乙個執行緒與它的對等執行緒共享如下內容:
傳統的或重型程序等價於只有乙個執行緒的任務,下圖是單執行緒和多執行緒的對比,可以從圖中看到多個執行緒共享code,data,files
,並且每個執行緒有自己的registers,stack
:
執行緒是乙個輕型的程序,引入執行緒是為了進一步提高系統併發,從而提高系統效率,執行緒在實現的時候分為兩種:
核心執行緒由核心支援,在核心空間執行執行緒建立、排程和管理,當執行緒是核心執行緒時,才真正的是cpu排程的基本單位,這麼說是因為後面要講到的使用者執行緒並不是cpu排程的基本單位。核心執行緒是依賴於作業系統的,這個時候核心維護程序和執行緒的上下文資訊,執行緒切換由核心完成,乙個執行緒發起系統呼叫而阻塞,不會影響其他執行緒的執行,時間片分配給執行緒,所以多執行緒的程序獲得更多cpu時間(執行緒作為cpu排程的基本單位,每個執行緒都會分得時間片,所以執行緒越多的程序,分到的cpu時間越多)。
使用者執行緒是由使用者級執行緒庫進行管理的執行緒,這個時候執行緒庫提供對執行緒建立\排程和管理的支援,無需核心支援,因此使用者執行緒不是cpu排程的基本單位,此時程序是cpu排程的基本單位。
由於使用者執行緒不依賴於 os 核心,應用程序利用執行緒庫提供建立、同步、排程和管理執行緒的函式來控制使用者執行緒。排程由應用軟體內部進行,通常採用非搶先式和更簡單的規則,也無需使用者態核心態切換,所以速度特別快 。
使用者執行緒的維護由應用程序完成,核心不了解使用者執行緒的存在,使用者執行緒切換不需要核心特權,使用者執行緒的缺點是如果核心是單執行緒的,那麼乙個使用者執行緒發起系統呼叫而阻塞,則整個程序阻塞,此時時間片分配給程序,多執行緒則每個執行緒就慢。
使用者執行緒是在使用者空間去實現的,有關於使用者執行緒的所有操作都是在使用者空間裡實現的,那麼這樣的使用者執行緒如果要用到作業系統提供的功能的時候,它通常是要對映到核心空間去,就要在使用者執行緒和核心執行緒之間做對映,在對映過程中有以下三種模式:
作業系統概念 第四章 執行緒
多執行緒模型 執行緒是cpu使用的基本單元,由執行緒id,程式計數器,暫存器集合和棧組成。它與屬於同一程序的其他執行緒共享 段,資料段和其他作業系統資源。響應度高 乙個多執行緒的程式即使部分阻塞,其他部分仍能執行,從而增加了對使用者的響應程度。資源共享 經濟 建立和切換執行緒比建立程序更節省資源和時...
作業系統第四章
2 分割槽分配演算法 動態分割槽方式,分割槽多 大小差異各不相同,此時把乙個新作業裝入記憶體,更需選擇乙個合適的分配演算法,從空閒分割槽表 鏈中選出一合適分割槽 首次適應演算法ff 迴圈首次適應演算法 最佳適應演算法 最差適應演算法 快速適應演算法 4 動態重定位分割槽分配 有緊湊功能的動態分割槽分...
作業系統第四章
常用排程演算法 先來先服務演算法 fcfs 短程序優先演算法 spf 短剩餘時間優先演算法 srt 最高響應比優先演算法 hrrn 時間片輪轉演算法 rr 和多級反饋演算法 mfq 先來先服務演算法 fcfs 基本思想是按照程序進入就緒佇列的先後次序來分配處理機.採用不可剝奪方式 fcfs演算法很少...