進程通常被定義為一個正在運行的程序的實例,它由兩個部分組成:
* 一個組成部分是操作系統用來管理進程的內核對象。內核對象也是系統用來存放關于進程的統計信息的地方。
* 另一個組成部分是地址空間,它包含所有可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間。如線程堆棧和堆棧分配空間。
進程是不活潑的。若要使進程完成某項操作,它必須擁有一個在它的環境中運行的線程,該線程負責執行包含在進程的地址空間中的代碼。實際上,單個進程可能包含若干個線程,所有這些線程都“同時”執行進程地址空間中的代碼。為此,每個線程都有它自己的一組CPU寄存器和它自己的堆棧。每個進程至少擁有一個線程,來執行進程的地址空間中的代碼。如果沒有線程來執行進程的地址空間中的代碼,那么進程就沒有存在的理由了,系統就將自動撤消該進程和它的地址空間。
若要使所有這些線程都能運行,操作系統就要為每個線程安排一定的CPU時間。它通過以一種循環方式為線程提供時間片(稱為量程),從而造成一種假象,仿佛所有線程都是同時運行的一樣。
當創建一個進程時,系統會自動創建它的第一個線程,稱為主線程。然后,該線程可以創建其他的線程,而這些線程又能創建更多的線程。
---------------------------------------------------------------摘自 《Windows 核心編程》
進程有三大部分:代碼段、數據段、PCB(進程控制段)。
操作系統正是通過PCB來管理這多個進程。在這樣的系統里,進程是操作系統獨立調度和分派的基本單位,又是一個可擁有資源的獨立單位。
線程:系統調度和分派的基本單位。
進程和線程有如下不同:
進程可以擁有資源,線程共享進程擁有的資源
進程間的切換必須保存PCB
---------------------------------------------------------------
微軟官方對進程和線程的定義:
進程:用最簡潔的話來說,進程就是一個正在執行的程序,一個或多個線程在進程中運行,線程是操作系統分配CPU運算時間的最小單位。每一個進程都提供了運行一個程序所必需的資源,一個進程具有4GB的虛擬地址空間(Windows NT Server Enterprise Edition及Windows 2000 Advanced Server中低3GB虛擬地址空間供進程使用,高1GB供操作系統的內核代碼使用。Windows NT/2000中低2GB供進程使用,高2GB供操作系統內核代碼使用。Windows9X:0——64K只讀空間用來裝入Microsoft DOS信息,64K——4M裝入DOS的兼容代碼,4M——2GB的私有空間供進程使用,2GB——3GB的共享空間裝入各種DLL代碼,3GB——4GB為共享的系統內核代碼空間,其中共享的2GB——4GB的空間是99%的“內存無效頁錯誤”、“General Protect Error(GPE)”及藍屏的罪魁禍首。),可執行代碼,數據,對象句柄,環境變量,優先權以及設置最大化最小化的功能。每一個進程都從一個主線程開始執行,但可以在它所擁有的線程中創建額外的線程。一個進程的所有線程共享進程的虛擬地址空間和系統資源,一個線程的資源包括線程的機器寄存器設置,內核堆棧,線程環境變量和進程虛擬地址中的用戶堆棧。
---------------------------------------------------------------
兩者的區別。根據定義,進程為一個數據結構及能在其上進行的一次操作,它有兩個基本特征,一個是進程是可用有資源的獨立單位,第二個是進程同時又是一個可以獨立調度和分派的基本單位,這兩個基本屬性使之能夠獨立運行,也能夠并發運行。但是在并發運行的時候,系統還需要執行一系列操作:
1、需要創建進程,并為之分配其所必需的資源。
2、撤銷進程,對資源進行回收。
3、進程切換,它需要保留當前進程的CPU環境和設置新選中進程的CPU環境,為此需要花費不少處理時間。正因為進程擁有資源,所以在并發執行進程的時候,在創建、撤銷和切換種,系統需要付出較大的開銷,因此,系統中設置的進程不能太多,進程切換的頻率也不能過高,這就限制了并發程度的提高。為了解決這一問題,于是產生并引入了線程概念。
線程是進程中的一個實體,它的基本思想是將程序的執行和資源分開,只擁有一點必不可少的資源。一個進程可用有多個線程,但它可以和同屬于同一進程的其他線程共享進程所擁有的所有的資源,同一進程中的線程之間可以并發執行。這樣的話,并發程度可以獲得顯著的提高。線程也具有許多進程所具有的特征,因此被稱為輕型進程。
---------------------------------------------------------------網上收集