Re: [請益] 用軟體測試RAM是否有沒有毀損的原理是??

看板ask-why作者 (我要加入劍道社!)時間16年前 (2009/11/14 07:44), 編輯推噓7(7054)
留言61則, 4人參與, 最新討論串4/4 (看更多)
※ 引述《sitos (麥子)》之銘言: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.84

11/14 01:31,
C under OS 是不行;但 C 本身倒不會不行,要換 compiler..
11/14 01:31

11/14 02:40,
我也是這樣想所以才會問要怎麼去寫這個程式...
11/14 02:40

11/14 02:42,
要換成甚麼compiler才可以直接access RAM的物理位置?
11/14 02:42
和 compiler 沒有關係 重點在於你的程式要能夠安裝在開機磁區 或是做成開機光碟之類的 讓 BIOS 去呼叫你的程式 然後要自行進入 protected mode 以存取整塊記憶體空間 相當於自己寫一個小型的 OS

11/14 02:48,
下一篇有提到,OS cache 你可以避過但 H/W cache 卻不好避
11/14 02:48

11/14 02:48,
所以不只換 Compiler,還得懂硬體配置;那已經相當於寫組合
11/14 02:48

11/14 02:51,
語言了;用 C 不會省你多少事
11/14 02:51
因為這支測試程式本身就是個小型的 OS 所以沒有所謂 OS cache 的問題 hardware cache 可以用下篇文章講的方式去避免它的影響 而且它本身其實是可以關閉的 關不掉的是 memory buffer

11/14 05:13,
所以如果是這樣說 像樓上po的那些用C寫一個迴圈去一個bit
11/14 05:13

11/14 05:14,
一個bit去跑的solution 還算是solution麼?
11/14 05:14
算是不好的 solution 可能偵測不到某些錯誤這樣 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.108

11/14 11:05, , 1F
因為這種程式早就存在了,所以我假設原PO不是想要公認最省
11/14 11:05, 1F

11/14 11:06, , 2F
事的做法,而是類似學習,挑戰.如果以這點出發,又對C情有獨
11/14 11:06, 2F

11/14 11:07, , 3F
衷,那說實話,不見得要寫OS;就是盡其所能搞懂關鍵就對了
11/14 11:07, 3F

11/14 11:08, , 4F
以我只熟C不熟組合語言來說,約略可理解這種情懷..
11/14 11:08, 4F

11/14 13:46, , 5F
我不太確定純 C 不加 asm 是否可能做到,我認為是不行。
11/14 13:46, 5F

11/14 13:46, , 6F
應該需要某些 machine-dependent 的動作 C 是不支援的。
11/14 13:46, 6F

11/14 13:56, , 7F
unix-like os 就是用 C 寫的,但又避不了組合語言,人家還是
11/14 13:56, 7F

11/14 13:57, , 8F
盡可能的用C提高可攜性,可讀性;混入 asm 的部份可以用最有
11/14 13:57, 8F

11/14 13:57, , 9F
'效率'的方式去寫(我想那不是執行效率),老實說已經讓我這
11/14 13:57, 9F

11/14 13:58, , 10F
種人很滿足了.我寫單晶片都用C.. machine-dependent 有就
11/14 13:58, 10F

11/14 13:59, , 11F
有吧..但C已經用順手了;當然我的程式效率不會太好.
11/14 13:59, 11F

11/14 14:00, , 12F
compiler 要換用 real mode 版本的,比如 VC 1.5版
11/14 14:00, 12F

11/14 18:19, , 13F
你要測整個 physical memory 怎麼可能會用 real mode
11/14 18:19, 13F

11/14 18:23, , 14F
real mode 只能定址到 1MB,不可能讓你測完全部
11/14 18:23, 14F

11/15 01:35, , 15F
沒錯,既然你知道這個,那知道 DPMI 吧! 簡單說,重點仍然在
11/15 01:35, 15F

11/15 01:35, , 16F
直接物理定址,而不在一定要佔用 BOOT 時機;但我不否認BOOT
11/15 01:35, 16F

11/15 01:36, , 17F
時很容易直接存取物理位址.如果我利用任何外部硬體,比如
11/15 01:36, 17F

11/15 01:37, , 18F
DMA,而不用 CPU..只要我存取到某物理位址就好了;那我又可
11/15 01:37, 18F

11/15 01:38, , 19F
以同時測試 0x10001,0x20001,x030001 的位址(舉例),為什麼
11/15 01:38, 19F

11/15 01:38, , 20F
呢?因為CPU一次出現一個位址沒錯,但不代表分開的RAM顆粒也
11/15 01:38, 20F

11/15 01:39, , 21F
必需輪流測..利用外部DMA我就可能玩出這把戲..記憶體刷新
11/15 01:39, 21F

11/15 01:40, , 22F
就有玩過這招..;我沒說目前的電腦是這樣,一切看硬體到底怎
11/15 01:40, 22F

11/15 01:40, , 23F
麼佈線.
11/15 01:40, 23F

11/15 01:49, , 24F
所謂 real mode 版本 compiler 是指 loader 部份,接下來就
11/15 01:49, 24F

