linux核心分頁位址保護

2021-06-18 07:09:14 字數 719 閱讀 4854

linux核心是通過什麼機制來判斷使用者訪問的記憶體是非法的,從而實現位址保護?

姑且認為32位機器在上,程序能看到的虛擬位址空間是4g。這4g是乙個潛力值,並非所有虛擬記憶體下都有物理記憶體做backup。只有某些虛擬記憶體段是有效的,作業系統記錄著這些位址段,通過乙個鍊錶。每一元素有乙個區間,表示該區間內位址有效(通過vm_area_struct 結構體

1.初始化時從執行檔案獲知,text section, data section等等

2.作業系統為程序創造的棧

3.通過系統呼叫顯式創造,即所謂「在堆在申請記憶體」

在用分頁做記憶體管理時,所謂保證「一段虛擬位址段下有物理記憶體」,就是說相應虛擬位址段對應的頁表項是有效的。訪問所謂的「無效位址」時,由於頁表項沒有資訊,cpu無法轉換位址,出現page fault,轉入作業系統處理異常的**,處理異常**裡就把當前程序core dump了。

實際情況還要複雜一點,有可能邏輯上說,某個虛擬位址有效的,但因為某種原因,作業系統不想給它物理記憶體,其對應的頁表資訊也是無效的,比如demand page或者頁被換出去之類的情況。訪問這種位址時也會發生page fault,但這時不會core dump。這時需要在do_page_fault缺頁中斷處理函式中進行判斷,由於作業系統記錄了程序所有的有效位址段,它可以判斷fault address是不是在某個有效位址段裡。如果是,再根據情況,看看要怎麼給它找一塊記憶體,然後設定一下頁表,然後正常返回到使用者態,使用者態程式就可以若無其事地繼續執行了。

LINUX的系統核心空間的保護

看了linux 感 覺其對核心記憶體的保護做得不是很好,還有感覺大家有些地方理解不對 主要是linux的 看起來的樣子和實際的樣子不太一樣 所以談談我對linux 系統核心空間的保護和使用者空間與系統空間資料傳遞的 看法。注意我說的都是i386體系結構,別的體系結構可以看相應的 不敢保證結果是否是如...

linux核心中沒有分頁記憶體

linux核心中沒有分頁記憶體嗎?是的,沒有,那麼windows的核心為何就有呢?畢竟不是乙個家族不好做全方位的評判,我的結論就是linux上的任何的程式只將核心作為乙個平台而不依賴核心。這個事實的結果就是在linux核心中不能分配過大的記憶體,linux核心中唯一可以分配大記憶體的地方就是vmal...

linux核心中沒有分頁記憶體

linux核心中沒有分頁記憶體嗎?是的,沒有,那麼windows的核心為何就有呢?畢竟不是乙個家族不好做全方位的評判,我的結論就是linux上的任何的程式只將核心作為乙個平台而不依賴核心。這個事實的結果就是在linux核心中不能分配過大的記憶體,linux核心中唯一可以分配大記憶體的地方就是vmal...