作者littleshan (我要加入劍道社!)
看板ask-why
標題Re: [請益] 用軟體測試RAM是否有沒有毀損的原理是??
時間Sat Nov 14 07:44:37 2009
※ 引述《sitos (麥子)》之銘言:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.84
1F:→ HuangJC:C under OS 是不行;但 C 本身倒不會不行,要換 compiler.. 11/14 01:31
2F:推 jphant:我也是這樣想所以才會問要怎麼去寫這個程式... 11/14 02:40
3F:→ jphant:要換成甚麼compiler才可以直接access RAM的物理位置? 11/14 02:42
和 compiler 沒有關係
重點在於你的程式要能夠安裝在開機磁區 或是做成開機光碟之類的
讓 BIOS 去呼叫你的程式
然後要自行進入 protected mode 以存取整塊記憶體空間
相當於自己寫一個小型的 OS
4F:推 HuangJC:下一篇有提到,OS cache 你可以避過但 H/W cache 卻不好避 11/14 02:48
5F:→ HuangJC:所以不只換 Compiler,還得懂硬體配置;那已經相當於寫組合 11/14 02:48
6F:→ HuangJC:語言了;用 C 不會省你多少事 11/14 02:51
因為這支測試程式本身就是個小型的 OS
所以沒有所謂 OS cache 的問題
hardware cache 可以用下篇文章講的方式去避免它的影響
而且它本身其實是可以關閉的
關不掉的是 memory buffer
7F:推 jphant:所以如果是這樣說 像樓上po的那些用C寫一個迴圈去一個bit 11/14 05:13
8F:→ jphant:一個bit去跑的solution 還算是solution麼? 11/14 05:14
算是不好的 solution
可能偵測不到某些錯誤這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.108
9F:→ HuangJC:因為這種程式早就存在了,所以我假設原PO不是想要公認最省 11/14 11:05
10F:→ HuangJC:事的做法,而是類似學習,挑戰.如果以這點出發,又對C情有獨 11/14 11:06
11F:→ HuangJC:衷,那說實話,不見得要寫OS;就是盡其所能搞懂關鍵就對了 11/14 11:07
12F:→ HuangJC:以我只熟C不熟組合語言來說,約略可理解這種情懷.. 11/14 11:08
13F:推 sitos:我不太確定純 C 不加 asm 是否可能做到,我認為是不行。 11/14 13:46
14F:→ sitos:應該需要某些 machine-dependent 的動作 C 是不支援的。 11/14 13:46
15F:推 HuangJC:unix-like os 就是用 C 寫的,但又避不了組合語言,人家還是 11/14 13:56
16F:→ HuangJC:盡可能的用C提高可攜性,可讀性;混入 asm 的部份可以用最有 11/14 13:57
17F:→ HuangJC:'效率'的方式去寫(我想那不是執行效率),老實說已經讓我這 11/14 13:57
18F:→ HuangJC:種人很滿足了.我寫單晶片都用C.. machine-dependent 有就 11/14 13:58
19F:→ HuangJC:有吧..但C已經用順手了;當然我的程式效率不會太好. 11/14 13:59
20F:→ HuangJC:compiler 要換用 real mode 版本的,比如 VC 1.5版 11/14 14:00
21F:→ littleshan:你要測整個 physical memory 怎麼可能會用 real mode 11/14 18:19
22F:→ littleshan:real mode 只能定址到 1MB,不可能讓你測完全部 11/14 18:23
23F:推 HuangJC:沒錯,既然你知道這個,那知道 DPMI 吧! 簡單說,重點仍然在 11/15 01:35
24F:→ HuangJC:直接物理定址,而不在一定要佔用 BOOT 時機;但我不否認BOOT 11/15 01:35
25F:→ HuangJC:時很容易直接存取物理位址.如果我利用任何外部硬體,比如 11/15 01:36
26F:→ HuangJC:DMA,而不用 CPU..只要我存取到某物理位址就好了;那我又可 11/15 01:37
27F:→ HuangJC:以同時測試 0x10001,0x20001,x030001 的位址(舉例),為什麼 11/15 01:38
28F:→ HuangJC:呢?因為CPU一次出現一個位址沒錯,但不代表分開的RAM顆粒也 11/15 01:38
29F:→ HuangJC:必需輪流測..利用外部DMA我就可能玩出這把戲..記憶體刷新 11/15 01:39
30F:→ HuangJC:就有玩過這招..;我沒說目前的電腦是這樣,一切看硬體到底怎 11/15 01:40
31F:→ HuangJC:麼佈線. 11/15 01:40
32F:推 HuangJC:所謂 real mode 版本 compiler 是指 loader 部份,接下來就 11/15 01:49
33F:→ HuangJC:和你講的自行進入 protected mode 是一樣的;我們講同件事 11/15 01:50
34F:→ littleshan:loader 是 OS 在做的,和 compiler 有什麼關係? 11/15 13:00
35F:→ littleshan:現在一般的 PC 幾乎沒人在用 dos 之類的 real mode OS 11/15 13:03
36F:推 HuangJC:一般基礎 RD 的確不知道其關係,但如果去翻查 data sheet就 11/15 18:00
37F:→ HuangJC:有,否則 C 是無法用來寫 OS 的 11/15 18:00
38F:推 HuangJC:現在整合化 compiler 不去探討 c compile to asm 這塊,但 11/15 18:04
39F:→ HuangJC:一開始先是有這種東西,所以有些不全的資訊事實上是 asm 本 11/15 18:04
40F:→ HuangJC:身的基礎.因此我也會同意'C做不到'的講法,因為根本要對asm 11/15 18:05
41F:→ HuangJC:很熟,C是當成'產生 asm'的工具;那怎麼還有人致力於用 c 寫 11/15 18:05
42F:→ HuangJC:OS 呢?挺沒效率的.大概大家早就猜測電腦遲早夠快不去計較 11/15 18:06
43F:→ HuangJC:倒是弄一堆工具再改用 C來寫(為了可攜性?)就成為另一個重 11/15 18:07
44F:→ HuangJC:點.的確 unix like 的 OS可以移植,應該是挺有收獲的.. 11/15 18:07
45F:→ HuangJC:C compiler 可以置換一些 obj 以達到配合不同 loader的效 11/15 18:09
46F:→ HuangJC:果,但除了寫 driver,常駐程式 這種人之外,沒事不必熟這塊 11/15 18:09
47F:→ HuangJC:所以我們平常也不能 compile 出 driver 來.. 11/15 18:10
48F:→ littleshan:別扯開話題,memtest 之類的程式用一般的 gcc 就可以編 11/15 20:14
49F:→ littleshan:我不認為你一定要用 VC 1.5 才能編出這種程式 11/15 20:14
50F:→ littleshan:更何況 就算你用 VC1.5 你還是要編成 32bit 程式 11/15 20:15
51F:→ littleshan: 不然根本無法定址 11/15 20:15
52F:推 HuangJC:你說的對,你回頭看我說的是'比如VC1.5',而不是'一定要' 11/15 20:23
53F:→ HuangJC:基本上一個會自己思考的人,我們給建議不管有多少漏洞,他會 11/15 20:23
54F:→ HuangJC:自己補完.所以VC1.5能不能用?如果不補完我也懶得教了.. 11/15 20:23
55F:→ HuangJC:那為什麼我要扯去 1.5版呢?因為它和時下搞 DLL 之類的無關 11/15 20:24
56F:→ HuangJC:只是很快讓人知道有不同的東西可運用.但要補完的還很多.. 11/15 20:25
57F:→ HuangJC:不過你討論的態度實在不錯,值得推一下;不會因為沒補完的部 11/15 20:27
58F:→ HuangJC:份沒講完,且自己有正確的一整套,就直接說別人全錯了 :) 11/15 20:27
59F:→ HuangJC:你那一整套都是對的,先確認;我只是在談'想學習'的心態.. 11/15 20:27
60F:→ HuangJC:所以,我一個熟C的人,該如何一點一滴探索過來呢? 11/15 20:28
61F:→ HuangJC:既然你講gcc,我之前想到的是,碰 linux 吧,它完全公開.. 11/15 20:29
62F:→ HuangJC:學這一段不會被微軟絆手絆腳的.. 11/15 20:29
63F:→ HuangJC:'如何用C做到絕對物理定址',若這樣描述,問題就快速轉到必 11/15 20:31
64F:→ HuangJC:需學習硬體相關的知識,搞懂 cache怎麼關閉,搞懂暫存器,旗 11/15 20:31
65F:→ HuangJC:標如何設定. 11/15 20:31
66F:→ HuangJC:DPMI 就是以前 DOS 時代但又想存取32位元位址發展出來的 11/15 20:33
67F:→ HuangJC:簡單說,它不能把程式放上去執行;但能把資料放上去存取.. 11/15 20:33
68F:→ HuangJC:它的運作原理是CPU在真實/保護模式間快速切換..很詭異 11/15 20:34
69F:→ Cayman1021:bootloader on MDR ? 11/22 15:44