當前位置:學者齋 >

計算機 >計算機應用 >

Solaris執行緒模型詳解大綱

Solaris執行緒模型詳解大綱

Solaris是Sun公司開發和釋出的一種現代作業系統,是UNIX系統的一個重要分支,今天小編為大家帶來的是Solaris執行緒模型詳解,希望對大家會有幫助,有需要的朋友一起去看看

Solaris執行緒模型詳解大綱

計算機中正在執行的程式稱為程序,程序中單一順序的控制流叫做執行緒,程序是資源管理的最小單位,執行緒是程式執行的最小單位。在作業系統設計上,從程序演化出執行緒,最主要的目的就是利用執行緒共享同一地址空間的特點,更好的支援對稱多處理(SMP)以及減小(程序/執行緒)上下文切換開銷。

Solaris是Sun公司開發和釋出的一種現代作業系統,是UNIX系統的一個重要分支,下面就其內部的執行緒模型做一些介紹和討論。

Solaris執行緒模型的設計目標:

主要有四個方面:

①.能夠描述各種情況下的執行緒間工作機制

②.支援代價儘可能小的執行緒

③.既支援單CPU實現,又支援多CPU實現

④.保持對現有UNIX版本的相容性

Solaris執行緒模型的實現方法:

執行緒庫的高階核心具有多處理及多執行緒特性,因此Solaris提供了大量的使用者級執行緒庫,其使用了一種兩層的執行緒庫模型:在高層是使用者執行緒,而底層則是輕量級程序(LWP)。

LWP其實就是核心執行緒,是Solaris中真正的可排程實體。核心只關心LWP,而不關心使用者執行緒。

使用者執行緒由執行緒庫管理,執行緒庫支援使用者執行緒及LWP之間的一到一、多到多、多到一對映,並且用執行緒庫管理使用者執行緒與LWP池之間的對映關係及使用者執行緒的排程。

Solaris有兩種使用者執行緒: 繫結執行緒(bound threads)和未繫結執行緒(unbound threads)。一個繫結執行緒就是使用者執行緒與LWP之間的一一對映,一個未繫結執行緒則沒有一個固定對應的LWP。在一個程序中,執行緒庫在LWP池上對使用者執行緒進行排程。其結構圖如下:

對以上兩者進行比較,未繫結程序由執行緒庫來實現使用者執行緒獲得LWP的排程,而不需要核心的參與,這種方式的執行緒上下文切換比較快,並且更節省核心資源,solaris根據一定的策略提供一個LWP池,供上面更多的執行緒分享。

繫結執行緒和LWP是一對一關係,因此實時排程性要好,但是由於核心的加入,比較浪費資源。繫結執行緒比起非繫結執行緒的開銷要大。因為繫結執行緒可以改變它所在的LWP的屬性,LWP在繫結執行緒退出後不會被快取,在新的繫結執行緒生成時,作業系統將提供一個新的LWP。僅僅線上程需要只有在所在的LWP內可用的資源時(例如虛擬的定時器或者一個指定的堆疊),或者為了實現實時排程而必須使執行緒對於核心可見的場合下,才需要使用繫結執行緒。

Solaris對執行緒的控制與同步:

核心根據LWP的排程型別和優先順序對它們進行排程。程序建立時有一個初始LWP被建立,並且繼承父程序的`排程型別和優先順序。一般來說,繫結的使用者執行緒繼承底層的LWP排程型別和優先順序,而未繫結的則繼承父程序的排程型別和優先順序。

Solaris核心使用一種搶先的基於優先順序的排程機制,高優先順序的LWP比低優先順序的LWP先執行。Solaris執行緒庫使用優先順序對使用者執行緒在LWP池上進行排程,每次選擇一個LWP執行已經就緒的使用者執行緒。如果某LWP因無限等待而阻塞,執行緒庫則將其對應的使用者執行緒的上下文儲存起來,並分派另一個使用者執行緒到該LWP上執行。執行緒庫通常建立足夠多的LWP,以保證程序不發生”飢餓”。

執行緒的同步用於共享資料,轉換和控制執行緒執行,保證程式安全。Solaris支援4種執行緒的同步原語,分別是互斥鎖,訊號量,多讀程序單寫程序鎖,條件變數。

核心級執行緒和使用者級執行緒都具有這些原語操作。一條原語執行時建立一個包含執行緒資訊的資料結構,對每個同步物件只能執行加鎖和解鎖兩項操作,但核心和執行緒庫沒有提供防死鎖機制。

總結:

Solaris作為多執行緒,多程序型的作業系統,其關於執行緒實現機制方面一直是業界領先的,瞭解solaris的多執行緒實現機制不但能夠幫助我們充分理解作業系統對多執行緒的控制原理,而且對多執行緒程式的編寫技巧的提高也有很大啟發。

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/yingyong/om1ldm.html