也沒有什麼操作上會寸步難行的情況......
甚至要裝到8GB的記憶體,也是輕而易舉....
聽8GB好像要花很多錢,但也不過是四千到六千塊的級數........
想要用4GB以上記憶體的人,一起來用x64的os吧!就不會有什麼只抓到3.xGB記憶體的情況發生
Vista x64 SP1等著你...........WinXP x64 SP2也等著你............
ps.不要再問WinXP x64 SP3哪邊下載....
因為winxp x64修正跟win2003 x64合用修正檔,所以winxp x64的SP會跟win2003一起出....
x64的sp2才剛剛在2007年3月推出....SP3再等個兩年吧....
ycweng wrote:
Roger兄,小弟覺得考古無妨,但是4GB實體記憶體在Vista跟XP SP2下無法充分利用,跟您講的Windows沒採用selector:offset模式,實在是沒什麼關係的,32-bit Linux以及MSFT自家的Server作業系統也是採用一樣的Memory Model,也把selector給閹了,4GB(含)以上的實體記憶體也是運用得好好的。
至於Windows的"每個"Process"只有"4GB虛擬定址空間的問題,敢問Roger兄最近是在寫什麼程式?2GB的User space居然寫到不夠用?Office的那幾支大肥仔如Word,大約也就是佔用幾百MB而已。
你忘了,Windows XP 問題在於加上所有應用程式,實體記憶體也只能 4GB 啊,問題就出在我說的 selector 跟 table 啊。
虛擬記憶體跟實體記憶體的轉換這關,因為MS 對selector跟table的簡化,所以變成整個實體記憶體最多到 4GB,還要被硬體映射吃掉 (是每個 Process 都吃)。
既然要問為甚麼 XP 不能給足 4GB,這就是答案,因為從系統到應用程式 Process 都會硬體映射吃掉這些空間,所以定址當然不能給你足足4GB。
單一節區限制=單一Process限制=系統限制,windows 如 XP 真的簡化了很多東西,其他作業系統並沒有完全廢掉 selector 跟 GDT、LDT 等 table 吧.
寄居蟹(德) wrote:
我試著簡單整理一下,方便那些不想看完整段文章的人 (如果有錯請糾正)
目前主流的MS OS (XP & Vista),想要使用到4G以上(含)的實體記憶體,就直接裝64 bit OS.
至於會不會像在32 bit OS下,實體記憶體會被犧牲掉一部分,就要請有裝過4GB以上並且用64 bit的大大來說明一下了.
至於還是使用32 bit OS的人來說,除非有特別需求,不然2G physical memory應該就綽綽有餘了.
答案是不會。
硬體會映射到高位址,所以,除非有一天 64Bits 定址上限又插滿實體記憶體了,不然應該是不會吃掉現有記憶體.
這道理就像 32 位元 4GB 上限,我插4M、16M.....512MB、1GB、2GB 都不會被吃,就是 4GB 才會。
ycweng wrote:
至於Windows的"每個"Process"只有"4GB虛擬定址空間的問題,敢問Roger兄最近是在寫什麼程式?2GB的User space居然寫到不夠用?Office的那幾支大肥仔如Word,大約也就是佔用幾百MB而已。
要超過2GB記憶體使用其實滿容易的
一個值我用雙精準度8byte來儲存的話
一個50000x50000的矩陣就必須使用到20GB的容量來儲存
這狀況倒是十分容易出現,我自己弄的普通model就有到30000個節點
需要30000x30000的記憶體空間來儲存(理論上)讓我解30000條聯立方程式
因此才衍生出一大堆小技巧來讓矩陣瘦身
但是好幾個瘦身後的矩陣也是需要其他記憶體空間來運算的
最後就只能改成使用direct檔來當作記憶體除存使用
扯到IO就是運算速度被拖慢
換了E6850後發現速度全卡在IO沒得救了

最近測試64位元環境看到程式可以使用到8TB的記憶體真是會讓人感動到流淚啊

