![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 系統組件
(https://www.pcdvd.com.tw/forumdisplay.php?f=19)
- - 真的可以突破4G限制嗎?
(https://www.pcdvd.com.tw/showthread.php?t=856218)
|
---|
甚麼是開啟PAE? 硬體又是做了哪些動作?
講這個就要先講古代x86的保護模式. 當CPU由真實模是進入保護模式,有一個選項叫做PAE.開啟分頁.(表示你也可以不用開分頁進入保護模式) 自pentinue pro後因為有36條定指線,可以定指16G 所以當你設定開啟PAE之後要設定選項,分頁大小.4k與1MB. 選擇4K,那麼就只能定指4G的記憶體,選擇1MB可以定指16G 但是如果選擇1M做分頁大小,存取記憶體需要做硬射(類似EMS,骨董級的東西,這邊不熟,如果錯誤請告知). 這兩種的定指方式不一樣,所以為什麼一開PAE有的程式會掛掉. 至於微軟為甚麼設定32bit程式只能用2G我不知道, 依照保護模式的硬體規格,每一個程式都可以擁有完整獨立的4G程式,資料記憶空間, 能不能用完全是看作業系統怎麼寫. 小弟不才只知道這些,如有錯誤歡迎指證. -- 保護模式的定指可不是塞一個位置給佔存器就可以存取那麼簡單. |
引用:
是 64GByte 不是 16G |
引用:
是 Pentium 不是 Pentinue |
引用:
搔搔頭~~~ 閣下您不知道不代表沒有,不相信不代表事實會依閣下的思想而改變,除非閣下擁有Gease的力量!那又另當別論。 以閣下講的linux好了,麻煩請自己打開terminal輸入lspci -v,它就會很親切的告訴閣下您有那些裝置佔了那些記憶體。 windows下可以打開裝置管理員,切到依資源檢視,全部也是列的妥當,各版本windows皆通用。 linux kernel沒開high memory support 64GB照樣中獎,一樣開terminal輸入free自行檢查 引用:
不就是商業手法區隔市場嗎? MS是營利公司不是慈善事業啊。 今天總不可能要求樂麵屋的老板﹝要不然誠屋也不錯吃﹞,用碗巷口陽春麵的價格賣你一碗叉燒焦蔥豚骨拉麵吧。 劣者是不會做這種事啦,臉皮薄說不出口啊,不過有興趣的人可以去問看看肯不肯賣 :laugh: 要不然可以不要吃拉麵改吃金山南路金華街交叉口的麵店也不錯吃啊,價格便宜也填的飽肚子。 如果今天下午去宅之地下街買到便宜的柊かがみ コスプレver. 相機街買到便宜的Tokina T116的話,再回應一下為何32bit application的VM初始只能用2GB﹝不過這應該幾句話加張圖就可以結束了﹝拖稿踢飛﹞﹞。 |
引用:
感謝Kyocera兄不厭其煩的說明:ase 其實小弟之前也心理有數了 但在看完Kyocera兄的文章後不知道為什麼突然有冒出「其實問題不單純」這種想法:ase |
所以啦
說了半天 還不就是市場考量 對應哪會佔用那麼多記憶體 那個說Lin not unix會的 請問如果你有一張1G VRAM的顯卡(不考量SLI或CF) 一張512MB的RAID卡 4顆32MB緩衝的硬碟 CPU好死不死還有8MB的快取 這年頭我們就不考量有波型表的音效卡 難道你的記憶體會因此被吃掉1160MB? |
其實問一個最最基礎的問題,16位元CPU依現在一堆人用 32 位元算法,應該只能定址 64K ,為何8088、8086 可以定址640K 甚至 1MB?
Window 針對 32 位元系統的作法,是其來有自的,基本上 XP 到 Vista ,不支援 4GB 以上的最大問題點在於為了效能,單純化 32 CPU 的作業方式,把 selector 幾乎無用化。 Intel 32 位元保護模式真正可用的定址,其實過程是比較複雜的,另方面說來也就是說會減損一些效能。 我是認為當初微軟為了相容性 (DOS) 跟效能,將作業系統設計單純化是對的,不僅僅是開發比較容易,對使用者來說,也是好處遠大於壞處。 其實 32 位元活的真的是夠久了,起碼有20年 (我高三換 386 到現在20年整),比 16 位元的 8086 活的長很多,可預見的 64 位元可以活更久吧。 |
引用:
IO mapping 並不會實際吃掉記憶體,而是吃掉定址,大多情況下,也不會吃掉那麼多。 這也是為什麼 ramdisk 可以把4G內記憶體拿來作快取的原因。(例如,你系統有 4GB ,windows 裡面只看的到 3.25G ,剩下的 0.75G,Ramdisk 可以幫你抓出來使用). 2GB 節區的限制,簡單的說,是當初為了簡化系統中運作所有執行的程式有一個一致而簡單的設計來的。 雖然說這種設計不是很有遠見,當初我罵微軟將硬體映射區放在後面而非前面,�**� DOS 覆轍,不過算一算從 Windows 95 算起,到現在也快 20 年,才真正碰到當年很多人預見的問題,我覺得也算是夠了。 |
引用:
不知道能不能請教RogerShih兄可能是很基本的問題:shy: :那就是吃掉定址與記憶體的差異在哪啊? 另外是否可以稍微請RogerShih兄分析一下硬體映射區的前後差異、彼此間有怎樣的影響等等:ase 以及是否可以針對「為了簡化系統中運作所有執行的程式有一個一致而簡單的設計」這點稍微講解一下? 希望可以多學一點,懇請RogerShih兄能解惑一下:ase |
引用:
1. 如果你經歷過 DOS 時代,應該知道有些顯卡有段區域,一般是 A000:000 或 B000:0000 這兩段區域,當時很多顯卡記憶體可以超過 64K ,但你要存取顯示卡上的記憶體,如果用 IO 指令一般來說太慢,也太麻煩,所以通常是將資料寫入這之中一塊區域,將資料寫入顯卡裡。 這樣不但方便程式直接以 segment:offset 定址去存取介面卡硬體資料,透過 DMA 等硬體機制,效能也更好。 不過因為當年是真實模式,程式的定址其實就等於真實定址,你要將定址跟真正存放資料的地方分開是不太可能的,不過也還是有一些軟體可以作到,如 QEMM 就可以把 640K 外能用的空間放出來用。 保護模式下,定址不像 8088、286 真實模式那樣直接,而改以 GDT 、LDT等表格法來定址,32位元 CPU 下這些表格多達8000~16000多個,每個表格都可以定址 4GB。但這裡的定址其實是虛擬定址,還得透過一個換算機制轉成真正的實際位址。 這中間,有很多技巧,可以讓硬體佔用的實際定址讓使用者看不到,或者映射到其他地方,甚至於讓資料暫存到硬碟去,其實,虛擬記憶體管理做的,簡單說來也就這麼回事。 2. 簡化是從程式設計面來看的,當我要呼叫一個系統函式,如果我跨節區 (如 selector 內容都不同),必須跨節區呼叫,系統浪費在呼叫上的資源,包括傳遞的參數,都會佔用很多資源。 尤其是多工環境下,透過技巧可以讓所有程式共享同一份系統呼叫程式,但彼此享用的資料資源又可以不互相干擾。 這部份很複雜,嚴格說來,微軟這種設計方式我記得是稱為 Flat 定址,所有 selector 都是相同的,這樣就不必跨節區呼叫,程式好寫很多,問題也比較少。 即使是 linux ,也要看 compiler 版本來決定,不過一般寫高階程式的不太需要關心這些細節就是了,只需要了解並在必要的時候選擇編譯器、連結器版本,來決定編譯出來的系統要以什麼樣的方式運作。 windows 的話,也就只能選擇 Server 產品了。 |
所有的時間均為GMT +8。 現在的時間是06:50 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。