金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上,金年会 金字招牌诚信至上

 找回密碼
 注冊

QQ登錄

只需一步,快速開(kāi)始

查看: 1891|回復: 10
打印 上一主題 下一主題

死機與內存的關(guān)系

跳轉到指定樓層
1#
廣電技術(shù) 發(fā)表于 2011-5-14 13:57:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 來(lái)自 中國山東臨沂

馬上注冊,結交更多好友,享用更多功能。

您需要 登錄 才可以下載或查看,沒(méi)有帳號?注冊

x
從電腦出現至今就一直被死機伴隨著(zhù),幾乎沒(méi)有誰(shuí)的電腦從不遭遇死機。在使用過(guò)程中,偶爾一次死機應該算是正,F象,如果經(jīng)常死機,電腦就存在一定的問(wèn)題了。那么,電腦為什么會(huì )死機呢?有哪些因素會(huì )造成電腦死機呢?要搞清楚這些問(wèn)題,首先要弄清楚,到底什么是死機?為什么會(huì )發(fā)生死機?

  造成死機的原因是多種多樣的,有軟件問(wèn)題,有硬件問(wèn)題,不過(guò),死機的本質(zhì)都是一樣的。

  早在N年前,我主持某大學(xué)計算機專(zhuān)業(yè)本科生畢業(yè)答辯的時(shí)候,就向某學(xué)生提出過(guò)這樣兩個(gè)問(wèn)題:

  1.電腦死機的時(shí)候,CPU在干什么(或者說(shuō),CPU處于什么狀態(tài)?)”

  2.在計算機中,無(wú)論指令代碼還是數據代碼,都是用二進(jìn)制來(lái)表示的,請問(wèn),CPU是如何判定某二進(jìn)制代碼是指令代碼還是數據代碼?
  其實(shí),上面兩個(gè)問(wèn)題的實(shí)質(zhì)是一樣的,主要涉及到CPU是如何取得指令和如何執行指令的,把這兩個(gè)問(wèn)題搞清楚了,死機的問(wèn)題也就容易理解了。

  首先來(lái)看看,馮.諾依曼結構的電腦是如何取得指令、又是如何執行指令的:

  馮.諾依曼(1903~1957),匈牙利裔數學(xué)家,1945年戈德斯坦、勃克斯等人,聯(lián)名發(fā)表了一篇長(cháng)達101頁(yè)紙的報告,即計算機史上著(zhù)名的“101頁(yè)報告”,提出了現代計算機結構的理論模型--存儲程序計算機模型(Stored Program Computer),這就是今天計算機最基本的原理模型。

  這種結構類(lèi)型計算機工作的時(shí)候,首先必須把完成工作步驟和相關(guān)的數據用二進(jìn)制代碼表示出來(lái)(編寫(xiě)程序),然后再把它們保存在計算機的內存中,CPU依次從內存中讀相關(guān)的指令代碼和數據進(jìn)行運算,直到完成整個(gè)運算過(guò)程并輸出結果。

  要完成這樣的運算過(guò)程,人們在設計運算器(CPU)的時(shí)候,首先就要考慮的是,在一段內存中,CPU怎樣區分指令代碼和數據代碼。熟悉計算機的人都清楚,指令用來(lái)確定“做什么”和“怎樣做”,數據是“做”的時(shí)候需要原始數。

  比如:要計算機做1+2=?中,“+”表示要做什么和怎樣做,1和2則是做的時(shí)候需要的原始數,F在假設某CPU中,“+”用二進(jìn)制“00000001”來(lái)表示,“1、2”分別用“00000001、00000010”來(lái)表示。那么,這段程序存入內存中就是這樣的:   

  XXXX1:00000001

  XXXX2:00000001

  XXXX3:00000010 前面的XXXX1 XXXX2 XXXX3表示內存的地址

  從上面可以看出,“+”指令和被加數是完全相同的,當然,這是我故意這樣假設的,但是,在實(shí)際情況中,這種情況是大量存在的。在正常情況下,CPU只能把XXXX1內存中的00000001作為指令,XXXX2內存中的00000001作為被加數才能得到正確的結果。那么CPU如何才能做到不把第二個(gè)00000001也當成“+”呢?

  1.人們把內存的某個(gè)地址規定為起始地址(又稱(chēng)為復位地址),也就是說(shuō),當計算機開(kāi)機或者被強行復位(也就是機箱上那個(gè)重啟動(dòng)按鈕按下的的時(shí)候),CPU立即跳轉到這個(gè)地址中,并且把它里面的代碼作為指令來(lái)執行,同時(shí)根據這個(gè)指令的長(cháng)度和格式判斷下一條指令在什么地方。

  對于X86系列CPU(也就是現在人們常用的什么奔XX、賽XX系列),它的復位地址是FFFF0,如果表示成邏輯地址則是:FFFF:0000。對DEBUG比較熟悉的朋友或者會(huì )在一些高級語(yǔ)言中嵌入匯編語(yǔ)言的朋友可以這樣做一個(gè)試驗:

  用DEBUG執行一條指令(這是一條無(wú)條件跳轉指令):jmp FFFF:0000,或者在高級語(yǔ)言中嵌入這條匯編指令,執行后,你就會(huì )發(fā)現,計算機重新啟動(dòng)了。其實(shí),用程序控制計算機重啟的最本質(zhì)的操作就是這樣的。

  2.給各種指令規定了相應的長(cháng)度和格式。比如:某數+某數這條指令就規定:這條指令的長(cháng)度是3個(gè)字節,其中第一個(gè)字節表示“+”,后面兩個(gè)字節表示被加數和加數。于是,當CPU到達這個(gè)指令后,就自動(dòng)把第一個(gè)代碼作為指令,后面兩個(gè)代碼作為數據,依次類(lèi)推,第4個(gè)代碼就必然是指令.....

  現在假設,CPU在執行指令的時(shí)候因某種原因,誤把本來(lái)是數據的代碼當成了指令,結果除了是計算結果出錯外死機也就是必然的了。

  還是以前面那個(gè)加法程序為例:當CPU把第三個(gè)代碼(也就是00000010)當成了指令,而恰好這個(gè)代碼是一跳轉指令,CPU的執行結果將是:XXXX3--跳轉--執行--跳轉--執行........進(jìn)入周而復始的亂條,不過(guò)注意,雖然是在亂跳,CPU卻始終是在不停的正常地執行指令,所謂的“亂”是對用戶(hù)而言,對CPU來(lái)說(shuō)卻是正常的。

  還有一種情況就是,如果恰好跳轉到了FFFF:0000這個(gè)地址,計算機便重新啟動(dòng)了。呵呵,,這下搞清楚了為什么計算機有時(shí)會(huì )“莫名其妙地重啟”了把。

  有朋友可能會(huì )問(wèn),內存中怎么可能有如此多的跳轉指令呢?是怎么形成的呢?

  計算機中的最小存儲單位是字節(8個(gè)二進(jìn)制位),指令功能、長(cháng)度和格式也是在一個(gè)字節中規定的。因此,平均來(lái)說(shuō),每256個(gè)代碼中就有可能出現一條跳轉指令(8位二進(jìn)制數最多表示256)。

  還有一種情況:現在計算機的內存已經(jīng)達到數G的存儲容量,絕大多數都不可能用到這個(gè)極限,也就是說(shuō),有相當長(cháng)一段區域是空白,即使內存只有數百M的計算機中也不可能把內存用完,同樣存在相當數量的空白區域。特別需要注意的是,空白區域不等于里面就沒(méi)有代碼。因為,在數字邏輯電路中,不可能存在“沒(méi)有”這種情況,即使是表示沒(méi)有(叫做“空”--NULL)也是要用一個(gè)代碼來(lái)表示的(NULL用00000000)來(lái)表示,所以,空白區域內的代碼是“11111111”或者干脆就是一些隨機代碼。X86系列的CPU“11111111”是一條單字節的指令nop--空操作指令,當CPU跳轉到這些空白區域時(shí),雖然不會(huì )發(fā)生再次跳轉的現象,CPU也會(huì )逐條執行這些代碼,執行到最后一個(gè)內存后,CPU將會(huì )回到內存的0號起始地方然后又從頭開(kāi)始執行程序。

  有朋友問(wèn)了,如果硬盤(pán)出錯會(huì )不會(huì )死機呢?這個(gè)問(wèn)題要這樣看。CPU從硬盤(pán)中調入數據的時(shí)候會(huì )對硬盤(pán)數據做比較嚴格的校驗(一般是CRC--循環(huán)冗余校驗),如果校驗成功,則不會(huì )死機,如果校驗失敗,CPU會(huì )給予用戶(hù)提示“校驗失敗或者文件損壞”--當然也不會(huì )死機;只有在硬盤(pán)上的文件已經(jīng)損壞,硬盤(pán)把數據傳給CPU的時(shí)候“自己沒(méi)有發(fā)現”造成的數據混亂。所以,硬盤(pán)數據損壞后,只能造成數據丟失,無(wú)法執行程序,也可能無(wú)法啟動(dòng)計算機。不過(guò),有一種情況例外,那就是硬盤(pán)上的某區域做成的虛擬內存,如果這個(gè)區域損壞是有可能死機。

  內存的啟動(dòng)監測問(wèn)題,計算機在開(kāi)機的時(shí)候會(huì )對內存進(jìn)行檢測,這種檢測的方法不外乎有如下一些:

  1.最簡(jiǎn)單的檢測方法:把內存從頭到尾讀一遍,能夠讀出數據便認為內存正確。

  2.稍微復雜一些的檢測方法:把內存從頭到尾讀、寫(xiě)一遍,能夠讀寫(xiě)數據便認為內存正確。

  3.再復雜一些的檢測方法:把內存從頭到尾讀、寫(xiě)數遍能夠讀寫(xiě)數據便認為內存正確。

  4.簡(jiǎn)單的校驗檢測方法:把內存從頭到尾讀、寫(xiě)數遍,讀出的數據和寫(xiě)入的數據進(jìn)行比較,能夠讀寫(xiě)、并且讀的數據和寫(xiě)的數據相同,則認為內存正確

  5.比較復雜的校驗檢測方法:對內存讀寫(xiě)的數據同時(shí)進(jìn)行奇偶校驗和CRC校驗,這種方法多用于高檔服務(wù)器,同時(shí),能夠做奇偶校驗的內存(ECC內存)價(jià)格比普通內存貴10倍以上(不知道為什么)。
