(進程)
導讀
大家好,很高興又和大家見面啦!!!
在前面的內容中我們介紹了【操作系統】的基本概念、發展歷程、運行環境以及體系結構等重要內容。這些內容讓我們對【操作系統】有了一個初步的印象與瞭解。
從本篇內容開始,我們將進入【操作系統——第二章——進程與線程】的學習。在這個章節中,我們將會學習以下知識點:
- 進程與線程
- CPU調度
- 同步與互斥
- 死鎖
下面就讓我們直接進入今天的內容,開始深入探索操作系統吧!!!
一、概念
在多道程序環境下,允許多個程序併發執行,此時它們將失去封閉性,並具有間斷性及不可再現性的特徵。為此引入了 進程(Process) 的概念,以便更好地描述和控制程序的併發執行,實現操作系統的併發性和共享性。
1.1 實例介紹
為了方便大家理解什麼是進程,下面我們可以打開自己的任務管理器(快捷鍵:Ctrl + Alt + Del):
在任務管理器中,我們在進程頁面中看到下面正在運行的所有程序以及在後台運行的所有程序。由此我們可以得到一個定義:
- 進程就是一個正在執行程序的實例
1.2 可執行文件
上圖中展示的這些正在執行的程序,實際上都是運行的存儲在硬盤中的後綴名為 .exe 的可執行文件。
我們在編譯器中通過各種高級語言編寫的代碼會被保存在相應的 源文件 中,如 C語言編寫的代碼會被保存到 .c 文件。此時的文件還需要經過一系列的處理才能夠變為可執行文件:
- 預處理:將
.c文件進行預處理後生成.i文件 - 編譯:將預處理好的
.i文件通過編譯器生成.s文件 - 彙編:將編譯好的
.s文件通過彙編器翻譯成.o文件 - 鏈接:將彙編的
.o文件通過鏈接器鏈接為.exe文件
生成的可執行文件實際上就是一系列指令的集合,該文件會被存儲在硬盤中,當我們要運行該程序時,計算機會先將可執行文件讀取到內存中,這時可執行文件中的一條條指令會逐步執行,而執行的結果就是我們在 GUI 上看到的程序運行的各種畫面;
*[GUI]: 圖形化界面
這時我們就可以説,進程時一個程序及其數據從磁盤加載到內存後,在 CPU 上的執行過程
1.3 程序編號
程序被存儲在內存塊中時,它是靜態的;
當我們運行該程序後,程序中存儲的一條條指令會被動態的執行;
那現在問題來了,如果在同一台計算機上,不同的用户打開同一個程序,這時的指令運行會產生衝突嗎?
在上圖的演示中,我打開了3次記事本,但是從任務管理器中可以看到,記事本這個程序被打開了多次,每一次都是獨立的在運行。
這時我們又可以説——進程是動態的,是程序的一次執行過程。
那為什麼同一個程序在多次執行時,程序的執行不會產生衝突呢?
這是因為當一個進程被創建時,操作系統會為該進程分配一個唯一的、不重複的身份證號——進程ID(Process ID, PID)。
在任務管理器的詳細信息頁面,我們能夠清楚的看到每一個進程所對應的 PID ,這裏我是按進程名稱進行的排序,可以看到,對於同一個chrome.exe 程序,它在系統中運行時同時存在多個 進程,而每一個進程對應的 PID 都不相同。
這時可能有朋友會奇怪,我們現在不是就打開了一個 chrome.exe ,為什麼會有這麼多進程呢?
為了回答這個問題,我們可以回到進程頁面進行觀察:
可以看到,當我們打開一個程序時,操作系統的後台也會同時存在多個進程,這是因為每個程序實例可能包含了多個協同工作的獨立進程,因此我們才會在詳細信息頁面看到不同的進程以及對應的 PID
這時我們可以説——進程時一個具有獨立功能的程序在一個數據集合上運行的過程。
1.4 進程實體
系統為了使參與併發執行的每個程序(含數據)都能獨立地運行,必須為之配置一個專門的數據結構,稱之為 進程控制塊(Process Control Block, PCB)。
系統利用 PCB 來描述進程的基本情況和運行狀態,進而控制和管理進程。所謂的創建進程,就是創建進程的 PCB;撤銷進程,就是撤銷進程的 PCB。
程序段、相關數據段、PCB 這三個部分構成了進程實體(也稱進程映像)。
這時我們可以説——進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位。
注意: 這裏所説的系統資源指的是 CPU、存儲器和其他設備服務於某個進程的“時間”。 因為進程是這些資源分配和調度的獨立單位,即 “時間片” 分配的獨立單位,這就決定了進程是一定是一個動態的、過程性 的概念。
二、組成
進程是一個獨立的運行單位,是操作系統進行資源分配和調度的基本單位。它由以下三部分構成:
- PCB
- 程序段
- 數據段
下面我們就來詳細介紹一下這三部分;
2.1 PCB
進程在創建的時候,操作系統會為它新建一個 PCB,該結構之後常駐內存,任意時刻都可以進行存取,並在進程結束時刪除。PCB 是進程實體的一部分,是進程存在的唯一標誌。
當我們打開一個記事本時,從資源管理器中我們可以看到以下信息:
在進程頁面記錄者該進程對系統資源的使用情況:
- CPU利用率
- 內存使用
- 磁盤讀取速度
- 網絡流量
- GPU利用率
- 電源使用情況
- 電源使用情況趨勢
當我們在詳細頁面再一次找到該進程時,我們可以看到以下信息:
這裏記錄了進程的名稱、PID、狀態、用户名、CPU、內存、UAC等信息。
也就是説,PCB 中包含了操作系統對一個進程進行管理時的所有信息,這其中主要包括以下內容:
- 進程描述信息:説明進程的ID和所使用該進程的用户。
- PID(Process ID):進程標識符,標誌着各個進程,每個進程都有一個唯一的標識符
- UID(User ID):用户標識符,標誌着進程所歸屬的用户,用户標識符主要為共享和保護服務。
- 進程控制和管理信息:説明進程的當前狀態和優先級。
- 進程當前狀態:描述進程的狀態信息,作為CPU分配調度的依據
- 進程優先級:描述進程搶佔 CPU 的優先級,優先級高的進程可優先獲得 CPU
- 資源分配清單:説明有關內存地址空間或虛擬地址空間的狀況,鎖打開文件的列表和所使用的輸入/輸出設備信息。
- 處理機相關信息:也稱 CPU 上下文,主要值 CPU 中各寄存器的值。
- 當進程處於執行態時,CPU的許多信息都在寄存器中。
- 當進程被切換時,CPU狀態信息必須保持在相應的 PCB 中,以便該進程再次執行時,能從斷點處繼續執行。
2.2 程序段
程序段就是能被進程調度到 CPU 執行的程序代碼段。
2.3 數據段
一個進程的數據段,可以是進程對應的程序加工處理的原始數據,也可以是程序執行時產生的中間或最終結果。
三、特徵
進程的基本特徵是對比單個程序的順序執行提出的。總共有4點:
-
動態性。進程是程序的一次執行,它有着創建、活動、暫停、終止等過程,具有一定的生命週期,是動態地產生、變化和消亡。動態性是進程最基本的特徵。
-
併發性。指多個進程同存於內存中,能在一段時間內同時運行。引入進程的目的就是使進程能和其他進程併發執行。併發性是進程的重要特徵,也是操作系統的重要特徵。
-
獨立性。指進程是一個能獨立運行、獨立獲得資源和獨立接受調度的基本單位。凡未建立 PCB 的程序,都不能作為一個獨立的單位參與運行。
-
異步性。由於進程的相互制約,使得進程按各自獨立的、不可與預知的速度向前推進。異步性會導致執行結果的不可再現性,為此在操作系統中必須配置相應的進程同步機制。
結語
今天的內容到這裏就結束了。通過本文的學習,我們系統地梳理了進程這一操作系統的核心概念。
- 進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位
- 進程由 PCB(進程控制塊)、程序段和數據段三部分組成
- 進程擁有動態性、併發性、獨立性 和 異步性四大基本特徵
這些內容讓我們逐步構建起對進程的全面認識。理解進程是深入探索操作系統併發世界的基石。
在下一篇內容中,我們將探討進程的狀態與轉換,這是理解操作系統如何進行進程調度的關鍵。
互動與分享
-
點贊👍 - 您的認可是我持續創作的最大動力
-
收藏⭐ - 方便隨時回顧這些重要的基礎概念
-
轉發↗️ - 分享給更多可能需要的朋友
• 評論💬 - 歡迎留下您的寶貴意見或想討論的話題
感謝您的耐心閲讀! 關注博主,不錯過更多技術乾貨。我們下一篇再見!