• 6

我的xp sp3用線上更新後 還是不會支援 到4g

ycweng wrote:
有些部分其實我並不贊同,

1. Flat memory model對於程式設計師來說是一個比較直覺方便的model,必要時也比較容易把程式移植到其他的平台上,而不用因為大部分其他處理器/OS沒有 selector:offset的模式而大幅改寫。4GB的虛擬空間,99%以上的程式已經很夠用了(剩下的1%,或許有一半如資料庫應用是真的不夠用,另一半則是軟體公司打混或急就章趕上市,程式沒有好好最佳化,例如最近的一些3D Game),對於32-Linux/Unix來說此限制也一樣,再說Linux也是使用Flat memory model。

2. 把硬體 Mapping 到高位址,是在OS被載入前BIOS就已經先對應了,對於Linux跟Windows來說啟動後都面臨一樣的問題,但Linux 32-bit/Win server 2003可以完全利用超過4GB上的實體記憶體沒有問題,而XP/Vista很明顯是被微軟人為限制的。

3. DOS並沒有虛擬記憶體,Windows/Linux都有,DOS的定址空間就像個大西部,沒什麼虛擬位址實體位址之分,惡意程式或是寫得不好的程式愛怎麼寫入就怎麼寫入,而Windows/Linux都是在保護模式下,實體記憶體跟各應用程式獨有的虛擬定址空間是分開的。

4. Intel/AMD的PAE跟DOS時代的HMA有本質上的根本不同,兩者不太能相提並論

5. AWE是作業系統正式開放的API,並非旁門左道,讓應用程式必要時可以享有超過user space空間(一般情況是2GB)的記憶體,且不會被OS swap出去,缺點是只能存放資料,不能放程式碼本體。


1. 嚴格來說,效率考量. 在程式設計上,除了部份情況下的 C 跟組合語言外,Flat address 對寫程式的影響很小,尤其是現在。

有跨平台需求的,每一平台還是要有自己的 compilier lib. 比較有利?可以忽略了.


被嫌棄的原因,還是因為比起以前的 segement ,要再多經過一層轉換,得犧牲效能,但是真的會犧牲很多效能嗎?不會比 switch CPU mode 更浪費吧。

2. 我說這就是 IBM PC 整體留下來的問題,包括 DOS 也算是禍首。硬體映射為何不排前面排後面?還不是當初這樣,後來不得不。

3. DOS extender 是啥?DOS 虛擬記憶體的實做我也小玩過,很累人的工作沒錯,不過也沒那麼神秘。x86 會有 real mode、v86 還不是為了 DOS....XD

4. 卻是異曲同工啊,PAE 只讓我想起 A20....XD

5. 只能放資料不能放程式,還真像以前 DOS 的 UMA 跟 EMS....:p
Roger Shih wrote:
1. 嚴格來說,效率考量. 在程式設計上,除了部份情況下的 C 跟組合語言外,Flat address 對寫程式的影響很小,尤其是現在。
有跨平台需求的,每一平台還是要有自己的 compilier lib. 比較有利?可以忽略了.
被嫌棄的原因,還是因為比起以前的 segement ,要再多經過一層轉換,得犧牲效能,但是真的會犧牲很多效能嗎?不會比 switch CPU mode 更浪費吧。
...(恕刪)

這一段看不懂,您想說被嫌棄被犧牲效能的是flat memory model還是segmentation model?為何會跳躍談到浪費時間的CPU mode switch呢?

只能說,segmentation的memory model會走入歷史,有它的原因,當年RISC CPU以及搭配OS(多為UNIX徒子徒孫)所強調的簡潔、效率設計是一大推手,再怎麼惋惜,它也不會坐時光機回來。

Roger Shih wrote:
2. 我說這就是 IBM PC 整體留下來的問題,包括 DOS 也算是禍首。硬體映射為何不排前面排後面?還不是當初這樣,後來不得不。
...(恕刪)

您設計一樣東西,就能夠未卜先知前瞻卅年嗎?這是老爭論了,有包袱還是要去面對,要不索性跳到新的處理器/OS/架構去,請問那裡有多少商機多少人煙?再者這硬體映射在目前Windows/Linux下並沒有造成像當年DOS九成以上的使用者/程式設計師不便、空間不夠用吧!不解....

