行程與行程抽象

行程(process)

想像書架上的一本食譜。在有人把它拿進廚房、備齊食材、真正開始烹調之前,它只是紙和墨水。每個人手上的書內容相同,但每位廚師在各自的廚房裡有自己的鍋具、自己切到一半的洋蔥、自己進行到食譜的哪一步。行程就是「正在被烹調的食譜」:一個已經被喚醒、真正在執行的程式,連同執行所需的一切進行中狀態。

更精確地說,行程是「執行中的程式」,再加上作業系統為了維持它運作所必須追蹤的一切:它自己的記憶體區域(位址空間,內含程式碼、資料、堆積與堆疊)、CPU 暫存器當前的值(包括指出下一條指令的程式計數器)、它開啟的檔案清單,以及諸如已使用多少 CPU 時間之類的記帳資訊。當你雙擊一個應用程式時,作業系統就建立一個行程:把程式碼載入記憶體、設置一個全新的位址空間,並讓 CPU 從程式的進入點開始執行。

關鍵概念是:行程是作業系統排程到 CPU 上、並加以保護以防被其他行程干擾的基本單位。每個行程都以為整台機器歸它獨用,即使實際上有數十乃至數百個行程靠著快速輪流共同運行。一個重要且常見的混淆:行程不等於程式。程式是磁碟上被動的檔案;行程是它的一個正在執行的活躍實例,而同一個程式可以同時以多個獨立行程的形式運行。

用同一個瀏覽器開三個視窗。磁碟上只有一個程式檔,但系統可能顯示三個(或更多)執行中的行程,各自有自己的記憶體、自己開啟的分頁,而其中一個當掉也不會拖垮其他的。

一個程式,多個行程:每個執行中的實例都是獨立、互相隔離的行程。

行程不是執行緒。行程是擁有自己私有位址空間的容器;執行緒是行程內部的一條執行流,多條執行緒可以共用同一個行程的記憶體。

又稱
taskjob行程工作