Hiro hyn hi^dh ab 'wanath......
Roger Shih wrote:
你忘了,Windows XP 問題在於加上所有應用程式,實體記憶體也只能 4GB 啊,問題就出在我說的 selector 跟 table 啊。
虛擬記憶體跟實體記憶體的轉換這關,因為MS 對selector跟table的簡化,所以變成整個實體記憶體最多到 4GB,還要被硬體映射吃掉 (是每個 Process 都吃)。
既然要問為甚麼 XP 不能給足 4GB,這就是答案,因為從系統到應用程式 Process 都會硬體映射吃掉這些空間,所以定址當然不能給你足足4GB。
單一節區限制=單一Process限制=系統限制,windows 如 XP 真的簡化了很多東西,其他作業系統並沒有完全廢掉 selector 跟 GDT、LDT 等 table 吧.
...(恕刪)
x86的logical address到physical address轉換是兩段的:
logical address => [segmentation unit] => linear address => [paging unit] => physical address
在x86 Linux/UNIX/Windows裡面segmentation unit分段單元都是維持您所謂廢掉的狀態,4GB虛擬定址空間分成kernel space以及user space也不是Windows獨有的,不在每個process space留出kernel space以及硬體裝置對應的位址,應用程式要怎麼呼叫作業系統服務、且必要時讓硬體驅動程式進行MMIO?
但要能夠使用到4GB以上的實體記憶體,不要忘了還有paging unit分頁單元,在支援memory remapping的主機板上,跟PCI裝置位址重疊的實體記憶體會被重對應到4GB以上的實體位址,XP SP2以降要限制4GB的實體位址,從paging unit動手腳禁止調用對應到4GB以上實體位址的記憶體頁面資源便可,將來若要放鬆再打開也較方便,Win Server 2003/2008中高階版以及Linux、FreeBSD並沒有硬加上這個限制,所以paging unit可以利用對應到4GB以上實體位址的記憶體page資源來分配給應用程式。
如果要同時充分利用到segmentation unit分段單元以及paging unit分頁單元兩者,倒是讓我想到一個古早時期採用分頁式分段、結果複雜到讓人維護不下去的作業系統:Multics...

Roger Shih wrote:寄居蟹(德) wrote:
至於會不會像在32 bit OS下,實體記憶體會被犧牲掉一部分,就要請有裝過4GB以上並且用64 bit的大大來說明一下了.
...(恕刪)
答案是不會。
硬體會映射到高位址,所以,除非有一天 64Bits 定址上限又插滿實體記憶體了,不然應該是不會吃掉現有記憶體.
這道理就像 32 位元 4GB 上限,我插4M、16M.....512MB、1GB、2GB 都不會被吃,就是 4GB 才會。
...(恕刪)
貼一張64位元Windows的圖供您參考,硬體一定會映射到高位址嗎?

Gwaewluin wrote:
要超過2GB記憶體使用其實滿容易的
一個值我用雙精準度8byte來儲存的話
一個50000x50000的矩陣就必須使用到20GB的容量來儲存
這狀況倒是十分容易出現,我自己弄的普通model就有到30000個節點
需要30000x30000的記憶體空間來儲存(理論上)讓我解30000條聯立方程式
因此才衍生出一大堆小技巧來讓矩陣瘦身
但是好幾個瘦身後的矩陣也是需要其他記憶體空間來運算的
最後就只能改成使用direct檔來當作記憶體除存使用
扯到IO就是運算速度被拖慢
換了E6850後發現速度全卡在IO沒得救了
最近測試64位元環境看到程式可以使用到8TB的記憶體真是會讓人感動到流淚啊
Gwaewluin兄的矩陣可是Sparse Matrix?如果是就像您說的有一些資料結構的作法可以減少浪費的記憶體,如果不是,要不要試用AWE API看看?好處是透過AWE要到的記憶體不會被swap到虛擬記憶體去,壞處是要有一台真正插滿20GB實體記憶體的PC、否則透過AWE也要不到足夠記憶體。如果改寫太麻煩,此類的科學研究或Simulation運算就是小弟前述屬於那0.5%真正會覺得4GB虛擬空間不夠用的應用,只好把它移植到64-bit OS、甚至工作站去編譯了,不過若沒有能插20GB RAM的PC,您在64-bit Windows跑直接宣告這個超大矩陣的程式版本,虛擬記憶體分頁檔需求可能也會把硬碟操到吱吱叫....
jiang360 wrote:
32位元的作業系統就...(恕刪)
那如果有呢?!
並不是所有的32bit OS只顯示到3.xGB多
Windows Server 2003 & 2008 x86 32bit 記憶體都可正確顯示4G
可自行翻閱4月號的PCDIY,他裡面有報導
你的資訊該更新一下囉!

這是從PCDIY雜誌一書的擷圖,如有侵權小弟立即刪除
這裡也有人提出 2003 32bit顯示出7.xG多的記憶體容量
http://www.mobile01.com/topicdetail.php?f=300&t=477223
緣分,是一種無法解釋的東西,它就像思念一樣,無聲無息的出現在你我身邊,而你,感覺不到...
內文搜尋

X