2011年11月24日 星期四

何謂Task

To the user, it will seem as if the map viewer is part of the same application as your activity, even though it's defined in another application and runs in that application's process. Android maintains this user experience by 
keeping both activities in the same 
task. Simply put, a task is what the user experiences as an "application." It's a group of related activities, arranged in a stack.
Task是使用者在使用Application時的User Experiences。如果今天我們的功能要開啟Google gmail,也許我們程式會做連結直接開啟gmail。但這個gmail卻不是我們寫的。但從我們的程式到展開gmail卻感覺是一體的。那是因為Google想要照顧這部份的使用者經驗。
Task寫在Stack,也就是堆疊裡。

The root activity in the stack is the one that began the task — typically, it's an activity the user selected in the application launcher. 
The activity at the top of the stack is one that's currently running — the one that is the focus for user actions. When one activity starts another, the new activity is pushed on the stack; it becomes the running activity. The previous activity remains in the stack. When the user presses the BACK key, the current activity is popped from the stack, and the previous one resumes as the running activity.
Task裡放的,就是我們在使用一隻應用程式時,所有和這隻應用程式相關的Activity的存放空間。程式會依我們最先開啟的Activity,在堆疊裡,開出一個Task(任務)空間,然後呢,它被放在Task的最頂層。如果此時又開了一個新的Activity,就會把前一個Activity往下推,而成為你眼前看到的畫面。之前那個Activity還是在堆疊裡,所以如果此時你又按了[返回]鍵,目前的新畫面,會"彈出"這個堆疊,然後把之前的Activity,利用onResume()的方式,呼叫回來你面前。

A task is a stack of activities, not a class or an element in the manifest file.
Task是一個Activity的堆疊,而非類別或任何manifest檔裡你看的見的物件。

Process與Thread

一個應用程式,會開啟一個Process,
一個Process,可以被程式設計師開出多個Thread,
同一個process內的Threads可以共享Code、Data Section及OS Resources
一個Thread 就是一個小型的 Process ,
若我們把 Process 分為兩個部份-----Threads 和 Resources,
Threads 就是這個 Process 的動態執行者(Dynamic Object)


Process和Thread的差別




The major difference between threads and processes is 
1.Threads share the address space of the process that created it; 
processes have their own address.

2.Threads have direct access to the data segment of its process; 
processes have their own copy of the data segment 
of the parent process. 

3.Threads can directly communicate with other threads of its process; 
processes must use interprocess communication to communicate with sibling processes. 

4.Threads have almost no overhead; processes have considerable overhead.

5.New threads are easily created; new processes require duplication of the parent process.

6.Threads can exercise considerable control over threads of the same process; 
processes can only exercise control over child processes. 

7.Changes to the main thread (cancellation, priority change, etc.) 
may affect the behavior of the other threads of the process; 
changes to the parent process does not affect child processes. 

2011年11月18日 星期五

VMWare Workstation網路設定技巧

Host系統、Guest系統

「Host系統」和「Guest系統」是兩個本文讀者必須了然於胸的名詞,因為這兩個名詞將不斷的於本文出現,而VMWare使用者也會不斷的遇到這兩個名詞。所謂的Host系統,指的是安裝、執行著VMWare的系統,而使用者將利用Host系統上的VMWare建立出VMWare虛擬機器;有時候Host系統也稱為Host PC、Host電腦,或簡稱為Host。

有了VMWare虛擬機器,我們就可以將作業系統安裝在VMWare虛擬機器,而安裝了作業系統的VMWare虛擬機器,便稱為Guest系統;同樣的,Guest系統也稱為Guest PC、Guest電腦,或簡稱為Guest。

整個系統只會有一個Host系統,而透過Host系統,將可以有數個Guest系統,並且可以同時執行一個Host系統和一個Guest系統,如果實體記憶體數量夠多,更可以同時執行一個Host系統和數個Guest系統。



VMWare的網路設定技巧
VMWare最讓筆者讚賞的功能,就是它提供了相當完整的網路功能,讓Guest系統可以相當輕易、方便的透過網路連接Host系統,甚至連上外部的網路—尤其是網際網路。

虛擬網路卡

VMnet的網路功能是透過許多虛擬網路卡所完成,包括在Host系統的VMware Network Adapter VMnet1、VMware Network Adapter VMnet8(這兩張卡稍後將詳述),以及Guest系統的AMD PCNET Family PCI Ethernet Adapter。由於虛擬機器並沒有安裝實體網路卡,但如果從Host系統模擬網路卡不免增加VMWare的複雜度(因為可能會遇到各式各樣的網路卡),因此統一虛擬機器的網路卡,是最好的作法。

請注意,每一部虛擬機器可以同時安裝數張AMD PCNET Family PCI Ethernet Adapter虛擬網路卡(您可以透過Add Hardware Wizard來新增虛擬網路卡),但是上限是每部虛擬網路最多三張。雖然每部虛擬機器最多只能安裝三張虛擬網路卡,但是連接Host系統的虛擬網路裝置總和數量卻是無限(Windows Host系統,Linux Host系統則是32個),這是因為一部實體電腦可以同時執行數個Guest系統。

VMWare虛擬網路連接介面

VMWare Workstation 4.0提供了9個虛擬網路連接介面(分別是VMnet0到VMnet8),藉以連接Guest系統與Host系統,其中三個已經設定成自動橋接(VMnet0)、NAT(VMnet8)、Host-only(VMnet1),其他6個則留給使用者自行設定;以大多數的情況而言,上述三種預設的連接方式,已足夠使用。

