2011-08-26 88 views
3

我的問題是Linux內核是否可以使用虛擬內存,還是總是使用固定內存?另一個問題是,如果由於某些軟錯誤,內核內存已損壞,那麼會發生什麼? Linux是否有任何機制來保護自己免受這種故障?內核能否使用虛擬內存在Linux中

回答

3

內核使用虛擬地址。分配的內存,函數指針等等都是虛擬地址。您只能在與某些設備通話或進行某種DMA操作時操作物理地址。

「Linux」或「Linux內核」在許多架構上運行。其中一些體系結構可能具有內存錯誤檢測或更正硬件。我不知道這些設備是如何被支持的。 但是在大多數架構中,沒有防範內存損壞的保護措施。

但是你說的是軟錯誤。內核代碼無法在隨機地址處編寫代碼。一些函數測試它們捕獲錯誤的參數,但是如果你在內核模式下溢出緩衝區或堆棧,那麼可能會發生各種有趣的事情。

Const數據和代碼通常放置在只讀頁面,以便可以檢測到寫入。 內核的內存保護因此限於:

  • 在某些地方進行參數檢查。
  • 某些結構的魔法值。
  • 只讀屬性代碼和常量部分。

只讀屬性是唯一可能的,因爲內核使用虛擬內存

+0

你是什麼意思「在一些結構魔法值」是什麼意思? – MetallicPriest