<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 學習電腦 > 網絡知識 > 網絡基礎知識 > 物理地址與虛擬地址映射

        物理地址與虛擬地址映射

        時間: 春健736 分享

        物理地址與虛擬地址映射

          MAC(Media Access Control或者Medium Access Control)地址,意譯為媒體訪問控制,或稱為物理地址、硬件地址,用來定義網絡設備的位置。今天學習啦小編給大家介紹一下物理地址與虛擬地址的映射吧。供大家參考!

          物理地址虛擬地址映射

          參考如下

          一般情況下,Linux系統中,進程的4GB內存空間被劃分成為兩個部分------用戶空間和內核空間,大小分別為0~3G,3~4G。

          用戶進程通常情況下,只能訪問用戶空間的虛擬地址,不能訪問到內核空間。

          每個進程的用戶空間都是完全獨立、互不相干的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它并不會跟著進程改變,是固定的。內核空間地址有自己對應的頁表,內核的虛擬空間獨立于其他程序。

          3~4G之間的內核空間中,從低地址到高地址依次為:物理內存映射區—隔離帶—vmalloc虛擬內存分配區—隔離帶—高端內存映射區—專用頁面映射區—保留區。

          【內核空間內存動態申請】

          主要包括三個函數:kmalloc(), __get_free_pages, vmalloc。

          kmalloc(), __get_free_pages申請的內存位于物理地址映射區,而且在物理上也是連續的,它們與真實的物理地址只有一個固定的偏移,因此存在較簡單的轉換關系。而vmalloc申請的內存位于vmalloc虛擬內存分配區(這些區都是以線性地址為度量),它在虛擬內存空間給出一塊連續的內存區,實質上,這片連續的虛擬內存在物理內存中并不一定連續,而vmalloc申請的虛擬內存和物理內存之間也沒有簡單的換算關系。

          因為vmalloc申請的在虛擬內存空間連續的內存區在物理內存中并不一定連續,可以想象為了完成vmalloc,新的頁表需要被建立,因此,知識調用vmalloc來分配少量內存是不妥的。

          一般來講,kmalloc用來分配小于128K的內存,而更大的內存塊需要用vmalloc來實現。

          【虛擬地址與物理地址關系】

          對于內核物理內存映射區的虛擬內存(用kmalloc(), __get_free_pages申請的),使用virt_to_phys()和phys_to_virt()來實現物理地址和內核虛擬地址之間的互相轉換。它實際上,僅僅做了3G的地址移位。

          上述方法適用于常規內存(內核物理內存映射區),高端內存的虛擬地址與物理地址之間不存在如此簡單的換算關系。因為它涉及到了分離物理頁的頁表控制機制。

          【ioremap】

          在ARM中,設備的寄存器或者存儲塊的這部分空間屬于內存空間的一部分,我們稱之為IO內存。

          在內核中訪問IO內存之前,我們只有IO內存的物理地址,這樣是無法通過軟件直接訪問的,需要首先用ioremap()函數將設備所處的物理地址映射到內核虛擬地址空間(3GB~4GB)。然后,才能根據映射所得到的內核虛擬地址范圍,通過訪問指令訪問這些IO內存資源。

          在將I/O內存資源的物理地址映射成核心虛地址后,理論上講我們就可以象讀寫RAM那樣直接讀寫I/O內存資源了。為了保證驅動程序的跨平臺的可移植性,我們應該使用Linux中特定的函數來訪問I/O內存資源,而不應該通過指向核心虛地址的指針來訪問。

          【mmap】

          用mmap映射一個設備,意味著使用戶空間的一段地址關聯到設備內存上,這使得只要程序在分配的地址范圍內進行讀取或者寫入,實際上就是對設備的訪問。這種數據傳輸是直接的,不需要用到內核空間作為數據轉移的中間站。

          remap_page_range函數的功能是構造用于映射一段物理地址的新頁表,實現了內核空間與用戶空間的映射。

          在內核驅動程序的初始化階段,通過ioremap()將物理地址映射到內核虛擬空間;在驅動程序的mmap系統調用中,使用remap_page_range()將該塊ROM映射到用戶虛擬空間。這樣內核空間和用戶空間都能訪問這段被映射后的虛擬地址。

          Ioremap:

          進程空間ç內核空間çIO內存

          其中,后面兩個指的是同一段物理內存區域,只是一個為虛擬地址,一個為物理地址。進程空間和內核空間對應著不同的物理地址,它們之間的數據傳遞,是實際的數據的拷貝。

          Mmap:

          進程空間çIO內存

          其中,進程空間mmap得到的那段虛擬地址跟IO內存對應著同一段物理地址。這個過程沒有額外的數據中轉,讀寫都直接針對硬件的物理地址進行。

          一般來講,小數據量的傳輸用ioremap()就足夠了,

          【IO內存的一般訪問方法】

          1. 首先是調用request_mem_region()申請資源,即告訴內核,本驅動正在使用這段物理內存,其他驅動不得訪問它們。在設備驅動模塊加載或open()函數中進行。

          2. 接著講寄存器地址通過ioremap()映射到內核空間虛擬地址,之后就可以通過Linux設備訪問編程接口訪問這些設備的寄存器了。在設備驅動初始化、write(),read(),ioctl()函數中進行。

          3. 訪問完成之后,應對ioremap()申請的虛擬地址進行釋放,并釋放release_mem_region()申請的IO內存資源。在設備驅動模塊卸載或release()函數中進行。

          學習啦小編介紹了物理地址虛擬地址映射的相關知識,希望你喜歡。

        579959 主站蜘蛛池模板: 国产精品久久久亚洲| 大地影院mv高清在线观看免费| 色噜噜狠狠色综合中文字幕 | 国产亚洲一二三区精品| 中文字幕精品亚洲人成在线 | 国产伦一区二区三区视频| 国产偷自一区二区三区在线| 亚洲熟妇自偷自拍另类| AV最新高清无码专区| 中文无码人妻有码人妻中文字幕| 国产成人精品一区二区秒拍1o| 男女肉粗暴进入120秒视频| 东京热av无码电影一区二区| 亚洲精品无amm毛片| 无码日韩精品一区二区三区免费| 人妻少妇邻居少妇好多水在线 | 极品无码国模在线观看| 麻豆国产97在线 | 中国| 久久婷婷大香萑太香蕉AV人| 精品自拍偷拍一区二区三区| 婷婷丁香五月六月综合激情啪| 欧美丝袜高跟鞋一区二区| 无码人妻一区二区三区线| 亚洲欧洲日韩综合色天使| 国产360激情盗摄全集| 国产精品天天看天天狠| 中文字幕乱码一区二区免费| 国产国产乱老熟女视频网站97| 久久国产亚洲精选av| 波多野吉av无码av乱码在线| 亚洲第一无码AV无码专区| 亚洲中少妇久久中文字幕| 日韩av在线一区二区三区| 亚洲岛国成人免费av| 国产精品青青在线观看爽香蕉| 人妻少妇精品视频专区| а√天堂8在线官网| 九九热精品免费视频| 高清国产亚洲精品自在久久| 中文字幕亚洲精品人妻| 久久婷婷国产精品香蕉|