Roger Shih wrote:
3. DOS extender 是啥?DOS 虛擬記憶體的實做我也小玩過,很累人的工作沒錯,不過也沒那麼神秘。x86 會有 real mode、v86 還不是為了 DOS....XD
...(恕刪)

DOS extender基本上已經是自己寫一個小OS了,您也說了虛擬記憶體是自己寫的,不是DOS給您的吧!

DOS/x86活下來,就是運氣跟命好加上對手不爭氣策略失敗(x扁說:要不然係妹安匝?),要進到32-bit,不代表可以很爽快的把16-bit DOS包袱馬上丟掉,對於一個公司來說,那叫做笨,80386沒有real mode/V86 mode在當年能賣嗎?莫非不用跑倚天中文啦!看看同一家公司的Itanium/IA64後來是怎麼笨死的、以及又是怎樣扭扭捏捏不得不採用AMD 的x86-64,還叫它IA-"32"e勒,看到鬼.....

Roger Shih wrote:
4. 卻是異曲同工啊,PAE 只讓我想起 A20....XD
...(恕刪)

仔細分辨,他們完全不一樣。

Roger Shih wrote:
5. 只能放資料不能放程式,還真像以前 DOS 的 UMA 跟 EMS....:p
...(恕刪)

UMA??是UMB跟HMA吧!UMB跟HMA都可以放程式,您要說的應該是EMS跟漏掉的XMS。類似EMS/AWE等利用一塊window去switch bank存取資料的設計自從電腦發明以來便一直廣被使用,不止DOS用。話說回來,就算AWE在那,九成多以上的應用程式目前還是沒有虛擬定址空間不足到被逼著一定得去用的需求。
我的意思是錯誤會延續的....XD

XP 當時推出也認為 4G 很大,心態跟 8086 推出時也認為 1MB 很大一樣 (推出當時的對手主記憶體不過 64K).

32 bit 只能定址 4GB 這種積非成是的觀念,是誰誤導出來的?
串場的Intel IA-64是20世紀末announce的(RISC CPU大多更早就有64-bit版,不一一提了),AMD X86-64架構是2000年announce的,Windows XP是2001年推出的,XP的x64版是2005年相隔不到四年後推出的,基本上這些公司都有認知到4GB的程式虛擬定址空間就算在21世紀的第一個十年不是問題,但是平安度過第二個十年的機率或許不大,否則他們何必至今持續花錢花人維持兩個版本?

32 bit OS/CPU只能定址 4GB (實體位址)這種積非成是的觀念,是因為大多數人都不容易瞭解何謂虛擬記憶體、每個程式都有獨立的4GB虛擬定址空間、以及跟記憶體控制器管理的實體定址空間/實體記憶體是如何透過分頁單元機制來對應的,但是2^32=4GB學過計概應該都會算,多好懂啊!(只是是錯的...)加上跟Linux、Solaris、Windows Server 2003/2008一樣可完整用到安裝的4GB實體記憶體的XP SP1當道時,相關的主流晶片組支援以及4GB記憶體本身都不便宜,等到現在4GB記憶體便宜了,XP SP2以後到Vista SP1反而限死了只支援4GB"實體定址空間",Vista SP1還給你來個看得到安裝的4GB實體記憶體來混淆視聽、順便幫HP、Dell、Acer...等減少客戶狂call,但實質上就是吃不到,所以久而久之大家就倒果為因了。

當大多數人都在認為32-bit OS本來就天經地義只能用到4GB實體記憶體減去PCI裝置佔用空間後的3.x或2.x GB(錯!錯!錯!)、一定要裝64-bit OS才能完整使用4GB(含)以上時(再錯!再錯!再錯!),Microsoft樂得假託driver相容性問題暫不開放.....

我個人是認為HP、Dell、Acer...等會在明年出廠預設裝上4GB的機器出貨量變大時開始對Microsoft加壓,下一版的Vista Service Pack或許有機會支援完整使用4GB實體記憶體,而不是像現在浪費掉被PCI裝置位址重疊到因而被re-map的那數百MB到1.xGB不等的實體記憶體,支援到8GB的機率或許低於三成。

ycweng wrote:
串場的Intel I...(恕刪)


