05程序學習之PCB程序控制塊

2021-10-10 03:57:55 字數 2011 閱讀 6473

前言

我們知道,每個程序的核心區中都有乙個程序控制塊(pcb)來維護程序相關的資訊,每個程序的pcb都是被mmu對映到物理記憶體上某塊區域的不同地方。其實質是task_struct型別的結構體。

linux下的存放路徑:

/usr/src/linux-headers-

3.16.0-

30/include/linux/sched.h

1 pcb的一些重要成員

檔案中可以檢視struct task_struct 結構體定義。其內部成員有很多,下面我們重點講解以下部分即可:

1) 程序id。

2) 程序的狀態。

3) 當前工作目錄(current working directory)。

4) umask掩碼。

5) 檔案描述符表。

6) 和訊號相關的資訊。

7) 使用者id和組id。

8) 程序切換時需要儲存和恢復的一些cpu暫存器。

9) 描述虛擬位址空間的資訊。

10) 描述控制終端的資訊。

11) 會話(session)和程序組。

12) 程序可以使用的資源上限(resource limit)。

以上重要性依次遞減,重要理解前七個即可。

下面對上面的每一點進行分析。

2 分析pcb的重要內部資訊

1)用於標識唯一程序,單位為無符號的pid_t。可用ps aux檢視第二列即為程序id。

2)程序的狀態,可分為就緒態,執行態,掛起態,終止態共四個狀態;注意,有些書本會將就緒態劃分為初始態和就緒態變成五個狀態。

就緒態:就是程序初始化後等待cpu的時間分片就行工作,通俗將就是等待cpu叫你工作。

執行態:程序在執行。

掛起態:將整個程序掛起,等待cpu的其它資源,主動放棄cpu,記住是主動。例如我程序現在在執行著準備消費東西,忽然發現缺少東西消費,那麼此時就會放棄cpu,不在爭奪,等待別人通知再請求cpu的時間分片。這就是生產者消費者模型。

終止態(停止態):程序結束,釋放資源。

3)當前工作目錄就是當前程序的工作目錄。例如程序bash即我們的輸入終端,假設當前目錄為家目錄,當執行cd …後,程序bash的工作目錄就改變了,那麼pcb就會記錄下來。

4)umask掩碼就是乙個程序對該程序內部資源分配的預設許可權。由於pcb每個程序都有且不同,所以pcb內部的umask掩碼在每個程序也不同,並非程序間共享。所以乙個程序的umask掩碼改變並不會影響另乙個程序的umask掩碼。例如開啟兩個bash終端,在乙個終端程序改umask掩碼為:

umask 551
而另乙個終端程序仍為預設022,因為程序間的pcb是不同的。

5)檔案描述符就是0,1,2…,但實際上它是一種鍵值,通過一種對映關係將指向file檔案結構體的指標與這些整數關聯起來,從而可以操控檔案。

6)和訊號相關的資訊主要是:訊號遮蔽集和未決訊號集。這裡不具體分析訊號,等後面有空再總結訊號的內容。

7)使用者id和組id就是我們使用者登入的id和它所屬組的id。

8)就是說當我程序在執行的過程中,突然有乙個等級比我高的程序被cpu優先執行了,但是需要儲存這個被掛起的程序資訊在暫存器,方便下一次按照這個掛起前的狀態繼續執行。

9)就是說mmu在負責將虛擬記憶體對映到物理記憶體後,需要儲存該對映的記錄,但是mmu不會幫你記錄,它只負責對映,記錄是放在程序控制塊pcb當中。

10)即描述該程序是否與終端程序相關。有些程序與終端有關有些無關,例如守護程序就是與終端無關,表現為執行ps ajx 的第五列的"?",表示脫離終端,可看我部落格關於守護程序的三篇部落格。

11)會話id表示它屬於哪個會話,程序組id表示該程序所屬的程序組。會話:多個程序組的集合。程序組:多個程序的集合。

12)就是儲存程序資源相關的資訊。

3 總結

好了,說完pcb後,大家應該對程序有不錯的理解了,非常簡單,多看幾次即可。沒有什麼可以總結的了,就看上面就差不多了。

程序控制塊(PCB)

為了描述和控制程序的執行,系統為每乙個程序定義了乙個資料結構 程序控制塊。它是程序實體的一部分,是作業系統中最重要的記錄型資料結構。或者說,os是根據pcb來對併發程式的程序進行控制和管理的。總而言之,pcb是程序存在的唯一標誌。程序控制塊中的資訊包括程序識別符號 處理機狀態 程序排程資訊 程序控制...

程序控制塊 PCB

程序控制塊是作業系統中最重要的資料結構,每個程序控制塊包含了作業系統在排程 資源分配 中斷處理 效能監控和分析所需的關於程序的所有資訊。程序控制塊資訊可以分為三類 程序標識資訊 處理器狀態資訊 程序控制資訊。程序識別符號主要包括 當前程序的識別符號 process id,pid 建立這個程序的父程序...

程序控制塊 PCB

程序控制塊 pcb 是系統為了管理程序設定的乙個專門的資料結構。系統用它來記錄程序的外部特徵,描述程序的運動變化過程。同時,系統可以利用pcb來管理和控制程序,所以說,pcb是系統感知程序存在的唯一標識。linux系統下的pcb包含了很多引數,每個pcb約佔1kb的記憶體空間大小。主要包含的內容 1...