※ 引述《gerrychou.bbs@cis.nctu.edu.tw (wtchou)》之銘言:
: 不過原文所要求的 c000 也許他並不是指 selector
: 他也許就是指 physical address, c000
: (我再抓個小小問題, 他本來就不是說要 c000 這個 selector)
: 這的確是實際的問題,
: 例如, 一塊界面卡, 佔用了實體位址,
: 那在驅動程式也應該要能對應的到;
: 然而, 應用程式即使對應的到(邏輯位址->實體位址),
: 也不一定有權去存取;
對不起,吐個嘈:
老兄文章裡面用了兩個「也許」,可見是用猜的,不過我不用猜的,
我模擬一下:
1.
原作者說他要在WINDOW下使用EMS記憶體,首先EMS記憶體在DOS下
早就使用XMS來模擬了,所以他要指向的記憶體怎麼可能
在某一塊介面卡上呢?現在誰家裡還有正在使用的EMS卡嗎?
2. 原作者說,他指向c000:0000為什麼會發生記憶體存取錯誤?
很明顯的,他正在模仿DOS下的方式,要直接將指標指向EMS的頁對應框。
而且他的主要疑問是「為什麼這樣會產生page fault?」
3. 他之所以這樣問,就是因為他還不懂WINDOW的記憶體管理方式,
任何新手都有可能會犯下這個錯誤,包括將指標指向A000:0000企圖
直接記憶體存取。
4. 我回答他WINDOW不認識c000這個selector,主要是提醒他,
WINDOW的記憶體管理與DOS不同,並且WINDOW下也不使用EMS
這種古老的管理方式。
5. 另一外網友回應「c segment」,沒錯,是「c segment」,
但既然原作者是在WINDOW下做這件事情,所以我必須
說那是一個選擇子,不是一個段位址。
6. 然後兄台就把我吐個嘈,後來......就這樣了,大家要怎麼猜對方
的想法我管不著,我只就我所知回應別人。就這樣啦,如果還有什麼
BUG,請自行想像吧。
7. 結論:
回應別人的文章,首先就是要瞭解對方遇到的狀況,以及對方的想法,
如果不清楚對方問題所在,那最好不要回應。當然有很多白爛問問題都是
隨時問,隨便問,不停問(引字理財聖經),這樣別人只好隨時答,隨便
答,唬爛答,乾脆不答。
從中間參與討論者,看到的文章可能是斷剪殘篇,不清楚當初最原始
的問題所在,然後開始插一腳。實際上我們應該回頭看看最先提出的
那篇文章才對。 以免自己耍白爛還不自知。
8. 好啦,開開玩笑罷了,大家不要介意。偶爾來點生活調劑也不錯^_^
--
DirectX 程式設計
http://student.thu.edu.tw/~s845235
--
※ Origin: 程式設計樂園 ◆ From: tsa27.thu.edu.tw