
226
|
第七章
現代的作業系統為用戶空間提供了兩個基本的虛擬化概念:虛擬記憶體及虛擬處理器。
它們給每個運行中的行程一個錯覺,好像只有它在耗用機器的資源。虛擬記憶體為每個
行程提供了記憶體的獨特觀點,(透過分頁機制)無縫地映射回實體的 RAM 或磁碟上的
儲存空間。系統的 RAM 中實際上可能包含了 100 個運行中之行程的資料,但是每個行
程只會看到自己的虛擬記憶體。虛擬處理器能夠讓行程以為系統上只有它在運行,因為
作業系統把多行程就是有多個任務在一或多個處理器上執行的事實隱藏了起來。
虛擬記憶體被關聯到行程而非執行緒。因此,每個行程皆具有記憶體的獨特觀點,但特
定的行程中所有執行緒皆
共享
該記憶體。相反地,虛擬處理器被關聯到執行緒而非行
程。每個執行緒是一個獨立的可排班實體,這讓單一行程可以在同一時間做許多事。許
多程式設計者會把虛擬記憶體與虛擬處理器這兩項錯覺結合在一起,但執行緒需要你把
它們分開。如同行程,執行緒會有一個(或多個)處理器只有它自己在使用的錯覺。與
行程不同的是,執行緒不會出現所有記憶體只有它自己在使用的錯覺—整個記憶體位址
空間由行程中所有執行緒共享。
多執行緒
執行緒的意義何在?我們顯然需要行程,因為它代表一個正在運行的程式。但為何要分
離執行單位並導入執行緒?多執行緒有六大好處:
程式設計抽象化
分割工作並指派給執行單位的每個部分(執行緒)對許多問題而言是一個自然的做
法。利用此做法的設計模式包括:每連線執行緒(thread-per-connection)及執行緒
集區(thread pool ...