導航:首頁 > 器材知識 > 為什麼設備驅動要用虛擬地址

為什麼設備驅動要用虛擬地址

發布時間:2023-03-19 16:25:39

⑴ 驅動程序中訪問地址空間是操作物理地址還是虛擬地址,還是兩者都可以

不同操作系統不一樣,像linux就是虛擬地址,vxworks就是直接物理地址

⑵ 一台計算機有48為虛擬地址和32位物理地址是怎麼回事

任何時候,計算機上都存在一個程序能夠產生的地址集合,我們稱之為地址范圍。這個范圍的大小由CPU的位數決定,例如一個32位的CPU,它的地址范圍是0~0xFFFFFFFF (4G),而對於一個64位的CPU,它的地址范圍為0~0xFFFFFFFFFFFFFFFF (16E).這個范圍就是我們的程序能夠產生的地址范圍,我們把這個地址范圍稱為虛擬地址空間,該空間中的某一個地址我們稱之為虛擬地址。與虛擬地址空間和虛擬地址相對應的則是物理地址空間和物理地址,大多數時候我們的系統所具備的物理地址空間只是虛擬地址空間的一個子集。這里舉一個最簡單的例子直觀地說明這兩者,對於一台內存為256M的32bit x86主機來說,它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x00000000~0x0FFFFFFF(256M)。

在沒有使用虛擬存儲器的機器上,地址被直接送到內存匯流排上,使具有相同地址的物理存儲器被讀寫;而在使用了虛擬存儲器的情況下,虛擬地址不是被直接送到內存地址匯流排上,而是送到存儲器管理單元MMU,把虛擬地址映射為物理地址。
大多數使用虛擬存儲器的系統都叢乎使用一種稱為分頁(paging)機制。虛擬地址空間劃分成稱為頁(page)的單位,而相應的物理地址空間也被進行劃分,單位是頁幀(frame).頁和頁幀的大小必須相同。在這個例子中我們有一台可以生成32位地址的機器,它的虛擬地址范圍從0~0xFFFFFFFF(4G),而這台機器只有256M的物理地址,因此他可以運行4G的程序,但該程序不能一次性調入內存運行。這台機器必須有一個達到可以存放滲斗悉4G程序的外部存儲器(例如磁碟或是FLASH),以保證程序片段在需要時可以被調用。在這個例子中,頁的大小為4K,頁幀大小與頁相同--這點是必須保證的,因為內存和外圍存儲器之間的傳輸總是以頁為單位的。對應4G的虛擬地址和256M的物銷宴理存儲器,他們分別包含了1M個頁和64K個頁幀。

⑶ 用游俠系統提示虛擬地址有什麼用

那是因為搭埋頃,安裝金山游俠V時會安裝一個<虛擬光碟機>是這知陸個虛擬光碟機的驅動沒有經過微軟認液清證,其實裝上也沒什麼,不會影響系統。如果不想要這個虛擬光碟機,只要安裝時選擇<自定義>把虛擬光碟機去掉,系統就不會提示這個了。

⑷ 驅動中操作物理絕對地址為什麼要先ioremap

