文章目錄
- 1. 進程的組成
- 2. 進程與程序的聯系
- 3. 進程與程序的區別
- 4. 進程與程序關系
1. 進程的組成
進程具體包含哪些東西:
- 首先要執行相應的代碼,所以執行代碼需要放到內存中
- 代碼執行需要處理數據,數據需要放到內存中
- 需要知道現在要執行哪條指令,需要一個相應的記錄,用程序計數器表示,程序計數器存著下一條要執行指令在什么地方
- 同時在處理過程中會用到大量 CPU 寄存器,寄存器會在動態變化
- 還有會用到很多計算機提供的資源,包含內存資源,文件系統,網絡等等一系列資源
總之,進程在執行過程中包含了正在運行的程序的所有狀態信息,狀態信息是比較抽象的概念。
2. 進程與程序的聯系
進程不等于程序,進程是動態執行過程,而程序是靜態代碼。
-
程序和進程到底什么樣關系?
程序是產生進程的基礎,因為進程執行的所有功能其實在程序中有具體的描述,進程執行功能受制于程序代碼,代碼已經限制了進程到底實現什么樣的功能,所以說程序是產生進程的基礎。
另一方面,程序的每次執行構成不同進程,其實可以看到程序只有一份,它放在硬盤中,但可以多次執行這個程序,多次執行程序得到結果不一定是一樣的,因為數據可以不一樣,當這個程序在運行過程中,它在內存中處理的數據是不一樣,那有可能導致它產生行為不一樣,這也意味著一個程序多份執行的時候,由于有可能處理的數據不一樣,它獲得的資源不一樣,那么最后得到效果也是不一樣,所以說程序的每一次執行,構成不同的進程,而不是同一個進程。
不管怎么說,進程的執行過程是程序功能的體現,雖然可能輸入不一樣,導致輸出不一樣,但整體的功能體現是一樣。
通過多次執行,一個程序可以應對多個進程,通過調用關系一個進程也可以包含多個程序,因為有可能多個程序合在一起來完成一個更大的功能體現,可以看到進程和程序之間是一種比較復雜的多對多的映射關系。
3. 進程與程序的區別
進程是動態的體現,而程序是靜態的代碼,程序是有序代碼的集合,進程是程序的執行,所以說進程實際上是程序的具體體現。進程在執行過程中需要注意有核心態和用戶態度區分,核心態在操作系統中運行,但是寫代碼時候并沒寫操作系統代碼,那為什么有核心態呢?寫代碼都是運行在用戶態,那為什么有核心態存在?其實進程在執行中需要去完成特定功能,功能只有操作系統才能提供,比如說要讀文件,讀寫文件的過程涉及到跟具體硬盤打交道,那這過程全是操作系統來完成,所以說進程只需給操作系統發出請求,操作系統代表進程在內核中執行,這時候說進程處于核心態,因為它在內核中執行。
進程是暫時的,而程序是永久的。執行一個程序,以進程形式在內存中運行,占用 CPU 運行,整個過程有開始到結束的變化過程,過程結束之后進程就結束了。但程序不一樣,程序保存在硬盤中,只要硬盤不壞,程序可以長久地保存。
在具體組成方面也有不一樣的地方,雖然說進程用到程序的代碼段、數據段等數據結構,但進程執行中有其它一些變化,處理數據的時候,數據在變,而這一點在程序的組成中是不存在的,比如它處理輸入數據,最后產生輸出數據,以及為了管理這個進程,操作系統所建立進程控制塊等等,這些信息在程序中是沒有的。所以應該說進程包含了程序部分,還包含一些新的部分。