2016.8.2

高端內存映射方式

  高端內存映射分為三種:永久映射、臨時映射和非連續動態內存映射。高端內存一般是指896MB以上的頁框,這段區間內核一般不能直接訪問。

  

  1.永久映射

    永久內核映射允許內核建立高端頁框到內核地址空間的長期映射。它們使用主內核頁表中的一個專門的頁表,其地址存放在pkmap_page_table變量中,該頁表映射的線性地址從PKMAP_BASE開始,LAST_PKMAP(32位系統是512,64位系統是1024)決定其表的項數,pkmap_count數組包含LAST_PKMAP個計數器。計數器有三種情況:

  • 計數器=0,表示對應的頁表項沒有映射到任何高端內存頁框,且是可用的
  • 計數器=1,表示對應的頁表項沒有映射到任何高端內存頁框,但是是不用的,因為從它最后一次使用以來,其相應的TLB表項還為被刷新
  • 計數器=n,表示相應的頁表項映射到一個高端內存頁框,這表明正好有n-1個內核成分在使用這個頁框

  .../arch/x86/include/asm/pgtable_32_types.h

 40 #define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE * (LAST_PKMAP + 1))      \41                     & PMD_MASK)

.../linux/mm/highmem.h 
126 static int pkmap_count[LAST_PKMAP];

  高端內存頁框與永久內核映射包含的線性地址的關系存放在page_address_htable散列表中,該表包含了一個page_address_map數據結構,用于每個頁框的映射
static struct page_address_map {
struct page *page;
void *virtual;
struct list_head list;
} page_address_maps[LAST_PKMAP];

  如何建立永久內核映射呢?可以使用kmap()/kunmap()函數建立,不能用于中斷處理程序和可延遲函數:
void *kmap(struct page *page)
{
/* 判斷是不是高端內存 */
if (!PageHighMem(page))
return page_address(page);
might_sleep();
/* 建立映射 */
return kmap_high(page);
}

2.臨時映射
  臨時映射可以用在中斷處理程序和可延遲函數,留給臨時映射的頁框是很少的。一般調用kmap_atomic()函數進行臨時映射,一般是FIXADDR_START-FIXADDR_TOP的區間。

3.非連續動態內核映射
  非連續內核映射,一般是從PAGE_OFFSET開始的,使用VMALLOC()/VMAP()進行映射。

  小記:內核頁表是從0xc0000000開始的1G大小的范圍,但是內核頁表也必須把0xc0000000開始的線性地址轉換成從0開始的物理地址,內核的1G線性地址可以訪問4G的物理地址,
而用戶則不能直接訪問物理地址,那么內核如何訪問4G的物理地址呢?必須設定一個規則,物理內存也有分類:zone_dma、zone_normal、zone_highmem。zone_dma是訪問速度最
快的,所以一般希望映射到這塊內存,zone_normal也可以直接訪問,所以就有了0-896MB的一一映射,而高于896MB的物理地址則不能直接訪問。

轉載于:https://www.cnblogs.com/Daisy123/p/5803090.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256513.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習之pytorch(三) C++調用