請問是否有無文獻,或者其他證明可以支持你的論點呢?

有各種OS 支援4G以上的比較表會更清楚...因為我固有的想法也是32bit OS最大只能支援到4G...

我比較好奇的是所謂的看的到吃不到....
寄居蟹(德) wrote:
請問是否有無文獻,或者其他證明可以支持你的論點呢?

有各種OS 支援4G以上的比較表會更清楚...因為我固有的想法也是32bit OS最大只能支援到4G...

我比較好奇的是所謂的看的到吃不到....
...(恕刪)

32-bit OS最大只能支援到4G...的什麼??如果4GB作為形容詞、沒有主詞就是這個簡化錯誤說法一直傳來傳去的問題所在。

DOS是16位元OS沒錯,但是也並非只能支援2^16=64KB的實體記憶體吧!32-bit OS事實上是能夠支援4GB以上的實體記憶體的,又為何這麼難以被接受呢?

在32-bit OS下,每個process可以有、也只能有4GB的獨立"虛擬定址空間",這是打不破的宿命(就算透過AWE去多要記憶體,也得把它們map回這虛擬定址空間中),至於32-bit OS能不能支援4GB以上的"實體記憶體"(在硬體都有支援的前提下),答案是可以的。

MSDN : Memory Limits for Windows Releases

第一段"Memory and Address Space Limits"講的是Process的虛擬定址空間限制,接下來的段落都很清楚掛上"Physical",是解釋Windows家族實體記憶體支援部分,可仔細比較每一種Windows 32-bit版的那一欄。

最後可以看看左邊的目錄樹,"About Memory Management"大項下的篇幅都很值得一看。
我覺得可能先認知一下所謂的32bit OS是指何為32bit
以前最常用來判定CPU的是register bit width
對於OS來說則應該是指運算能力
或者是相容到哪個世代的CPU

至於實體記憶體定址除了CPU本身的addressing bus夠寬以外(不夠就要用外部切換的方式)
晶片組跟記憶體線路都要互相搭配
這跟32bit OS的記憶體支援度到是沒有太直接的限制
不過如同之前大大所討論過的
單一程式定址空間就會被限制在4G以內 (邏輯上的4G)

至於XP的PAE是不是有些陰謀的限制,導致可能會有問題的疑慮
我到是覺得如果先天就設計成特定SIZE的記憶體架構管理
後續的修改可能也不見得會沒有BUG
甚至可能當初的設計架構導致確實會有某些問題發生(這種情況要改就不容易了)
這除非詳細研究一下XP的source code
不然理論性的論調只是空談
阿福仔仔 wrote:
至於XP的PAE是不是有些陰謀的限制,導致可能會有問題的疑慮
我到是覺得如果先天就設計成特定SIZE的記憶體架構管理
後續的修改可能也不見得會沒有BUG
甚至可能當初的設計架構導致確實會有某些問題發生(這種情況要改就不容易了)
這除非詳細研究一下XP的source code
不然理論性的論調只是空談
...(恕刪)

關於XP SP2以及Vista為何限死4GB"實體定址位址"的官方說法:

Microsoft Tech Support : The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista and Windows XP Service Pack 2

若要體諒Microsoft設計個新OS還得兼顧舊驅動程式相容性、因此不得不"忍痛"加上4GB"實體定址位址"的限制讓大家相忍為國也行,但如果你今天沒有用這些不相容的裝置、而只是單純想要質疑為何4GB實體記憶體在Vista/XP SP2只能被用到2.x/3.xGB,無可厚非吧!Microsoft給的官方說法有多少人看得懂?用這種看不懂的東西作理由犧牲絕大多數Vista以及XP SP2的主流使用者權益,我個人是不太能接受,大部分裝4GB(含)以上實體記憶體的人都是無辜的,且這種無辜的人隨著記憶體便宜只會越來越多,Microsoft不是沒有經歷過從Win95/98/ME到WinXP的驅動程式模型大改的大風大浪、甚至可說是Microsoft自己強制它發生的,何況Microsoft自己也有Windows Hardware Quality Lab專門驗證驅動程式,在新版Windows內一起release新版驅動程式的事,Microsoft也不是沒做過。
先來考古一下.

