4.1 operating system concepts 第四章 執行緒 threads n 綜觀 n 多重執行緒模型...

Post on 21-Dec-2015

237 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

4.1Operating System Concepts

第四章 執行緒Threads

綜觀 多重執行緒模型 (Multithreading Models) 執行緒的相關問題 Pthreads Solaris 2 Threads Windows 2000 Threads Linux Threads Java Threads

4.2Operating System Concepts

執行緒 系統呼叫 fork() 的缺點

需要做大量記憶體的複製 進行內容切換時需付出相當的代價 兩個行程間無法直接進行溝通

若行程間可以共用一部分的記憶體空間,那麼額外的負擔就能減少,這也就是建立執行緒的基本理由。

許多在桌上型 PC執行的套裝軟體都是多執行緒。應用程式通常都製作成有許多執行緒控制的個別行程。網頁瀏覽器可能有一個執行緒顯示影像或文字,而另一執行緒則從網路擷取資料。文書處理器可能有一個執行緒在顯示圖形,另一個執行緒從使用者讀入按鍵,而第三個執行緒在背景下執行拼字和文法校正。

4.3Operating System Concepts

執行緒觀念

執行緒輕量級行程使用 CPU 資源的基本單元包含了一個程式計數器、一組暫存器和一個堆疊空間與其他的執行緒共用同一個位址空間

傳統的行程重量級行程可看成是只有一個執行緒在執行的行程

4.4Operating System Concepts

傳統行程與執行緒行程

程式 資料 檔案

暫存器 堆疊

執行緒

程式 資料 檔案

暫存器

堆疊

暫存器

堆疊

執行緒

單執行緒 多執行緒

4.5Operating System Concepts

單一及多重執行緒的行程

4.6Operating System Concepts

優點1. 應答 : 將交談式的應用程式多執行緒化,可以在一個程

式某一部份被暫停,或程式在執行冗長操作時,依然桂續執行,因此增加了對使用者的應答。

2. 資源分享 : 執行緒間將共用它們所屬行程的記憶體和資源。程式碼和資料共用的好處是讓應用程式有數個不同的執行緒在同一位址空間活動。

3. 經濟 : 對於行程產生所配置的記憶體和資源耗費很大。反之,因為執行緒共用它們所屬行程的資源,所以執行緒的產生和內容交換就比較經濟。憑經驗去測量出產生和維護行程比執行緒多出多少時間可能很困難,但通常產生和維護行程會比執行緒更費時。

4. 使用多處理器架構 : 在多處理器的架構下,多執行緒的利益可以大幅提升,因為每一執行緒可以並行地在不同的處理器上執行。不論有多少 CPU可以使用,單一執行緒只能在一個 CPU上執行。多處理器上並行增加多執行緒。

4.7Operating System Concepts

使用者和核心執行緒

在作業系統中,有兩種方式來支援執行緒使用者執行緒

利用執行緒函式庫來提供的建立與管理執行緒時比較有效率若行程中的執行緒暫停,則同行程中其他所有執行緒也都會暫停執行

核心執行緒由作業系統直接支援建立與管理執行緒時比使用者執行緒來得慢 若行程中的執行緒暫停,核心可以安排其他在同行程中的執行緒繼續執行

4.8Operating System Concepts

使用者執行緒(User Threads)

執行緒的管理由使用者層次的執行緒程式庫來完成 使用者執行緒是依附在行程內,所以中央處理器排程器仍以行程為

單位進行排程及環境切換工作,當某一個行程輪到中央處理器時,它將它所輪到的時間分享給它的執行緒使用,例如時間片段為100ms ,故某個行程分配 100ms 時間,而它有五個執行緒,則每個執行緒分配 20ms 執行。

範例 - POSIX Pthreads - Mach C-threads - Solaris threads

4.9Operating System Concepts

核心執行緒Kernel Threads

由作業系統核心支援 由於每個核心執行緒是各自排程,所以核心行程內若某

一個執行緒懸置,它不會造成其他的執行緒被懸置。 範例

- Windows 95/98/NT/2000 - Solaris - Tru64 UNIX - BeOS - Linux

4.10Operating System Concepts

Multithreading Models多執行緒模式

多對一 (Many-to-One)將許多個使用者執行緒對應到同一個核心執行緒。

一對一 (One-to-One)將一個使用者執行緒對應到一個核心執行緒。

多對多 (Many-to-Many) 將使用者執行緒對應到相同或是較少數目的核心執行緒。

4.11Operating System Concepts

多對一Many-to-One

許多使用者層次的執行緒對應到一個單一的核心執行緒 .

通常使用在不支援核心執行緒的作業系統 .

4.12Operating System Concepts

多對一模式

4.13Operating System Concepts

一對一

每個使用者執行緒對應到核心執行緒 Each user-level thread maps to kernel thread.

範例 - Windows 95/98/NT/2000 - OS/2

4.14Operating System Concepts

一對一模式

4.15Operating System Concepts

多對多模式

允許多個使用者層執行緒可以對應到許多核心執行緒 .

允許作業系統產生足夠數目的核心執行緒 . Solaris 2 Windows NT/2000 with the ThreadFiber

package

4.16Operating System Concepts

多對多模式

4.17Operating System Concepts

執行緒的問題

fork() 及 exec() 的系統呼叫問題 . 執行緒的取消 (Thread cancellation). 訊號處理 (Signal handling) 執行緒池 (Thread pools) 執行緒相關特定資料 Thread specific data

4.18Operating System Concepts

Pthreads Pthreads 依據 POS 以 (IEEE1003.1c)標準定義執行緒產生和同步的 API 。

Pthreads 是執行緒行為的規格,而非製作。作業系統設計者可以用任何他們期望的方式製作此規格。

Win32 執行緒 : 使用 Win32 執行緒程式庫產生執行的技巧與 Pthreads技巧,在許多方面很相似。當使用Win32API 時,必須含有 windows . h 的標題檔。

Java 執行緒 : 執行緒是在 Java 程式、 Java語言和JavaAPI 中程式執行的基本模式, Java 的 API 提供執行緒的產生與管理一組豈富的特性。所有 Java 程式至少包含一個單一執行緒控制,即使只包含一個 main() 方法的Java 程式也是以一個單一執行緒在 JVM 下執行。

4.19Operating System Concepts

Solaris 2 執行緒

4.20Operating System Concepts

Solaris 行程

4.21Operating System Concepts

Windows 2000 執行緒

製作一對一的對應 . 每一個執行緒包含

- a thread id - register set - separate user and kernel stacks - private data storage area

4.22Operating System Concepts

Java 執行緒狀態

top related