進程的定義:
進程是具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統資源分配、調度和保護的獨立單位。
進程是為了描述程序在並發執行時對系統資源的共享,所需的一個描述程序執行時的動態特征的概念。
進程三要素:程序、數據、進程控制塊
線程的定義:
線程是進程中的一個運行實體,作為CPU的調度單位,也稱為輕量級進程。
擴展:作業是用戶在一次計算過程中,或者一次事務處理中,要求計算機系統所做工作的總稱。可由多個進程組成。
進程與線程的區別與聯系:
(1)進程是資源分配的基本單位。進程也是搶占處理機的調度單位,它擁有一個完整的虛擬地址空間。
而線程與資源分配無關,它屬於某一個進程,並與進程內的其他線程一起共享進程的資源。
(2)當進程發生調度時,不同的進程擁有不同的虛擬地址空間,而同一進程內的不同線程共享同一地址空間。
(3)線程只由相關堆棧寄存器和線程控制塊組成。寄存器可被用來存儲線程內的局部變量,但不能存儲其他線程的相關變量。
(4)進程切換時涉及到有關資源指針的保存以及地址空間的變化等問題;
線程切換,由於同一進程內的線程共享資源和地址空間,將不涉及資源信息的保存和地址變化問題。
而且,進程的調度與切換都是由操作系統內核完成,而線程則既可以由操作系統完成,也可以由用戶程序進行。
(5)進程間的關系比較疏遠。各個進程是在自己獨有的地址空間內執行,不但寄存器和堆棧是獨有的,動態數據堆、靜態數據區和程序代碼也相互獨立。
而線程間的關系則要緊密得多,雖然各線程為保持自己的控制流而獨有寄存器和堆棧,但由於兩線程從屬於同一進程,它們共享同一地址空間,所以動態數據堆、靜態數據區和程序代碼為各線程共享。
作業與進程的區別和關系
(1)作業是用戶向計算機提交任務的實體。而進程是完成用戶任務的執行實體,是向系統申請分配資源的基本單位。
在用戶向計算機提交作業之后,系統將它放入外存中的作業等待隊列中等待執行;而任一進程,只要它被創建,總有相應的部分存在於內存中。
(2)一個作業可由多個進程組成。且必須至少由一個進程組成,但反過來不成立。
(3)作業的概念主要用在批處理系統中,而在Linux分時系統中不存在。進程的概念則存在於幾乎所有的多道程序系統中。