2#
hehuabin 發(fā)表于 2011-5-27 10:38:53 | 只看該作者 來(lái)自 中國上海
指示燈說(shuō)明:
BIOS燈:為BIOS運行燈,正常工作時(shí)應不停閃動(dòng)。9 V6 m) h- m  r2 I) r
CLK燈:為時(shí)鐘燈。正常為常亮。/ l) ?" T0 n! Y3 F
OSC燈:為基準時(shí)鐘燈,正常為常亮。) ^; d; ?( w+ h+ n
RESET燈僅為復位燈,正常為開(kāi)機瞬間閃一下,然后熄滅。
RUN燈:為運行燈,工作時(shí)就不停閃動(dòng)。9 }/ J1 a) T* e' s% b( \3 Q6 o+ y' r0 B
+12V,-12V,+5V,+3.3V燈正常為常亮。1 w/ O0 `& J0 d
1. 檢測卡跑00,CO,CF,FF或D1:& S" Y2 k* b5 a. p
原因:CPU插槽臟。針腳壞,接觸不好。CPU,內存超頻了。CPU供電不良。某芯片發(fā)熱,硬件某部分資源不正常,在CMOS里把其關(guān)閉或更換該集成資源的芯片。
2. C1,C2,C6,C7或E1:; L+ k9 c" t( z- T7 A% @
內存接觸不良,(用鑷子劃)。
測內存工作電壓(SDRAM 3.3V,DDR 2.5和1.6V。)
測時(shí)鐘! P6 J" [2 I/ p! U
CPU旁排阻是否有損壞。
測CPU地址線(xiàn)和數據線(xiàn)。
北橋壞。
3.C1~05循環(huán)跳變:
BIO S損壞1 R+ o6 p0 y4 `8 C6 u
I/O壞或者南橋壞.- T* O2 f, \1 x& r+ d1 i8 o
4.C1,C3,C6:& |9 U; Z# M3 p
刷BIOS% V' ~& g( W6 d9 |: G( U( f
換電源,換CPU,換轉接卡有可以解決問(wèn)題.6 S# g7 @1 ]& s3 ?/ y3 U' @, F
檢查BIOS座.
PCB斷線(xiàn),板上粘有導電物.& d+ {* ^# H8 B
清洗內存和插槽.: ~/ k$ @5 R+ I" F7 i7 v0 D
換內存條.換內存插槽.
換I/O.北橋虛焊或者壞.# |; b/ E: z% T& S9 Z% p$ y# x. \
5.循環(huán)顯示C1~C3.或者C1~C5等.
刷BIOS.
換I/O有時(shí)可解決問(wèn)題.; Y9 f( l. q' D' ~% c+ o& G+ i
PCB斷線(xiàn),板上粘有導電物.. s7 H' C. s  ]. N) c5 i% [* I
可考慮換電容.換CPU.換內存.
南橋壞.
6.顯BO代碼:
看內存電壓,清CMOS,北橋壞.
7.顯示25代碼:
北橋問(wèn)題.
8.跑0D后不亮:5 N" p1 b7 n0 t* g/ I6 Z
外頻,倍頻跳線(xiàn).
9.顯2B代碼后不亮:; Z7 a  i$ A% W) q3 b5 |
刷BIOS.清除 BIOS.時(shí)鐘發(fā)生器不良.北橋供電不正;蛘弑睒驂.
10.跑50代碼:
I/O錯,南北橋,BIOS壞.( G6 n1 S8 i' E) j
11.跑41代碼:. @: Y  q$ P  O# y7 d
BIOS刷新.PCB壞或者上面有導電物.8 r9 _) N7 j/ g  [; D5 r
12.跑R6代碼:檢測不到顯卡.劃者是內存沒(méi)有過(guò).
13.跑 R7代碼:顯卡初始化沒(méi)有完成.是內存錯,或者是顯卡沒(méi)有插好.清洗插槽.反復插試內存.  ]5 H5 u  S, j9 \
14.跑E0代碼:CPU 沒(méi)有工作.插槽臟,針腳壞.7 B9

收藏10 分享0 頂0 踩0

  
3#
tontop1113 發(fā)表于 2011-6-30 18:53:43 | 只看該作者 來(lái)自 中國湖北武漢
講的很復雜,沒(méi)看明白
     
4#
376057772 發(fā)表于 2011-6-30 19:11:29 | 只看該作者 來(lái)自 中國陜西西安
有點(diǎn)復雜化了
5#
yzaiwx 發(fā)表于 2011-6-30 23:45:07 | 只看該作者 來(lái)自 中國湖南長(cháng)沙
簡(jiǎn)單話(huà)一下落
6#
天藍99 發(fā)表于 2011-7-1 18:31:03 | 只看該作者 來(lái)自 中國河北石家莊
專(zhuān)業(yè)性很強
7#
zhangtianliuyc 發(fā)表于 2011-7-2 21:09:01 | 只看該作者 來(lái)自 中國江蘇南京
對新手有些復雜了
8#
zhangtianliuyc 發(fā)表于 2011-7-3 13:27:06 | 只看該作者 來(lái)自 中國江蘇南京
有些復雜了 迷糊
9#
wang978564118 發(fā)表于 2011-7-10 13:26:46 | 只看該作者 來(lái)自 中國山西呂梁
新手看不懂
頭像被屏蔽
     
10#
pp_31 發(fā)表于 2011-7-19 09:48:58 | 只看該作者 來(lái)自 中國陜西西安
提示: 作者被禁止或刪除 內容自動(dòng)屏蔽
11#
1234AB 發(fā)表于 2011-7-26 12:12:45 | 只看該作者 來(lái)自 中國廣東廣州
有看沒(méi)有懂。。。。。。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

快速回復 返回頂部 返回列表
乐陵市| 西乌珠穆沁旗| 自贡市| 远安县| 兴城市| 绍兴县| 萨迦县| 顺平县| 北票市| 延吉市| 汶川县| 长宁县| 鹤山市| 灵宝市| 拜泉县| 台南市| 思茅市| 永兴县| 隆化县| 青川县| 怀柔区| 九江县| 巴青县| 滦南县| 屏南县| 静安区| 青冈县| 江达县| 长宁县| 汤阴县| 营口市| 庆阳市| 镇平县| 汽车| 奉新县| 华亭县| 安新县| 蒙阴县| 濮阳市| 无为县| 浙江省|