1. 程式人生 > >Linux程序入門學習(一)-認識程序

Linux程序入門學習(一)-認識程序

1.程序的概念

一個可執行的程式檔案(ELF格式)被載入到記憶體當中,然後讓CPU逐條執行其程式碼,根據程式碼作出相應的動作,這樣一個動態程序就產生了。因此,程序是一個動態變化的過程。

下面用一張圖來表示一個程式從編寫到最終執行的過程:

程序的概念以及程式的執行過程

一段固化在磁碟的程式碼可以多次被載入到記憶體中執行,從而產生多個程序。磁碟,即ROM(Read Only Memory只讀儲存器) 掉電不丟失資料,但讀寫速度非常慢,所以用來儲存資料;記憶體DDR,即RAM(RamdomAccessMemory隨機存取儲存器),讀寫速度快,掉電丟失資料。故程式固化在磁碟中,執行時則載入到記憶體中,然後執行程式碼。
當ELF格式的程式被執行時,核心中實際上產生了一個名為task_struct{}的結構體來表示這個程序。程序從一開始就需要各種資源來維護,比如記憶體資源、CPU資源、檔案、訊號、各種鎖資源等,所有這些東西都是動態變化的,而程序的這些資訊都會記錄在task_struct當中,所以這個結構體也常稱為程序控制塊(Process Control Block,簡稱PCB)。
下面是核心中task_struct的截圖

task_struct

總之,當一個程式檔案被執行產生一個程序時,核心將會產生一個task_struct結構體,來承載該程序執行後所需要的所有資源,隨著程序的執行,各種資源被分配和釋放,是一個動態的過程。

2.程序的組織方式

程序是一個動態的過程,既然會產生程序,那麼程序也會消失,即死亡。每個程序都是有其父程序產生,若子程序結束後,父程序會回收其資源。若子程序的父程序先被結束,那麼子程序就會進入孤兒態,其會被系統的1號程序回收其資源。
shell命令ps -lA可以檢視當前系統的程序,例如:

系統程序

關於程序的生命週期,下節繼續學習。