看完了靜態的pcpu變數,現在來看看動態的pcpu變數。
雖然在核心的核心**中也可以使用動態pcpu變數,但是主要還是給核心模組使用的。既然是模組,那就有可能在任何時候啟動使用,也可能會解除安裝。動態pcpu變數就是為了滿足這個需要而產生的。
既然和記憶體相關,那必然就有分配和釋放了。對應的api很直觀
網上略為搜尋了一下,貌似還沒有人講過動態pcpu變數的實現原理,我這也算是頭乙個吧~
chunk可以理解為系統給pcpu變數申請空間的管理結構,在這個結構體中儲存了動態pcpu的一些資訊。
從上面一文中可以看到,實際上訪問靜態的pcpu變數只需要一些全域性的變數就可以了。但是當有了動態的pcpu變數後,就需要額外的資料來跟蹤分配情況了。
比如:
你看,一加上動態的要求,資料結構就變得複雜了不少。好了,那我們來看看這部分是怎麼實現的。
這個資料結構中分成了幾個部分,其中最重要的就是最下面的兩個部分。
每次需要分配新的變數,核心就會搜尋map陣列。
這個map陣列比較神奇,盡然沒有任何資料,我就在這裡講解一下:
比如,如果陣列內容如下
0
|1, 0x100, 0x200|1
就表示,(0x100, 0x200) 這段空間是可用的,其餘則被分配。
所以分配的過程就是遍歷這個map陣列,當遇到乙個最低位沒有被置位的元素,且這個元素和下乙個元素的間隔能夠滿足要求的大小,則表示找到了乙個空缺。再經過一些檢驗和計算,最終返回這個偏移。
這個過程在pcpu_alloc_area()函式中實現,有興趣的可以自行前往仔細研究。
python動態生成變數
今日發現乙個新函式 enumerate 一般情況下對乙個列表或陣列既要遍歷索引又要遍歷元素時,會這樣寫 for iinrange 0,len list print i,list i 但是這種方法有些累贅,使用 內建enumerrate函式會有更加直接,優美的做法,先看看enumerate的定義 de...
Oracle PL SQL動態獲取變數
假設有一張員工表fnd employee有如下字段employee id,name,email,phone四個字段,然後我定義四個變數v1,v2,v3,v4 來存這四個字段 例 select from fnd employee into col1,col2,col3,col4 where rownu...
js 動態建立變數
通過eval 實現 宣告乙個函式 explain 傳參個數不確定 function test alert param1 呼叫test marydon 動態建立變數演示 和平常意義上的變數宣告和賦值一樣,eval 函式裡面直接放字串就行了,需要變動的是將其全部當成字串來處理,涉及到變數的地方,需要使用...