2009年6月9日 星期二

OS心得系列 Process & Thread--PART 1

從前在上課的時候,常會聽到一些在當下無法立即聽懂的內容,使得在課後或有閒暇時間時必須做複習的動作才有辦法能夠釐清它的觀念或者是意義,在經過長時間的累積後,我突然發現,通常除了比較複雜難解的東西外 ,其實對於任兩者作比較的內容也常常是讓我沒法在聽課當下理解的部分之一,就像之前提到的kernel一樣,即使在當時能了解它的運作原理,一旦想起其他與之類似的東西後,又會進入思考的迴圈裡,看似易懂的原理,其實未必如此,在往後的學習領域裡,我也常常碰到類似的情況,例如記憶體的"RAM & ROM"、CPU的"單核心&雙核心"甚至是今天要探討的"Process & Thread"也是。

在討論這二者有何分別之前,其實我們必須先弄清楚process是一個怎樣的東西,而提到它時,又想起了另一與它相似的名詞"program",所以我們必須先把Program和Process這兩個觀念作一個釐清。

Program可以說是一群程式碼的集合,用以解決特定的問題,若以物件導向的觀念來類比,就相當於Class的功能, 而Process則是由Program所產生的執行個體,一個Program可以同時執行多次,產生多個Process,再以物件導向的觀念來類比的話,就相當於Object;每一個Process又由以下兩個東西組成,一個是Memory Space,相當於Object的variable,不同Process的Memory Space也不同,彼此看不到對方的Memory Space、另一個是一個以上的Thread,Thread代表從某個起始點開始(例如main),到目前為止所有函數的呼叫路徑,以及這些呼叫路徑上所用到的區域變數。

當然程式的執行狀態,除了紀錄在主記憶體外,CPU內部的暫存器(如Program Counter, Stack Pointer, Program Status Word等)也需要一起紀錄。所以Thread又由下面兩項組成,Stack(紀錄函數呼叫路徑,以及這些函數所用到的區域變數) 以及目前CPU的狀態。

由上面的描述中,可以歸納Thread的重點如下:
1.一個Process可以有多個Thread。
2.同一個Process內的Thread使用相同的Memory Space,但這些Thread各自擁有其Stack。換句說,Thread能透過reference存取到相同的Object,但是local variable卻是各自獨立的。
3.作業系統會根據Thread的優先權以及已經用掉的CPU時間,在不同的Thread作切換,以讓各個Thread都有機會執行。

在大概了解這三樣觀念後,接著我們會在下一篇繼續作process與thread更深入的討論,至少在這篇已經對此兩者之間的差異性比較清楚了。

沒有留言:

張貼留言