目錄
一 進程概念
二 進程的組成
2.1 PCB
2.2 數據段
2.3 程序段
三 進程的五大特點
四 進程的創建與銷毀
五 線程概念
六 線程特征
七 進程與線程的區別與聯系
?區別
?聯系
一 進程概念
進程是程序的一次執行過程,是操作系統進行資源分配和調度的基本單位。
一個程序至少有一個進程,一個進程至少有一個線程
每個進程有獨立的內存空間和系統資源,一個進程的錯誤不會影響其他進程。?
二 進程的組成
2.1 PCB
PCB:進程控制塊。進程存在的唯一標識。用來描述進程的屬性信息
當進程被創建時,操作系統為其創建 PCB,當進程結束時,會回收其 PCB。
?進程控制塊 PCB 一般包含如下四類信息:
? ? ? ? 進程描述信息:用來讓操作系統區分各個進程,當進程被創建時,操作系統會為該進程分配一個唯一的、不重復的 “身份證號”— PID(ProcessID,進程 ID)。另外,進程描述信息還包含進程所屬的用戶 ID(UID)
? ? ? ? 進程控制和管理信息:記錄進程的運行情況。比如 CPU 的使用時間、磁盤使用情況、網絡流量使用情況等。
? ? ? ? 資源分配清單:記錄給進程分配了哪些資源。比如分配了多少內存、正在使用哪些 I/O 設備、正在使用哪些文件等。
? ? ? ? CPU 相關信息:進程在讓出 CPU 時,必須保存該進程在 CPU 中的各種信息,比如各種寄存器的值。用于實現進程切換,確保這個進程再次運行的時候恢復 CPU 現場,從斷點處繼續執行。這就是所謂的保存現場信息。
2.2 數據段
一個進程的數據段,可以是進程對應的程序加工處理的原始數據,也可以是程序執行時產生的中間或最終結果,即進程運行過程中的各種數據(比如程序中定義的變量)。
2.3 程序段
程序段就是能被進程調度時程序調度到CPU執行的程序代碼段(指令序列)。注意,程序可被多個進程共享,即多個進程可以運行同一個程序。同時掛三個 QQ 號,會對應三個 QQ 進程,它們的 PCB、數據段各不相同,但程序段的內容都是相同的(都是運行著相同的 QQ 程序)
三 進程的五大特點
動態性:進程是程序的一次執行過程,有著創建,活動,暫停,終止等過程。具有一定生命周期 。是動態的產生,變化和消亡的。動態性是最基本的特征
并發性:多個進程實體同時存在內存中。能在一段時間內同時運行。重要特征。引入進程的目的就是為了使程序能與其他進程的程序并發執行,提高資源利用率
獨立性:指進程實體是一個能獨立運行、獨立獲得資源和獨立接受調度的基本單元。
異步性:由于進程的相互制約,使得進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度走走停停、何時開始何時暫停何時結束不可預知的性質,就會導致執行結果的不可再現性,為此在操作系統中必須配置相應的進程同步機制。
結構性:每個進程都配置一個PCB對其進行描述。從結構上看,進程實體是由程序段、數據段和進程控制塊三部分組成的。
四 進程的創建與銷毀
創建: 通常通過?fork()
?系統調用創建子進程。fork()
?會復制父進程的地址空間和資源到子進程。
銷毀: 進程可以通過?exit()
?終止自身,父進程可以通過?wait()
?等待子進程的終止。
五 線程概念
同一進程中的線程共享資源,一個線程的錯誤可能會影響其他線程
線程是程序執行流的最小單元。一個進程可以包含多個線程,這些線程共享進程的資源(如內存空間、文件描述符等),但每個線程有其獨立的執行路徑和線程上下文(如寄存器狀態、棧等)。線程是操作系統調度的基本單位,它允許程序在并發執行時更加靈活和高效。
引入線程增加并發度。線程成為了程序執行流的最小單位。
可以把線程理解“輕量級進程”。
線程是一個基本的CPU執行單元,也是程序執行流的最小單位。
引入線程之后,不僅是進程之間可以并發,進程內的各線程之間也可以并發,從而進一步提升了系統的并發度,使得一個進程內也可以并發處理各種任務(如QQ視頻、文字聊天、傳文件)
引入線程后,進程只作為除CPU之外的系統資源的分配單元(如打印機、內存地址空間等都是分配給進程的)。
線程庫完成了對線程的管理工作
六 線程特征
-
輕量級:
-
線程是輕量級的執行單元,創建、切換和銷毀線程的開銷比進程小得多。
-
線程共享進程的資源,因此不需要像進程那樣分配獨立的內存空間和系統資源。
-
-
并發性:
-
線程支持并發執行,多個線程可以在同一個進程中同時運行。
-
并發性使得程序可以更高效地利用多核處理器,提高程序的性能。
-
-
共享資源:
-
同一進程中的多個線程共享進程的資源,如內存空間、文件描述符等。
-
這種共享機制使得線程之間的通信和同步更加高效,但也增加了線程之間的競爭和沖突。
-
-
獨立性:
-
每個線程有其獨立的執行路徑和線程上下文,包括程序計數器(PC)、寄存器狀態和棧。
-
線程的執行是獨立的,一個線程的執行不會直接影響其他線程的執行。
-
-
異步性:
-
線程的執行順序和速度是不可預測的,取決于操作系統的調度策略和系統資源的可用性。
-
異步性使得程序的運行更加靈活,但也增加了程序設計的復雜性。
-
七 進程與線程的區別與聯系
計算機的核心是cpu,他承擔了所有計算任務,單個cpu一次只能運行一個任務,也就是說任意時刻cpu總是運行一個進程(任務),其他進程屬于非運行狀態。一個任務可以由多個線程協同來完成。進程的空間是可以由線程共享的,每個線程都可以使用這些共享內存,但是有些共享內存只能有一個線程使用,這代表一個線程使用這些共享內存時,其他線程必須等他結束才能使用。為了防止使用時其他線程進入,我們可以給它加一把鎖,叫互斥鎖mutex。防止多個進程與線程同時讀寫某一塊內存區域
?區別
1. 進程是程序的一次執行過程,是操作系統進行資源分配和調度的基本單位。每個進程都有獨立的內存空間,系統資源等
線程是進程的一個執行單元,是操作系統能進行調度的最小單位。同一進程中的多個線程共享進程的資源
2. 每個進程都有獨立的內存空間,系統資源如文件描述符,信號處理等。進程之間的資源是隔離的
同一進程中的線程共享進程的資源。線程之間的資源共享更加高效
3. 創建和銷毀進程的開銷大,線程的開銷小
4. 進程之間的通信需要通過進程通信ipc機制,如管道,消息隊列,共享內存等,通信開銷大
同一進程中的線程可以共享內存直接通信,開銷小,線程之間的通信更加高效
5. 每個進程都有獨立的內存空間和系統資源,一個進程的錯誤不會影響其他進程
同一進程中的線程共享資源,一個線程的錯誤可能會影響其他線程
6. 操作系統調度的基本單位是進程
線程是操作系統調度的最小單位,調度的粒度更小,可以更高效的利用多核處理器
?聯系
1. 線程是進程的一部分
一個進程可以包含多個線程,線程的生命周期依賴于進程的生命周期。線程的創建和銷毀必須在進程的上下文中進程
2. 共享資源
共享機制使得線程之間的通信和同步更加高效
3. 進程和線程都可以并發執行