PCDVD數位科技討論區

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)

RogerShih 2009-06-16 03:35 AM

引用:
作者ProtoZohar
不知道能不能請教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。但這裡的定址其實是虛擬定址,還得透過一個換算機制轉成真正的實際位址。

這中間,有很多技巧,可以讓硬體佔用的實際定址讓使用者看不到,或者映射到其他地方,甚至於讓資料暫存到硬碟去,其實,虛擬記憶體管理做的,簡單說來也就這麼回事。

之所以要讓硬體佔用4GB內的定址,其中最主要的原因,就是為了效能。

以前 windows NT 效能遠比 window98 XP 差,主要原因除了他的各種保護機制比較多,他的記憶體定址管理設計,跟 XP 是不太一樣的,NT 定址能力遠比 98 XP 等要來的完整許多,但效能也比較不如XP,這也是原因之一。如以 Intel 當初設計 386 的理念來看,Windows NT 比較符合,而不是 XP。




2. 簡化是從程式設計面來看的,當我要呼叫一個系統函式,如果我跨節區 (如 selector 內容都不同),必須跨節區呼叫,系統浪費在呼叫上的資源,包括傳遞的參數,都會佔用很多資源。

尤其是多工環境下,如果你每個呼叫都要跨節區,浪費時間資源在重重的位址換算上,那效能是不可能好到哪去的。XP 透過技巧可以讓所有程式共享同一份系統呼叫程式,但彼此享用的資料資源又可以不互相干擾,是在當時比較好的選擇。

其實想想,這種理念雖然說犧牲了 32位元 CPU 本身其實已經夠龐大的定址空間,但是會想看看它也經歷了10年的考驗。

這種設計方式我記得是稱為 Flat 定址,所有 selector 都是相同的,這樣就不必跨節區呼叫,程式好寫很多,問題也比較少。

其實這樣設計,也經歷了十多年了,現在會推 64 位元,其實也是在 Flat 定址上更進一步,32 位元 4GB 定址,程式只能用2GB到現在,也是過了10多年才不夠用,64位元即使以 Flat 定址來看,每個程式可以定址的空間,是 4GB 的 32 平方倍,以個人電腦而言,我是很難想像我有生知年 64 位元定址會不夠一隻程式用 XD

即使有其他寫程式的就是那麼變態,只不過 4GB 定址還能想像,2^64 次方的數字,我就難以想像囉:p

IL-2 2009-06-16 01:48 PM

引用:
作者ProtoZohar
引用:
作者RogerShih
IO mapping 並不會實際吃掉記憶體,而是吃掉定址,大多情況下,也不會吃掉那麼多。

這也是為什麼 ramdisk 可以把4G內記憶體拿來作快取的原因。(例如,你系統有 4GB ,windows 裡面只看的到 3.25G ,剩下的 0.75G,Ramdisk 可以幫你抓出來使用).

2GB 節區的限制,簡單的說,是當初為了簡化系統中運作所有執行的程式有一個一致而簡單的設計來的。

雖然說這種設計不是很有遠見,當初我罵微軟將硬體映射區放在後面而非前面,�**� DOS 覆轍,不過算一算從 Windows 95 算起,到現在也快 20 年,才真正碰到當年很多人預見的問題,我覺得也算是夠了。

不知道能不能請教RogerShih兄可能是很基本的問題:shy: :那就是吃掉定址與記憶體的差異在哪啊?

另外是否可以稍微請RogerShih兄分析一下硬體映射區的前後差異、彼此間有怎樣的影響等等:ase

以及是否可以針對「為了簡化系統中運作所有執行的程式有一個一致而簡單的設計」這點稍微講解一下?

希望可以多學一點,懇請RogerShih兄能解惑一下:ase


看到這裡忍不住想問個笨問題,最近華碩出了一塊4G VRAM的顯示卡,請問如果這張卡插到XP 32位元(假設是SP3)的電腦(假設硬體也是最新的),會發生什麼樣的問題 :confused:

RogerShih 2009-06-16 04:57 PM

引用:
作者IL-2
看到這裡忍不住想問個笨問題,最近華碩出了一塊4G VRAM的顯示卡,請問如果這張卡插到XP 32位元(假設是SP3)的電腦(假設硬體也是最新的),會發生什麼樣的問題 :confused:


應該不會有問題,該處理的,在驅動程式都應該先處理好了,並不會因此佔用更多 4GB 內映射的空間。而存取卡上記憶體的作法,就跟 DOS 下顯示卡會使用 A000:0000 作為程式定址的 memory mapping 一樣,當填滿或需要換頁時,驅動程式會依情況或指定做切換。(這道理就像你用虛擬記憶體,不必管資料是放在實際記憶體的那裡,甚至是硬碟上一樣).

