kisaraki88 wrote:
以前 DOS 時代,只能定址到 1MB,
但有個古老東西叫做 EMS,當時算是新花樣,
運用 paging 的概念,可以使用到超過 1MB 的位址。
因此結論,DOS 可以定址超過 1MB?
...(恕刪)
不是paging耶!那個是bank switching,是一個從電腦被發明到今天都還在被使用的技巧,比memory paging歷史還久。EMS記憶體不管有多少,都得被切成若干64KB的bank,而後map到位於那1MB位址內的一個64KB的window內,因此同時間能被存取的就是64KB,然後就要再切換bank,這跟memory paging方式是不一樣的。
當然XMS就是線性存取了,不過跟EMS同樣只能存放資料,因此就您的問題而論,不能用來執行程式的記憶體,就沒有解決當時造成程式大小嚴重受到限制的1MB空間問題。
大約同期出現的UMB、HMA則都可以放程式,所以對於有提供A20位址線的處理器,您的確也可以說DOS真正可以拿來放程式碼的空間是1MB+64KB-16byte=~1088KB,這是個美麗的錯誤。但是也不會因為有A0...A20的21條位址線,能定址空間就變成2^21=2MB....
kisaraki88 wrote:
亂入一下。
以前 DOS 時代,只能定址到 1MB,
但有個古老東西叫做 EMS,當時算是新花樣,
運用 paging 的概念,可以使用到超過 1MB 的位址。
因此結論,DOS 可以定址超過 1MB?
在本討論串中, 個人覺得應該改成這樣問才對, DOS 可以定址1MB, 所以DOS是20位元的位業系統嗎?
OK, 反串完了.
這樣問的話, 還有人認為32bit OS是祇能管理到4GB memory嗎?
於是可以管理到8GB memory的OS就叫做33 bit OS嗎? 哇勒, MS 的OS 產品線拉的還真長啊.
今天MS可以告訴我, 他的產品線要把server & normal user 靠可被OS管理的 memory 數分出來, 那是他家的事, 啟動PAE後會不會因為 driver 的關係而不穩定那則是另一回事, 但是召告天下說 32 bit OS 卡死在 4GB memory, 那就是鬼扯蛋了.
32 bit OS 和 32bit address length 是兩碼子事. 那16 bit OS可以管到1MB memory range是見到鬼了嗎?
最後我用個笑話來總結一下.
台灣某飛日本的旅行團,團員清一色阿公阿媽
...............................................................
登機時,阿公阿媽一看到商務艙比較豪華就往前鑽, 坐商務艙的旅客請他們起來時
他們竟說:「 這是博愛座啦,少年去坐後面 。」
連服務員也沒辦法,於是班機就延誤了。
在後面的另一團導遊等得不耐煩了 於是上前察探,在明白情況後就說:「早說嘛,這我有經驗,看我的。」
只見那導遊上前去,大聲向那群阿公阿媽說: 「阿公阿媽!這頭前是要飛美國的啦,飛日本要坐後面啦。」
於是一大群阿公阿媽慌慌張張爬起來衝到後面去......
MS告訴你32bit OS有4GB memory限制噢....啊你就相信了啊.......上面的笑話好不好笑?!
etlink wrote:
看了大家的討論真的很專業
但小的想問一個很基本的問題
因為本身小弟不是走這行的
請大家告知
小弟也不是資訊類科系的,只是玩電腦玩太久。有去修些資工的 OS,以及本科系的計組也修過這樣而已。回答不一定是正確的。
etlink wrote:
如果一個32bit的OS如果不包括啥PAE的技術和Ramdisk的話
理論上是可以支援到多少Ram??
不能單看 OS ,還要看 CPU。OS 的設計必須完全迎合 CPU 所能支援的去設計。
記憶體定址一般是一 個byte 一個位置,所以若是 CPU 設計上可以用 32bit 定址的話
就有 2^32 Byte = 4GByte。但 32bit CPU 不代表他可以用 32bit 做定址,完全看 CPU arch 的設計,這只是比較常見的狀況。
當然若不是一個 byte 一個 byte 定址,而是 4個 byte 4個 byte 定址,容量就變成 16 GByte 啦。不過這種設計並不普遍,在個人電腦應該沒出現過,因為4個 byte 定址很浪費記憶體空間(若你只需要 1byte 的數值精度,還是需要 4 byte 儲存)。或是必須犧牲效能或增加價格來充分利用記憶體位置(讀出 4byte 後,再切割出 1個1個byte,用硬體做就是增加價格,用軟體做就是犧牲效能)
Ramdisk 不是用來延伸支援 ram 容量的,只是把部分記憶體拿來當磁碟直接儲存資料用罷了。之所以現在很多人使用 ramdisk 來利用多餘的記憶體,是因為 windows XP 無法拿那些空間來運行程式,但卻可透過 driver 當作磁碟使用。
你說不包含 PAE 技術,但也許還有很多種方式可以延伸記憶體的定址空間。只是不同名稱罷了。比如說 8051 有 register bank ,那同樣的也可能會有 memory bank來延伸空間。上面說 OS 完全是迎合 CPU設計,但是事實上 CPU 就算沒有延伸記憶體空間的支援,也可以透過額外的硬體再加上 OS 的配合來做延伸,絕對是辦得到的。
etlink wrote:
還有就是會有什麼一般的軟體會在32bit系統用到4G以上的Ram?
是真的用到的....不是感覺上....
因為我自己覺得
家用跟一般商用
好像也都用不到那麼大的Ram
即使是PS 3G的Ram好像也不慢
還是說Ram越大
系統真的跑越快?
所以便宜就應該要多裝一點?
並不會越多就越快。就像你有十台車,你家只有四個人,一次只能開一台一樣,多餘的根本沒有用。不會因為你多了一台車你就早點到目的地。記憶體很單純是 CPU 運算時,用來存程式、存資料的。現行電腦設計都是必須把程式載入記憶體才執行,並非直接從硬碟抓到 CPU 就運行的。程式運作時也有很多暫存資料,也都是存在記憶體中,有必要存下來的才會回寫到硬碟裡,因為硬碟時在比記憶體慢太多了。
所以,多出來的記憶體要幹嘛,放在那邊涼快。當然很多 OS 會把記憶體拿來做 cache 或 buffer,有一點加速硬碟存取的效果,但是過多的話意義也不大,把硬碟換更快的比較實在。
用到 4G 以上?大型資料庫,或是編輯影片,跑 photoshop 修大量的大圖。你就會用到啦。
上面有說程式必須載入到記憶體中才能執行吧,但為何就算你只有 128 MB 的記憶體,一樣可以開一堆程式跑,而且甚至超越 128mb 非常多。以現今大多數 OS 為例,都會拿硬碟當作置換區。當某些程式目前不需要跑的時候,就會把這些程式所用的記憶體區段丟到硬碟暫時存放,然後就空出部分空間來給其他軟體運作。當暫存在硬碟的記憶體區段又需要使用時,又會跟記憶體中其他不需要的區段做交換,把要跑得丟到記憶體中,不要跑的暫存到硬碟中。這樣當然可以用硬碟來延伸記憶體空間,但由於硬碟比起記憶體是非常緩慢的,這樣的交換動作當然也是非常緩慢的,讓效能整個拖垮。因此若記憶體不充足的話,就會覺得非常非常的慢。
這個機制在 windows 中稱這個為虛擬記憶體( virtual memory), 在 unix 中一般稱做 swap 。
內文搜尋

X