Elite Member
|
抓不全4GB的問題..
我想我引用我在gamebase回的..
不再重打了(累死了..!!)
==========以下是我在Gamebase回的內容==========
4GB在32bits是完全不能使用到(指App部份)..
而且那多餘的空間是在高位址部份..
App是完全吃不到的...
Intel想出來的那個怪招是利用4GB以上的高位址..
轉換到MMIO的部份..
也就是一般提的Remapping..
但是我認為要用到那MMIO浪費掉的空間依然還是需要AWE API的請求..
因為轉換到的4GB~5GB空間..
那塊32位元系統是吃不到的..
一般OS規劃是Dual Mode設計...
這種是一種有助於定址保護的設計方式..
現今的系統大多都是這樣..
為了方便閣下清楚,我總結幾句:
1.一般作業系統的設計是Dual-Mode,分成Kernel Mode和User Mode,中間有一個System Call去做交換..
2.微軟的作業系統的設計是高位空間被Kernel Mode占用,Default最大是2GB,如果您是使用4GB系統會是2GB/2GB的比例規劃
3.使用/3GB參數可以讓User Mode定指空間擴展..變成3GB/1GB的情況..
4.一般App(也就是應用程式)是完全吃不到Kernel Mode那塊,不要想太多,那是Dual Mode所帶來的限制..
5.使用Remapping技術可以將MMIO也就是那塊在高位的空間利用4GB~5GB之間的更高位址進行重定址變換..
6.雖然透過Remapping後,可以取得MMIO的空間,但是因為他是利用4GB以上的高位進行轉換,一般微軟32位元系統還是吃不到那塊,根據微軟的建議,需要請求AWE API,這意味著應用程式必須要能夠支援(這是開發人員要負責的事),例如像SQL Server就可以支援AWE API..
7.這是可以去評估的,但需要一些知識和技能(最起碼您需要知道甚麼叫16進位制),您可以使用Meminfo工具,下meminfo -r指令,再搭配裝置管理員(Device Manager)的IO占用情況去評估...
8.testlimit工具可以快速讓你知道Kernel Mode和User Mode的記憶體分佈比例...
9.更換64位元系統可以解決這些情況,因為Kernel Mode所占用的位址被調高,但是User Mode和Kernel Mode的虛擬定址依然帶來了限制,4GB/4GB..
10.這邊我舉幾個例子:
(1).例如您開了一些應用程式,例如Game或著Office之類的軟體,他們主要分佈會是在User Mode,如果要求到Kernel Mode(例如一些特殊的敏感資訊)會應用一個System Call去溝通
(2).IIS 6.0的最佳例子,對於ASP.NET程式來說,當您對aspx網頁進行請求,對伺服器來說會創造一個Application(如果Pool有就直接拿來用),這之間的過程是,您對網頁的請求是一個Request,IIS為了確認您的請求和請求種類(靜態或著非靜態),在6.0版本是由http.sys原件進行監控(http.sys之間都是由Kernel Mode負責),當確認是aspx網頁的要求後,會創造一個w3wp.exe的process去對應這個request(這之後是一個建立好的CLR環境,屬於Managed Code..),對於這種您一般在要求的情況下,他是一個User Mode所配置的空間,這邊只是說明Kernel Mode的目的是為了防止非法的操作,因為通常情況下是無法對他做任何操作..
第二個例子看不懂的話,可以不必理會,因為他需要具備一些.NET的知識
-----------------------------------------------------
以上就這些了..
不只是樓主..
希望各位能夠了解..
如果早已知道這些的..
就當我隨便說說就好..
謝謝惠顧..
|