玩深度學習,個人覺得基于anaconda的python適合開發與測試,C適合實際的工程部署!而pytorch官方有編譯好的libtorch,特別方便,適合于我這樣的伸手黨和手殘黨(win10下編譯tensorflow編譯了好久都沒通過,好憂傷…

ANSYS入門——模態分析步驟與實例詳解

目錄 一、ANSYS求解模態分析步驟 建模 施加載荷和求解

javascript庫之Mustache庫使用說明

一、簡單示例 代碼: 1 function show(t) { 2 $("#content").html(t); 3 } 4 5 var view { 6 title: YZF, 7 cacl: function () { 8 return …

Light OJ 1007

求區間歐拉函數平方和。。。 最后因為longlong 范圍爆了WA 了&#xff0c; 0.0 #include<bits/stdc.h> using namespace std; const int maxn 5000000 131; typedef unsigned long long LL;bool Com[maxn]; LL Num[maxn], Prim[maxn / 3]; int Cnt;void INIT() {Num[1]…

MVC架構設計——EF-Code First

詳情參考:http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html轉載于:https://www.cnblogs.com/shuai7boy/p/5807678.html

機器學習(一) 基于sklearn庫的數據集劃分(交叉驗證)

機器學習中首要環節就是數據集的處理&#xff0c;其中數據集的處理從個人理解(如有錯誤敬請諒解)的角度來說包括兩個方面&#xff1a;數據集劃分和數據清理。其中數據集劃分是指訓練集、驗證集和測試集的數據類別劃分&#xff1b;數據清理是指數據的清洗、刪除等等方面。這兩天…

ANSYS——模態分析的理論基礎

目錄 一、模態分析理論基礎 線性與非線性 振動與固有頻率 振動方程與振動模態

購物中心潮--我的創業之路

2014年10一個月&#xff0c;我在中國大陸從北我的兩個小伙伴跑到最南邊中國內地。大半個中國刪除更多。早在北京成立購潮商城。2014年11月&#xff0c;購潮商城正式上線。上線當天突破零訂單。2014年12月&#xff0c;正式推廣市場。滲透大學生校園。2015年2月至今&#xff0c;正…

敏捷項目開源管理軟件ScrumBasic(2)- 多項目支持

1.加入Project對象模型 public class Project{[Key][MaxLength(32)]public string ID { get; set; }public string Name { get; set; }public int Order { get; set; }public ICollection<UserStory> Stories { get; set; }public ApplicationUser Creator { get; set; }…

postgresql表和列注釋(描述)

2019獨角獸企業重金招聘Python工程師標準>>> PostgreSQL添加表和列注釋。本文為測試表test&#xff0c;默認無注釋。 test# \d關聯列表架構模式 | 名稱 | 類型 | 擁有者 | 大小 | 描述 -------------------------------------------------public | test | …

ANSYS——模態提取方法簡介

目錄 block lancoze法 supspace(子空間法) powerdynamics reduced(縮減法) unsymmetric(非對稱法) 阻尼法和QR阻尼法

python 使用小知識總結(持續更新ing)

這篇博客主要針對于使用python來進行深度學習/機器學習過程各方面小知識的總結。習慣于使用C這種嚴謹的語言&#xff0c;改換到python這門相對來說開放式的語言需要很多學習&#xff0c;而作為一個菜雞&#xff0c;遇到編程問題解決了之后不到一周就會忘記&#xff0c;在此僅作…

Fifth scrum meeting - 2015/10/30

概述 從昨天開始&#xff0c;我們的開發工作終于進入了正軌&#xff0c;由于之前沒有mooc服務器API接口&#xff0c;一些工作無法進行。 因為我們團隊開始開發較晚&#xff0c;因此我們將開發階段的截至時間定為了下周五&#xff0c;測試階段則壓縮為下周周六和周日兩天。 我們…

計算機加入域 不能訪問網絡位置 解決辦法

計算機加入域 不能訪問網絡位置 解決辦法 啟動以下服務 本文轉自 onesthan 51CTO博客&#xff0c;原文鏈接&#xff1a;http://blog.51cto.com/91xueit/1660286&#xff0c;如需轉載請自行聯系原作者

ANSYS——模態分析的載荷施加問題以及約束的施加問題

本文續自《ANSYS入門——模態分析步驟與實例詳解》:https://blog.csdn.net/qq_45769063/article/details/106389171 目錄 1.模態分析的激勵是從哪里來的?

【effective c++】繼承與面向對象設計

1.確定你的public繼承塑造出is-a關系 public繼承意味著is-a.適用于base classes身上的每一件事情一定也適用于derived classes身上,因為每一個derived classes對象也都是一個base class對象&#xff0c;反過來不成立。 2.避免隱藏繼承而來的名稱 c名稱查找不考慮類型&#xff0…

Android Camera HAL淺析

1、Camera成像原理介紹 Camera工作流程圖 Camera的成像原理可以簡單概括如下&#xff1a; 景物(SCENE)通過鏡頭&#xff08;LENS&#xff09;生成的光學圖像投射到圖像傳感器(Sensor)表面上&#xff0c;然后轉為電信號&#xff0c;經過A/D&#xff08;模數轉換&#xff09;轉換…

win10 下pycharm+anaconda 編譯生成pyd文件

由于生產部署的問題&#xff0c;需要把用python寫的深度學習代碼編譯為可被調用的文件。上網搜索了下&#xff0c;暫時了解到win10下pyd文件比較流行。下面是直接引用某位博主的結論&#xff0c;個人感覺總結的很好。其中Cython庫將已有的Python代碼轉化為C語言的代碼&#xff…

ANSYS——初學路徑之路徑的定義、作用以及ansys路徑模塊GUI的操作解釋

目錄 一、路徑的定義 二、路徑的作用 三、路徑GUI相關操作面板解釋 1、路徑的定義

JVM(4)之 使用MAT排查堆溢出

為什么80%的碼農都做不了架構師&#xff1f;>>> 接下來講解如何設置以及當發生堆溢出的時候怎么排查問題。先看一小段代碼&#xff1a; ??代碼中使用了一個無限循環來為list添加對象&#xff0c;如果采用默認的堆大小的話可能要等待好久才能出現堆溢出的錯誤&a…