寫過 DOS 時代組合語言程式的應該知道當時程式最大的限制跟麻煩,就是 segment:offset ,如程式節區 cs:ip、資料節區 ds:si、es:di、堆疊節區等。以 ip、si、di 等暫存器的16位元寬度,每一節區是 64K (就跟現在 32 位元節區每一節區最大 4GB 意思一樣)

換句話說 64K 或 4GB 限制,是每一節區的限制,不是CPU全部定址的限制。

還有印象的,應該還記得 A0000:0000 是當時拿來作顯示卡的映射的,當時,A000:0000 之後的定址都被使用去硬體映射,結果DOS能使用的主記憶體最大限制在 640K (跟現在 XP 2GB 的理由一樣),就是因為硬體映射卡在這裡的結果。

變通的 XMS 、EMS 在 DOS 下也是用這對硬體映射讓 DOS 程式可以使用 1MB 以上的記憶體空間來存放 data,但程式本身還是只能在 640K 裡面 (HMA 則是利用 A20 多出來的 64KB 來放常駐程式)

而DOS 當時能定址到 1MB 是因為 DOS 的 real mode (v86 mode) 使用的 segment:offset 定址規則跟現在的 selector : offset 並不一樣。

segment 如 cs ds ss es 等等雖然也是 16 位元寬,但不是 16+16=32,而是將 cs 左移 4 位元,然後 cs+ip 變成 20 位元定址.

這就是真實模式的定址方式.


保護模式將 cs 、ds、ss 等 segment 改稱為 selector,每一個 selector 會對應一個 table,這些 table 依層級分為 GDT、LDT 跟 IDT 。每一個 table 都可映射 4GB 空間,table 中會對應由 MMS 轉換的實體記憶體位址,table 總數我有點忘了,最保守的數字是 8192 。

換句話說,如果每一個table的設定都沒有重疊,8192 x 4 GB 有多大?呵呵.

Windows 設計時,簡化了selector 跟 table,稱之為 Flat mode,但對應用程式 Process 則還多加了一個2GB的限制。這時windows又犯了跟 DOS 時代一樣的問題,XP 怎樣都吃不到4GB 空間,是因為 windows 將硬體映射不只映射到系統,還映射到每一個 Process 的定址空間裡。

這麼作好處是當你寫程式呼叫系統功能 (API 等),系統不必切換節區,效能會比較好。不過 windows 的效能從來不是卡在這種問題上 :p



以往 x86 32位元記憶體限制,主要是在北橋或記憶體控制器的實體位址線寬度,也因為 4GB 看來很大,所以 Windows 如 XP 就一直沒什麼問題,但基礎架構問題仍在,比起 DOS , XP 的 selector 幾乎沒作用,DOS 雖有節區問題,但Process程式的定址空間還是可達 1MB,但 XP 不能,因為 selector 根本跟廢了差不多。

改成 64 bits 作業系統,但概念還是一樣,或者 64 位元這恆河沙數一百年也用不到吧,就如當初覺得 32 位元 4GB 好大一樣.
Roger Shih wrote:
以往 x86 32位元記憶體限制,主要是在北橋或記憶體控制器的實體位址線寬度,也因為 4GB 看來很大,所以 Windows 如 XP 就一直沒什麼問題,但基礎架構問題仍在,比起 DOS , XP 的 selector 幾乎沒作用,DOS 雖有節區問題,但Process程式的定址空間還是可達 1MB,但 XP 不能,因為 selector 根本跟廢了差不多。

改成 64 bits 作業系統,但概念還是一樣,或者 64 位元這恆河沙數一百年也用不到吧,就如當初覺得 32 位元 4GB 好大一樣.
...(恕刪)

Roger兄,小弟覺得考古無妨,但是4GB實體記憶體在Vista跟XP SP2下無法充分利用,跟您講的Windows沒採用selector:offset模式,實在是沒什麼關係的,32-bit Linux以及MSFT自家的Server作業系統也是採用一樣的Flat Memory Model,也把selector給閹了,4GB(含)以上的實體記憶體也是運用得好好的。

至於Windows的"每個"Process"只有"4GB虛擬定址空間的問題,敢問Roger兄最近是在寫什麼程式?2GB的User space居然寫到不夠用?Office的那幾支大肥仔如Word,大約也就是佔用幾百MB而已。
  • 6
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?