而新增VMWare虛擬機器的精靈提供了4種Guest系統與Host系統的網路連接方式:Use bridged networking、Use network address translation、Use host-only networking、Do not use a network connection,前三種分別就是自動橋接(VMnet0)、NAT(VMnet8)、Host-only(VMnet1);最後一種是不以網路連接。以下筆者將說明這三種連接方式,在說明的過程,需要開啟VMWare的Virtual Network Editor交談窗(執行Edit/Virtual Network Setting)加以輔助。而在開始說明之前,請先檢視Virtual Network Editor交談窗的Summary標籤頁,這裡顯示了VMWare虛擬網路的設定狀態。

Use bridged networking(Bridge/VMnet0)的連接方式

Bridge讓Guest系統透過Host系統橋接到區域網路,其結果就是Guest系統「直接」連接到與Host系統相同的區域網路;而這種方式也是九種連接介面當中,網路功能最完整的一種。如果要以這種連接方式搭配TCP/IP通訊協定,就必須指定IP位址給Guest系統和Host系統(不論指定固定IP位址,或者由區域網路上的DHCP伺服器動態分配),而且兩者的IP位址必須在同一個網段。另外請注意,假設您建立了數個不見得會同時執行的Guest系統,請針對每一個Guest系統指定各自不同的IP位址,以避免IP位址衝突的情況發生。

Bridge是將Host系統當作Guest系統與區域網路的橋接器,實際的作法則是以VMWare自行開發的VMWare Bridge Protocol(對Windows系統而言,這是個網路服務而不是通訊協定)連接Host系統的實體網路卡以及Guest系統的虛擬網路卡(AMD PCNET Family PCI Ethernet Adapter),而且預設會連接Host系統上的每一張實體網路卡。

在Windows安裝VMWare的時候,會自動安裝這種連接方式,而且這種連接方式也是VMWare虛擬機器預設連接Host系統的方式。Bridge預設會自動連接Host系統上的每一張實體網路卡,但是可以利用Virtual Network Editor交談窗的Automatic Bridging標籤頁排除您不想連結的實體網路卡,或者是關閉自動連接的功能。

Use network address translation(NAT/VMnet8)

如果區域網路沒有DHCP伺服器,或者您沒有額外的IP位址可以指定給Guest系統,或者您的Host系統是利用電話撥接、固接或撥接ADSL、甚至纜線數據機連上網際網路,而您希望Guest系統也能隨之連上網際網路,那麼這種利用NAT連接Guest系統與Host系統的方式,是最好的選擇。換句話說,NAT是連接Guest系統和Host系統最方便的虛擬連接介面。
NAT讓Guest系統與Host系統共用同一個IP位址,因此只要Host系統能夠以TCP/IP連上區域網路或網際網路(不論是利用PPP或PPPoE),那麼Guest系統也能以相同的方式連上區域網路或網際網路。VMWare將NAT功能實作成虛擬網路卡,並且在Windows安裝VMWare的時候,自動安裝到Host系統,因此在Windows「網路連線」視窗,將可以看到VMware Network Adapter VMnet8虛擬網路卡。

在Virtual Network Editor交談窗的NAT標籤頁,可以檢視VMWare的NAT設定狀態,按下Edit按鈕則可以設定細節資料。此外,如果要讓Guest系統利用NAT連接網路,請務必讓下圖的Service status是Started,否則請按下Start service或Restart service按鈕來啟動NAT服務。

另外,在Virtual Network Editor交談窗的Host Virtual Network Mapping標籤頁,可以設定VMWare的9個虛擬網路連接介面,其中VMnet8就是NAT連接方式,而按下該項目最右側的…按鈕,則可以調整NAT的網段、DHCP、NAT等設定。

Use host-only networking(Host-only/VMnet1)

Host-only會在Host系統與Guest系統之間建立專屬的TCP/IP私有網路,而在此私有網路中的IP位址,都將由VMWare DHCP伺服器提供。通常,使用Host-only的Guest系統是無法連上網際網路,但如果Host系統提供了類似Windows「網際網路連線共用」的功能,那麼Guest系統也可以藉此連上網際網路。VMWare也將Host-only功能實作成虛擬網路卡,並且在Windows安裝VMWare的時候,自動安裝到Host系統,因此在Windows「網路連線」視窗,將可以看到VMware Network Adapter VMnet1虛擬網路卡。

此外,在Virtual Network Editor交談窗的Host Virtual Network Mapping標籤頁當中,VMnet1就是Host-only連接方式,而按下該項目最右側的…按鈕,則可以調整Host-only的網段、DHCP等設定。

VMWare的DHCP設定

剛剛提到了NAT和Host-only兩種VMWare虛擬網路連接介面,都需要指定IP位址給Guest系統,才能讓Guest系統的網路正常運作。針對這種情況,VMWare提供了DHCP伺服器服務,可以動態分配的方式,將IP位址指定給使用NAT和Host-only的Guest系統,而使用者可以利用Virtual Network Editor交談窗的DHCP標籤頁,來調整VMWare的DHCP伺服器設定。

調整VMWare的DHCP伺服器只能服務VMnet0到VMnet8等九個虛擬網路連接介面,但預設僅服務VMnet1(NAT)和VMnet8(Host-only)等兩個介面,如果要新增服務的對象,請按下Add New按鈕來新增;而如果要調整虛擬介面的DHCP伺服器設定,請先選取欲調整的虛擬介面,再按下Properties按鈕;先選取欲刪除的虛擬介面,再按下Remove按鈕。另外,也請確定Service status是Started,這才表示DHCP伺服器是啟動的,否則請按下Start service或Restart service按鈕來啟動DCHP伺服器服務。