什么是程序?什么是進程?他們之間的區別是什么?


本篇文章詳細講解以下問題:什么是程序?什么是進程?他們之間的區別是什么?

靈魂拷問:程序與進程的區別?

程序與進程

  程序是包含一系列信息的文件,描述如何在運行時創建一個進程,如我們寫的源代碼文件,編譯好的可執行文件 .out 文件等。所以在操作系統角度,程序是創建進程的描述。程序文件可以包含以下描述信息:

  1. 二進制格式標識 :每個程序都有用於描述可執行文件格式的信息。Linux 內核通過該信息來處理和解釋文件中的其他信息。如ELF 可執行文件。
  2. 機器語言指令:機器語言程序對程序進行編碼,得到指令,然后 CPU 去執行該指令。
  3. 程序入口地址:用於表示程序開始時的起始指令位置,CPU 從該位置開始執行。
  4. 數據:程序文件中包含的變量初值和程序使用的字面常量值
  5. 符號表與重定位表:描述程序中函數與變量的位置及名稱。可以用於調試和運行時的符號解析(動態鏈接)。
  6. 共享庫和動態鏈接信息:程序中的一些字段,用於程序運行時所需的共享庫以及加載共享庫的動態連接器的路徑名。
  7. 其他信息:用於描述創建進程的其他信息。


  那什么是進程呢?進程是正在運行的程序實例。在系統角度,程序僅占用磁盤空間,不占用內存等其他資源,而進程是占用內存和CPU 資源。更加官方的來說,進程是具有一定程序功能的關於某個數據集合的一次運行活動。它是操作系統執行的基本單元,在傳統操作系統中,進程既是基本的分配單元,也是基本的執行單元。

  再進一步來說,進程是內核定義的一個抽象實體(數據結構),並為該實體分配用於執行程序的各項系統資源。在我們寫好源代碼文件,通過 gcc 編譯得到可執行文件,即程序。通過 ./file 執行,系統會創建一個新的進程,為執行該程序分配必須的系統資源(內存,CPU等)。

  對於內核來說,進程則是由用戶內存空間內核數據結構組成。其中,用戶內存空間存放程序代碼及使用的變量,內核數據結構是用於維護進程的狀態信息(如進程ID,虛擬內存表,打開的文件描述符,信號傳遞與處理的相關信息,進程資源使用及限制等信息),即進程控制塊

  總的來說,程序是存儲在硬盤的可執行文件,其用來描述創建進程的相關信息。而進程是運行的程序,其包含兩個部分:處於用戶空間的程序代碼及變量與處於內核空間的進程狀態信息(進程控制塊)。

一鍵三連是對我最大的鼓勵與支持。歡迎關注編程小鎮,每天漲一點新姿勢😄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM