![]() |
||
*停權中*
加入日期: Nov 2000 您的住址: Taipei,ROC
文章: 573
|
引用:
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 次方的數字,我就難以想像囉 ![]() |
||||||||
![]() |
![]() |
Major Member
![]() 加入日期: Aug 2005 您的住址: 新竹
文章: 156
|
引用:
看到這裡忍不住想問個笨問題,最近華碩出了一塊4G VRAM的顯示卡,請問如果這張卡插到XP 32位元(假設是SP3)的電腦(假設硬體也是最新的),會發生什麼樣的問題 ![]() |
||||
![]() |
![]() |
*停權中*
加入日期: Nov 2000 您的住址: Taipei,ROC
文章: 573
|
引用:
應該不會有問題,該處理的,在驅動程式都應該先處理好了,並不會因此佔用更多 4GB 內映射的空間。而存取卡上記憶體的作法,就跟 DOS 下顯示卡會使用 A000:0000 作為程式定址的 memory mapping 一樣,當填滿或需要換頁時,驅動程式會依情況或指定做切換。(這道理就像你用虛擬記憶體,不必管資料是放在實際記憶體的那裡,甚至是硬碟上一樣). |
|
![]() |
![]() |
*停權中*
加入日期: May 2004
文章: 2,140
|
所以說啦
其實根本不會相MS在VISTA 32裡面的說法一樣 因為要對應你實際上擁有記憶體的裝置 不然在XP SP1怎麼沒這樣的問題 在2008/2003等下面也沒這樣的問題 這是MS自己在VISTA為何一律只能用3.1GB作的說明 並且說如果你裝置的實體記憶體在更大 就會占掉更多 另外2000以後的效能就沒那麼差了 2003以後相容性也得到極大的改善了 而且2003也可以套用XP的驅動 為何不會有上面的這些問題@@ 此文章於 2009-06-16 05:28 PM 被 lompt 編輯. |
![]() |
![]() |
*停權中*
加入日期: Nov 2000 您的住址: Taipei,ROC
文章: 573
|
引用:
因為妥協,Windows 2000 雖說有部份使用 Windows NT 的架構,但抱歉,定址部份則是藉由產品分級來區隔支援性,真正支援完整定址能力的,當年你得在 Enterprice 等級才可能有,不過 windows2000 時代,CPU實際拉出的定址線寬度可能才是真正限制,而不是Flat address 的定址限制。 我只能說,32位元活的夠久了,就商業考量下,一直在 32 位元系統打轉,各方面都沒什麼好處,更別說商業利益了。 |
|
![]() |
![]() |
Major Member
![]() 加入日期: Jun 2000 您的住址: 克萊恩
文章: 275
|
引用:
這是消夜文嗎... 肚子好餓 ![]() |
|
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: May 2009
文章: 2,405
|
引用:
雖然依小弟的水平來說很多地方要再去查到底是什麼意思 ![]() 但也釐清了一些過去不完整或錯誤的觀念 非常感謝RogerShih兄的詳細說明 ![]() ![]() ![]() |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: May 2008
文章: 57
|
此文章於 2009-06-17 02:16 PM 被 stylus 編輯. |
![]() |
![]() |
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Mar 2001 您的住址: Rivia
文章: 7,036
|
引用:
當時在DOS下這些都不稀奇吧? 不少遊戲要求要有700kb的記憶體 只要是資深玩家,幾乎都會有這樣的開機片 不像現在被搞得好像天方夜譚一樣
__________________
Folding@home with GPGPU集中討論串 Unix Review: ArchLinux●Sabayon●OpenSolaris 2008.5●Ubuntu 8.10 AVs Review: GDTC●AntiVir SS●ESS●KIS 09●NIS 09●Norton 360 V3 ![]() I Always Get What I Want. |
|
![]() |
![]() |
*停權中*
加入日期: Jan 2003
文章: 494
|
DOS 後期的遊戲用 DOS/4GW ,所以也不用在搞 700K 開機片.
只剩可憐的 ET3 + CLIPPER 的開發者還在跟 640K 奮鬥. 當初的 EMS/XMS 與現在 PEA /AWE 又不太一樣, 所以只能 + - 參考一下 此文章於 2009-06-17 06:08 PM 被 syntech 編輯. |
![]() |
![]() |