簡體   English   中英

Linux中的內核映射是什么?

[英]what is kernel mapping in linux?

什么是內核映射? 什么是永久映射和臨時映射。 在這種情況下,窗口是什么? 我經歷了代碼和對此的解釋,但不明白這一點

完整的答案將非常漫長,有關詳細信息,例如(請參閱) Linux內核尋址了解Linux內核 (第306-頁)。 這些概念與Linux中地址空間的組織方式有關。 首先,內核空間如何映射到用戶空間(將內核映射到用戶空間簡化了用戶和內核模式之間的切換),其次,物理內存被映射到內核空間的方式(因為內核必須管理物理內存)。

注意,在現代64位體系結構中這無關緊要。

我假設您正在談論Linux內核中的內存映射。

內存映射是將內核地址空間直接映射到用戶進程的地址空間的過程。

地址類型: 在此處輸入圖片說明

  • 用戶虛擬地址:這些是用戶空間程序看到的常規地址

  • 物理地址:處理器和系統內存之間使用的地址。

  • 總線地址:外圍總線和內存之間使用的地址。 通常,它們與處理器使用的物理地址相同,但不一定是這種情況。
  • 內核邏輯地址:這些組成內核的常規地址空間。
  • 內核虛擬地址:內核虛擬地址類似於邏輯地址,因為它們是從內核空間地址到物理地址的映射。

高低內存:

  • 內存不足:內核空間中存在其邏輯地址的內存。 在您可能會遇到的幾乎每個系統上,所有內存都是低內存。
  • 高內存(High memory):不存在邏輯地址的內存,因為它超出了為內核虛擬地址設置的地址范圍。這意味着內核需要開始使用要訪問的物理內存的臨時映射。

內核將虛擬地址分為兩部分: 用戶地址空間和內核地址空間。 內核的代碼和數據結構必須適合該空間,但是內核地址空間的最大消耗者是物理內存的虛擬映射。 因此,內核需要它必須直接接觸的任何內存的虛擬地址。 因此,內核可以處理的最大物理內存量是可以映射到虛擬地址空間的內核部分的數量,減去內核代碼使用的空間。

在此處輸入圖片說明

臨時映射:當必須創建映射但當前上下文無法休眠時,內核會提供臨時映射(也稱為原子映射)。 內核可以原子地將高內存頁面映射到其中一個保留映射(可以保留臨時映射)中。 因此,可以在無法休眠的地方(例如中斷處理程序)使用臨時映射,因為獲取映射不會阻塞。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM