我找到的是ms做kernel記憶體管理的developer,所以應該是最權威的了. 目前驅動程式唯一能達到訪問4gb以上位址記憶體的方法是通過乙個ddk api: mmmapiospace. 其實這個api本來是用來給裝置驅動程式進行特殊的位址對映用的,並非用來管理記憶體.
簡單地說, bios會把可用的記憶體對映到乙個並不一定連續的實體地址空間中,比如0位址開始的一段空間需要留給bios自己所以無法對映記憶體, 3gb-4gb範圍內的位址有可能留給各種pci裝置,也不能用作記憶體,這也是為什麼
win7
32bit在4gb位址線下看不到全部4gb記憶體的原因.
ramdisk 4g的原理就是使用mmmapiospace來強行讀寫4gb以上的位址空間,注意是跳過作業系統的強行讀寫,把這段位址當作是io裝置來操作,而並不一定是記憶體.
這種做法,主要有兩個問題:
第一: 作為驅動程式,你是無法確切地知道究竟哪段實體地址空間裡面是對映的你的多餘的記憶體,目前的bios架構中,只有通過中斷int 25, function 0xe820才能獲知, 而這個bios中斷只能在實模式下呼叫,也就是說windows啟動之後,驅動程式是無法呼叫這個中斷去獲知的. 那麼,ramdisk驅動就只能靠猜, 比如說他可以知道你裝了4gb記憶體,而目前只認了3.5gb, 那麼多出來的512m應該在4g-4.5g這個實體地址段.
但是,這個只是猜測,bios並不一定會把多出來的記憶體對映到那裡, 也可能是4.1g-4.6g區間,甚至不一定是連續的空間. 而且,各種奇怪的硬體裝置也有可能自己占用特殊的實體地址空間,比如假設有一塊硬體占用了4g開始的16m空間,那麼顯然這段位址裡面就不再是記憶體了.
好吧,那麼如果ramdisk強行去讀寫錯誤的位址空間會如何呢? 簡單地說: cpu不會報錯, 但是結果是不可預料的, 比如如果這段位址空間根本是乙個memory hole,那麼往裡面寫東西就是白寫,讀操作返回的有可能都是0xffffffff, 這樣地話,作為乙個虛擬磁碟而言,其結果就是資料損壞.
更為嚴重的是:如果有一塊特殊的硬體的io空間對映在4g以上的一段位址,而ramdisk強行去寫入資料,就會直接對那塊硬體進行io操作,有可能會損壞硬體或者發生更奇怪的事情,比如該裝置莫名其妙開始工作了等等.
第二: 即使你的運氣很好,bios把多餘的記憶體正好連續地對映在4g開始的空間,也就是ramdisk完全猜對了的情況,還有乙個問題是,ramdisk無法保證有沒有其他任何**也會去讀寫這段位址空間. 因為ramdisk是跳過os的記憶體管理直接進行io的,其他驅動程式也有可能做相同的事情,這樣的結果一樣是資料損壞. 比如ramdisk先往裡面寫了乙個檔案的內容,之後另乙個驅動程式也在相同位址寫了一些其他資料,那麼ramdisk再讀出來的時候就拿不到原來的資料了.
綜上,在你無法100%確保以上兩點肯定沒事的情況下,使用ramdisk還是有風險的,最壞情況是使用者資料丟失甚至硬體裝置損壞.
其實真的要用超過4g記憶體,還是有其他更安全的辦法的,比如換
64位系統,或者用server版本(完全支援pae的),或者直接patch kernel (這個在上面的帖子裡面有鏈結,可以在vista
32位裡面直接用到128g記憶體)
如果真的一定要用ramdisk,請在設定好之後一定要做乙個測試: copy乙個可以撐滿ramdisk大小的真實檔案(比如電影之類),然後再從ramdisk裡面copy出來,再用fc /b和原始檔案進行二進位制比較.多做幾次測試,以確保正確性.每乙個使用ramdisk的機器都應該做這樣的測試,因為每台機器bios對映的方式可能不一樣.
當然這個只能基本確保第乙個問題不存在,還是無法排除第二個問題的可能性.萬一有個驅動突然想起來往4g以上某個位址寫點東西的話,你的檔案就壞了.
ps. 如果有人知道如何聯絡ramdisk作者的話,請替我**下. 希望作者在發布這樣乙個好工具的同時,一定要詳細說明可能造成的後果極其原因.
什麼是VoLTE?什麼是4G ?
什麼是volte?volte是基於ims的語音業務。volte即voice over lte,它是一種ip資料傳輸技術,無需2g 3g網,全部業務承載於4g網路上,可實現資料與語音業務在同一網路下的統一。現在我們用的4g網路只是用來實現資料傳輸,語音通話用的是3g或是2g,走的是cs域,所以volt...
什麼是手機1G2G3G4G
本期手機趣圖向您解釋了4代移動通訊技術之間的區別以及從1g到即將到來的4g的進化歷史。1g 模擬蜂窩網路 第一代移動通訊技術使用了多重蜂窩基站,允許使用者在通話期間自由移動並在相鄰基站之間無縫傳輸通話。2g 數字網路 第二代移動通訊技術區別於前代,使用了數字傳輸取代模擬,並提高了 尋找網路的效率。這...
如何用Deeplearning4j實現GAN
一 gan的思想 gan的核心所做的事情是在解決乙個argminmax的問題,公式 1 求解乙個discriminator,可以最大尺度的丈量generator 產生的資料和真實資料之間的分布距離 2 求解乙個generator,可以最大程度減小產生資料和真實資料之間的距離 gan的原始公式如下 實...