13 5 4 每個程序區域表 PRegion

2021-06-27 12:41:12 字數 1089 閱讀 7343



13.5.4  每個程序區域表(pregion)

通常,對每個程序而言,p區有三個條目,它們分別對應該程序的文字區、資料區和堆疊區。一旦核心知道程序id(pid),它就可以從程序表中定位出這些條目。在程序表中,有多個指向p區表中條目的指標。因此,對任何程序而言,p區表中對應文字區、資料區和堆疊區的條目不必是連續的,雖然圖13-27給出的是連續的情況,為了簡化起見。該圖還給出了唯一的乙個指標,而不是三個從程序表指向p區表的指標,這樣可以避免混亂。

對應程序和該p區表中特定區域的每個條目包括以下內容。

(1) 指向程序表的指標:核心可以將其作為pid維護,核心可以通過該指標由p區表訪問程序表條目。因此,反之亦然,核心也可以由程序表遍歷p區表。為了避免混亂,圖中並沒有給出該指標。

(4) 訪問許可權:它指明對該程序的該區域的訪問許可權,例如,唯讀、讀/寫或讀/執行。

(5) 指標鍊錶:對共享的區域而言,它是共享同乙個區域的"下乙個"p區條目的位址,如圖13-28所示。該圖指明程序a、b、c共享區域號等於1的區域,其中計數值(count)等於3。它表明共享區域的p區條目鏈結在一起。該條目包括相同區域的"下乙個"p區條目的位址。位址欄位中的"*"表示鍊錶的結束。因此,對於沒有共享的區域,如區域號等於2的區域而言,在圖13-28中程序d的這個位址項就是"*",這是因為它沒有"下乙個"條目了。

這些是從共享區域表條目指回到所有共享該區域的p區表的指標。作為選擇,可以採用單獨乙個由共享區域表條目指回到共享該區域的第乙個p區域表的指標。有了這個指標以及前面p區中的指標,核心就可以針對相同的區域遍歷所有的p區。當建立不共享的區域時,直到該區域共享為止,p區表條目中"下乙個"指標會被設為"*"或是一些指明鍊錶結束的內容。如果核心建立使用共享區域的程序,就要以適當的位址為引數擴充該鍊錶。如果兩個或多個程序共享乙個區域,那麼程序表的"引用計數"欄位就會大於1。稍後介紹這部分內容。

指標鍊錶能夠幫助核心正確快速地定位出共享區。從邏輯角度而言,p區表可以是程序表或u區的一部分,unix也許會以這種方式實現它。這種情況下,程序表和p區表之間沒有雙向指標,本書分別介紹它們。

Linux檢視每個程序的Openfiles數量

在linux裡,在 etc security limits.conf裡有乙個引數是nofile,作用是控制某使用者的檔案開啟數量。可以使用ulimit n的命令檢視具體的限制,一但當前檔案開啟數達到nofile上限就無法再開啟檔案,從而使某些應用執行異常,如使用者無法通過ssh登入系統。通過我們可以...

新增表資料區域rdlc

表資料區域是報表上包含多列 多例項資料的資料繫結報表項。乙個表包含一組靜態的列,而行數不定,具體取決於資料集中的資料。表可以包含任意多個列。表資料區域由多個部分組成。它最少要包含詳細資訊行。您還可以指定 表頭 表尾 組頭和組尾。可以在表資料區域內嵌入其他資料繫結報表項,包括另一表。設計報表時,可通過...

linux 程序中的記憶體區域劃分

有幾天沒來了,今天翻到了程序中記憶體區域劃分筆記 就簡單寫寫 1 區 text 主要用於存放功能 函式指標指向該區域,比如函式名。2 唯讀常量區 text 存放字串常量和用const修飾的,並且已經初始化的全域性變數和靜態區域性變數。3 全域性區 資料區 data 存放已經初始化的全域性變數和靜態區...