久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

內核邏輯地址和內核虛擬地址的區別

作者:龔平   來源:本站原創   點擊數:  更新時間:2014年03月14日   【字體:

**********************************************************************

1)凡是通過MMU頁表訪問的地址都叫虛擬地址,而一旦啟用了MMU,那CPU發出的所有地址都是虛擬地址

內核用到的地址范圍是3G-4G(不是很精確,與CPU體系有關吧),這當然就稱為內核虛擬地址了(這跟用戶態的0-3G的用戶虛擬地址相對應),在3G-4G這段范圍內,有段子集3G -3G+main_memory_size,這段主存大小的虛擬地址空間,由于在MMU頁表映射時是采用的是平坦的線性映射,在LDD里所以又給她起個專門稱呼,叫內核邏輯地址

2) 用不同名字分開叫的原因,與所有的名字的作用一樣,是為了方便稱呼,方便描述,因此可以說,在內核代碼里,對于內核邏輯地址,你可以通過簡單的偏移(3G)(rwen2012兄所述),獲曉對應的物理地址,而不是內核邏輯地址的那部分內核虛擬地址,是不能獲曉物理地址的

************************************************************************

就是假設你的物理主存是256M,總線地址為0-0x10000000(256M),那么虛擬地址就是0xC0000000(3G)-0xD0000000(3G+256M),換句話說,內核邏輯地址0xC0000000對應物理主存地址0,內核邏輯地址0xD0000000對應物理地址256M,那么從內核邏輯地址,就可以直接減去偏移量PHYS_OFFSET,比如為0xC0000000,就可以得到物理主存地址了,這種映射就叫做平坦的線性映射

************************************************************************

還是不懂啊

就是假設你的物理主存是256M,總線地址為0-0x10000000(256M),那么虛擬地址就是0xC0000000(3G)-0xD0000000(3G+256M),換句話說,內核邏輯地址0xC0000000對應物理主存地址0,內核邏輯地址0xD0000000對應物理地址256M,那么從內核邏輯地址,就可以直接減去偏移量PHYS_OFFSET,比如為0xC0000000,就可以得到物理主存地址了,這種映射就叫做平坦的線性映射

你的回復是指把所有的主內存都映射到了內核空間?那用戶空間不就訪問不到主內存了你么?我在清華大學出版的一本書上寫到:

vmalloc()分配的地址不是內核邏輯地址,但是在它緊跟著的例子程序里面又說 找到vmalloc()分配的地址對應的內核邏輯地址,這是怎么回事啊,他還給出一大段代碼找vmalloc()分配的地址對應的內核邏輯地址,既然說分配的不是內核邏輯地址怎么又會找它對應的內核邏輯地址呢。

struct page *virt_to_page(void *kaddr),需要的參數時內核邏輯地址,那么怎么把vmalloc()分配的地址轉化為page結構呢

***********************************************************************

主內存應該是全部映射到內核空間了,但是映射了并不代表就使用了,因此用戶空間的內存映射也可以映射到相同的物理內存空間(不過即使內核使用了所有的物理內存,應該也可以通過缺頁請求技術獲得內存)。內核在初始化時將所有的物理內存構成了一個page結構數組,vmalloc分配的是3g+main_memory_size之上的虛擬空間,因為在內核初始化時并沒有建立這一段虛擬內存空間的映射,因此就需要建立相應的頁表映射。用page_address()函數即可返回頁的內核虛擬地址。

************************************************************************

從0xc0000000到0xffffffff-128M的內核空間確實是映射到0到896M的物理空間上,而且是通過特殊地初始化頁表后進行的線性映射,但是物理內存被映射后不一定被分配,如果沒有被內核分配,則可以由用戶進程分配,該頁同時被內核與用戶映射,

***********************************************************************

LDD 15.1.1在介紹內核虛擬地址的原話

“ All logical addresses are kernel virtual addresses, but many kernel virtual addresses are not logical addresses. For example, memory allocated by vmalloc has a virtual address (but no direct physical mapping).”

配圖:

內核虛擬地址和內核邏輯地址類似,都是把內核空間的地址映射到物理地址上,但是,內核虛擬地址不具有內核邏輯地址的一些特點,比如線性、和物理地址一對一映射的特點。

所有的邏輯地址都是內核虛擬地址,但反之不然。例如, vmalloc 分配的內存有虛擬地址(但沒有直接物理映射)。

 

在LDD中虛擬地址就是1G的內核空間的線性地址,而邏輯地址則是一一映射物理內存的那一塊,也叫做直接映射或平坦映射,就是ZONE_DMA+ZONE_NORMAL區。

在ULK中,各種地址的由來主要是從分段和分頁機制講起的(不同于LDD是從模塊應用的角度來說的),所以分的很清楚。但出場率最高的還是線性地址。

所以,我以為,(不一定正確,僅參考),管它什么各種地址,只要抓住物理地址以及對應內核1G地址的映射范圍和映射方式就行,具體看語境吧。

關閉窗口

相關文章

主站蜘蛛池模板: 成人精品在线观看 | 中文字幕成人 | 欧美日韩手机在线观看 | 中文字幕日韩欧美 | 欧美视频在线播放 | 国产一区中文字幕 | 久久久久久久久一区 | 亚洲免费观看 | 草在线 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 四虎影视免费在线 | 午夜小视频在线观看 | 国产精品久久久久久久久久久免费看 | 不卡一区 | 91久久精品一区二区三区 | 国产一区二区三区四区五区加勒比 | 国产一级在线视频 | 免费看黄视频网站 | 亚洲欧美日韩在线不卡 | 欧美精品乱码久久久久久按摩 | 欧美精品乱码久久久久久按摩 | 久久免费视频2 | 亚洲精品久久嫩草网站秘色 | 成人在线电影网站 | 久久精品一区二区 | 久久精品国产清自在天天线 | 天天躁日日躁狠狠躁2018小说 | 日韩欧美亚洲 | 毛片免费看的 | 日韩在线91 | 亚洲欧洲成人av每日更新 | 免费视频一区 | 中文日韩字幕 | 日韩av免费在线观看 | 国产美女自拍视频 | 日本精品一区二区三区四区 | 亚洲永久入口 | 日本a v在线播放 | 国产欧美一区二区三区另类精品 | 国产成人精品一区二区三区网站观看 | 国内精品一区二区 |