void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 入口: phys_addr:要映射的起始的IO地址; size:要映射的空間的大小; flags:要映射的IO空間的和許可權有關的標志; 功能: 將一個IO地址空間映射到內核的虛擬地址空間上去,便於訪問; 實現:對要映射的IO地址空間進行判斷,低PCI/ISA地址不需要重新映射,也不允許用戶將IO地址空間映射到正在使用的RAM中,最後申請一 個 vm_area_struct結構,調用remap_area_pages填寫頁表,若填寫過程不成功則釋放申請的vm_area_struct空 間; 意義: 比如isa設備和pci設備,或者是fb,硬體的跳線或者是物理連接方式決定了硬體上的內存影射到的cpu物理地址。 在內核訪問這些地址必須分配給這段內存以虛擬地址,這正是__ioremap的意義所在 ,需要注意的是,物理內存已經"存在"了,無需alloc page給這段地址了. 文件中的注釋也是比較詳盡的,並且只 暴露了__ioremap,iounmap兩個函數供其他模 塊調用,函數remap_area_pte,remap_area_pmd,remap_area_pages只為__ioremap所用. -------- 為了使軟體訪問I/O內存,必須為設備分配虛擬地址.這就是ioremap的工作.這個函數專門用來為I/O內存區域分配虛擬地址(空間).對於直接映射的I/O地址ioremap不做任何事情(uClinux中是這么實現的??) 有了ioremap(和iounmap),設備就可以訪問任高搜何I/O內存空間,不論它是否直接映射到虛擬地址空間.但是戚讓歷,這些地址永遠不能直接使用(指物理地址),而要用readb這種函數. 根據計算機平台和所使用匯流排的不同,I/O 內存可能是,也可能不是通過頁表訪問的,通過頁表訪問的是統一編址(PowerPC),否則是獨立編址(Intel)。如果訪問是經由頁表進行的,內核必須首先安排物理地址使其對設備驅動 程序可見(這通常意味著在進行任何 I/O 之前必須先調用 ioremap)。如果訪問無需頁表,那麼 I/O 內存區域就很象 I/O 埠,可以使 用適當形式的函數讀寫它們。 不管訪問 I/O 內存時是否需要調用 ioremap,都不鼓勵直接使用指向 I/O 內存的指針。盡管(在「I/O 埠和 I/O 內存」 介紹過)I/O 內存在硬體一級是象普通 RAM 一樣定址的,但在「I/O 寄存器和常規內存」中描述過的那些需要額外小心的情況中已經建議不要使用普 通指針。相反,使用「包裝的」函數訪問 I/O 內存,一方面在所有平台上都是安全的,另一方面,在可以直接對指針指向的內存區域執行操作的時候,該函數 是經過優化的 ------- 自己原以為當給顯卡上的存儲空間分配了匯流排地址A以後,它所對應的虛擬空間就隨之確定了.也就是A+3G.可是事實上,在ioremap.c文件裡面的實現並不是這樣的.所用的函數是 __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)實現的時候是為從phys_addr開始的size大小的物理地址分配一塊虛擬地址.注意這里是分配,而不是指定.我所認為的分配應該是指定即根據phys_addr得到其所對應的滑含虛擬地址是phys_addr+3G. 本人認為一合理的解釋是這樣的:系統虛擬空間中映射的非IO卡上的地址空間滿足3G差關系,而IO卡上的 存儲空間就不滿足了.

閱讀全文

與為什麼設備驅動要用虛擬地址相關的資料

熱點內容
君威工具箱清單 瀏覽:561
寧錨都有什麼閥門 瀏覽:627
眾泰sr9分內軸承怎麼拆 瀏覽:124
機械密封怎麼算型號 瀏覽:86
如何更換大眾速騰儀表盤顯示 瀏覽:554
軸承型號怎麼看出內外徑 瀏覽:922
實驗器材酒精燈由哪些部分組成 瀏覽:670
超聲波在什麼介質中傳播最慢 瀏覽:21
介質是瓦斯用什麼閥門 瀏覽:344
感應自動門裝置松下 瀏覽:463
從有用功到機械效怎麼銜接 瀏覽:864
川島三郎電動工具 瀏覽:3
製冷壓縮機中的短循環是指什麼 瀏覽:922
閥門銅滑鈴掉下來了怎麼處理 瀏覽:264
肉雞養殖設備多少錢 瀏覽:242
軸承加熱盤怎麼清洗 瀏覽:888
廣汽傳祺gs4右前半軸軸承怎麼拆 瀏覽:174
儀表盤圓圈裡邊兩杠是什麼意思 瀏覽:725
偏癱哪些康復儀器最好 瀏覽:600
醫院消防報警器材是什麼 瀏覽:436