lompt 2009-06-16 05:19 PM

所以說啦
其實根本不會相MS在VISTA 32裡面的說法一樣
因為要對應你實際上擁有記憶體的裝置
不然在XP SP1怎麼沒這樣的問題
在2008/2003等下面也沒這樣的問題
這是MS自己在VISTA為何一律只能用3.1GB作的說明
並且說如果你裝置的實體記憶體在更大
就會占掉更多

另外2000以後的效能就沒那麼差了
2003以後相容性也得到極大的改善了
而且2003也可以套用XP的驅動
為何不會有上面的這些問題@@

RogerShih 2009-06-17 02:17 AM

引用:
作者lompt
所以說啦
其實根本不會相MS在VISTA 32裡面的說法一樣
因為要對應你實際上擁有記憶體的裝置
不然在XP SP1怎麼沒這樣的問題
在2008/2003等下面也沒這樣的問題
這是MS自己在VISTA為何一律只能用3.1GB作的說明
並且說如果你裝置的實體記憶體在更大
就會占掉更多

另外2000以後的效能就沒那麼差了
2003以後相容性也得到極大的改善了
而且2003也可以套用XP的驅動
為何不會有上面的這些問題@@


因為妥協,Windows 2000 雖說有部份使用 Windows NT 的架構,但抱歉,定址部份則是藉由產品分級來區隔支援性,真正支援完整定址能力的,當年你得在 Enterprice 等級才可能有,不過 windows2000 時代,CPU實際拉出的定址線寬度可能才是真正限制,而不是Flat address 的定址限制。


我只能說,32位元活的夠久了,就商業考量下,一直在 32 位元系統打轉,各方面都沒什麼好處,更別說商業利益了。

Raistlin 2009-06-17 04:18 AM

引用:
作者Kyocera
今天總不可能要求樂麵屋的老板﹝要不然誠屋也不錯吃﹞,用碗巷口陽春麵的價格賣你一碗叉燒焦蔥豚骨拉麵吧。
劣者是不會做這種事啦,臉皮薄說不出口啊,不過有興趣的人可以去問看看肯不肯賣 :laugh:
要不然可以不要吃拉麵改吃金山南路金華街交叉口的麵店也不錯吃啊,價格便宜也填的飽肚子。


這是消夜文嗎... 肚子好餓 :cry:

ProtoZohar 2009-06-17 04:25 AM

引用:
作者RogerShih
1. 如果你經歷過 DOS 時代,應該知道有些顯卡有段區域,一般是 A000:000 或 B000:0000 這兩段區域,當時很多顯卡記憶體可以超過 64K ,但你要存取顯示卡上的記憶體,如果用 IO 指令一般來說太慢,也太麻煩,所以通常是將資料寫入這之中一塊區域,將資料寫入顯卡裡。

這樣不但方便程式直接以 segment : offset 定址去存取介面卡硬體資料,透過 DMA 等硬體機制,效能也更好...

雖然依小弟的水平來說很多地方要再去查到底是什麼意思:ase.......

但也釐清了一些過去不完整或錯誤的觀念

非常感謝RogerShih兄的詳細說明 :like: :like: :like:

stylus 2009-06-17 02:13 PM

如果對DOS時代如何突破640KB有興趣
可以去找一些侯俊傑(侯捷)的書來看
不過大概都絕版了, 只能去圖書館找吧!

虛擬記憶體:觀念、設計與實作
PC記憶體管理與多工
都是旗標的書啦!

野口隆史 2009-06-17 04:10 PM

引用:
作者stylus
如果對DOS時代如何突破640KB有興趣
可以去找一些侯俊傑(侯捷)的書來看
不過大概都絕版了, 只能去圖書館找吧!

虛擬記憶體:觀念、設計與實作 (http://jjhou.csdn.net/jjwbooks-f306.htm)
PC記憶體管理與多工 (http://jjhou.csdn.net/jjwbooks-f307.htm)
都是旗標的書啦!

當時在DOS下這些都不稀奇吧?
不少遊戲要求要有700kb的記憶體
只要是資深玩家,幾乎都會有這樣的開機片
不像現在被搞得好像天方夜譚一樣

syntech 2009-06-17 06:06 PM

DOS 後期的遊戲用 DOS/4GW ,所以也不用在搞 700K 開機片.

只剩可憐的 ET3 + CLIPPER 的開發者還在跟 640K 奮鬥.


當初的 EMS/XMS 與現在 PEA /AWE 又不太一樣,
所以只能 + - 參考一下


所有的時間均為GMT +8。 現在的時間是07:09 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。