11/15 01:50, , 25F
和你講的自行進入 protected mode 是一樣的;我們講同件事
11/15 01:50, 25F

11/15 13:00, , 26F
loader 是 OS 在做的,和 compiler 有什麼關係?
11/15 13:00, 26F

11/15 13:03, , 27F
現在一般的 PC 幾乎沒人在用 dos 之類的 real mode OS
11/15 13:03, 27F

11/15 18:00, , 28F
一般基礎 RD 的確不知道其關係,但如果去翻查 data sheet就
11/15 18:00, 28F

11/15 18:00, , 29F
有,否則 C 是無法用來寫 OS 的
11/15 18:00, 29F

11/15 18:04, , 30F
現在整合化 compiler 不去探討 c compile to asm 這塊,但
11/15 18:04, 30F

11/15 18:04, , 31F
一開始先是有這種東西,所以有些不全的資訊事實上是 asm 本
11/15 18:04, 31F

11/15 18:05, , 32F
身的基礎.因此我也會同意'C做不到'的講法,因為根本要對asm
11/15 18:05, 32F

11/15 18:05, , 33F
很熟,C是當成'產生 asm'的工具;那怎麼還有人致力於用 c 寫
11/15 18:05, 33F

11/15 18:06, , 34F
OS 呢?挺沒效率的.大概大家早就猜測電腦遲早夠快不去計較
11/15 18:06, 34F

11/15 18:07, , 35F
倒是弄一堆工具再改用 C來寫(為了可攜性?)就成為另一個重
11/15 18:07, 35F

11/15 18:07, , 36F
點.的確 unix like 的 OS可以移植,應該是挺有收獲的..
11/15 18:07, 36F

11/15 18:09, , 37F
C compiler 可以置換一些 obj 以達到配合不同 loader的效
11/15 18:09, 37F

11/15 18:09, , 38F
果,但除了寫 driver,常駐程式 這種人之外,沒事不必熟這塊
11/15 18:09, 38F

11/15 18:10, , 39F
所以我們平常也不能 compile 出 driver 來..
11/15 18:10, 39F

11/15 20:14, , 40F
別扯開話題,memtest 之類的程式用一般的 gcc 就可以編
11/15 20:14, 40F

11/15 20:14, , 41F
我不認為你一定要用 VC 1.5 才能編出這種程式
11/15 20:14, 41F

11/15 20:15, , 42F
更何況 就算你用 VC1.5 你還是要編成 32bit 程式
11/15 20:15, 42F

11/15 20:15, , 43F
不然根本無法定址
11/15 20:15, 43F

11/15 20:23, , 44F
你說的對,你回頭看我說的是'比如VC1.5',而不是'一定要'
11/15 20:23, 44F

11/15 20:23, , 45F
基本上一個會自己思考的人,我們給建議不管有多少漏洞,他會
11/15 20:23, 45F

11/15 20:23, , 46F
自己補完.所以VC1.5能不能用?如果不補完我也懶得教了..
11/15 20:23, 46F

11/15 20:24, , 47F
那為什麼我要扯去 1.5版呢?因為它和時下搞 DLL 之類的無關
11/15 20:24, 47F

11/15 20:25, , 48F
只是很快讓人知道有不同的東西可運用.但要補完的還很多..
11/15 20:25, 48F

11/15 20:27, , 49F
不過你討論的態度實在不錯,值得推一下;不會因為沒補完的部
11/15 20:27, 49F

11/15 20:27, , 50F
份沒講完,且自己有正確的一整套,就直接說別人全錯了 :)
11/15 20:27, 50F

11/15 20:27, , 51F
你那一整套都是對的,先確認;我只是在談'想學習'的心態..
11/15 20:27, 51F

11/15 20:28, , 52F
所以,我一個熟C的人,該如何一點一滴探索過來呢?
11/15 20:28, 52F

11/15 20:29, , 53F
既然你講gcc,我之前想到的是,碰 linux 吧,它完全公開..
11/15 20:29, 53F

11/15 20:29, , 54F
學這一段不會被微軟絆手絆腳的..
11/15 20:29, 54F

11/15 20:31, , 55F
'如何用C做到絕對物理定址',若這樣描述,問題就快速轉到必
11/15 20:31, 55F

11/15 20:31, , 56F
需學習硬體相關的知識,搞懂 cache怎麼關閉,搞懂暫存器,旗
11/15 20:31, 56F

11/15 20:31, , 57F
標如何設定.
11/15 20:31, 57F

11/15 20:33, , 58F
DPMI 就是以前 DOS 時代但又想存取32位元位址發展出來的
11/15 20:33, 58F

11/15 20:33, , 59F
簡單說,它不能把程式放上去執行;但能把資料放上去存取..
11/15 20:33, 59F

11/15 20:34, , 60F
它的運作原理是CPU在真實/保護模式間快速切換..很詭異
11/15 20:34, 60F

11/22 15:44, , 61F
bootloader on MDR ?
11/22 15:44, 61F
文章代碼(AID): #1A_UzeLt (ask-why)
文章代碼(AID): #1A_UzeLt (ask-why)