長期在64位CPU上運行32位程序是否會導致未用到的高位損毀?
看到有人說,長期在64位CPU上運行32位程序會導致未使用的高位損毀(burn-in,類似於顯像管顯示器不用屏幕保護程序而造成的損壞)。這個說法正確嗎?
作者還提供了一個預防方案,就是經常切換大小端。
Reminder: running 32 bit processes on a 64 bit CPU for prolonged periods can lead to burn-in of the unused high bits. Degauss your CPU regularly
— Joe Groff (@jckarter) January 31, 2018
更新1:
推文原作者應該是在講段子,但這個提問並不是釣魚。
推文的評論里有人給了一篇論文,https://www.researchgate.net/publication/275720759_MAGIC_Malicious_aging_in_CircuitsCores ,大概是說通過運行精心構造的程序可以加速CPU老化。
安全界已經有利用這種「程序在硬體上產生的副作用」的先例(side-channel attack)。例如Row hammer ,通過程序使內存中本不可訪問位置的比特位翻轉。
我本身並不熟悉安全或硬體領域,只是覺得這類「程序在硬體上產生的副作用」很有趣,所以提了這個問題看看有沒有什麼好玩東西:D。
由於提問里並沒有指明CPU型號,也沒有指明程序的類型和名稱,我就稍微引申一下。
X86架構什麼情況我是不清楚。不過ARM架構下確實存在32位處理器下運行16位程序的功能,其中16位程序被稱為Thumb指令集,那麼在ARM架構下長期運行Thumb模式會不會導致高16位損毀呢?當然不會,因為ARM開發16位指令集的目的本身就是為了壓縮程序的大小,如果16位指令只不過是高位空置的壓縮版32位指令就沒有意義了。事實上在系統內存里,每一個原先保存一條ARM指令的位置都可以保存兩條Thumb指令,而取指令的時候則是一次把兩條16位指令當成一條32位指令的方式一次性取出的,根本不會存在高位長期不使用的情況。那麼處理器解碼後的流水線讀到的指令長期高位沒有發生變化會不會有問題呢?太幼稚了,因為完全不變是不可能的,處理器之所以大部分是靠時鐘驅動的,正是因為在時鐘延到來之前,電路里的邏輯是在不停進行各種隨機翻轉的,而且即使你的程序里一行64位指令都不寫,何況作為處理器的初始化程序startup里也是不可能一行64位指令都不寫的!畢竟處理器上電後默認的工作模式肯定是64位的。最後的最後,其實我想告訴你,處理器因為使用不當而損壞,更有可能是因為被使用過度而不是閑置。而比起半導體晶元內部因為過度使用導致MOS管柵極變薄短路,你更應該擔心的是bonding管腳用的金屬線會不會在那之前就因為電子遷移過大導致斷開失效了。更新:看起來這個問題可以深入討論,那我就不抖機靈了
長期使用不到2^64位元組也就是16384PB內存會導致cpu內存匯流排高位地址長期不被使用而產生錯誤
長期使用非旗艦顯卡會導致pci匯流排高位位寬不被使用而產生錯誤
長期使用高級散熱和水冷會導致cpu缺少在高溫狀況下的磨練而變得嬌氣,進而產生錯誤
差不多,如果Word你沒有每個功能都一個月用一次的話,可能以後就會腐爛然後崩潰,使得你忘記保存的東西不見。
先來個直接的回答:不會。原因看下面。
首先,說明一下,普通的軟體是在操作系統上運行的,主流的64位操作系統可以支持64位應用程序也支持32位應用程序,而32位操作系統只能支持32位的應用程序。64位操作系統最大支持2^64位元組 = 16384 PB(16777216 TB = 17179869184 GB,目前主板支持不了這麼大的),32位操作系統最大支持2^32位元組 = 4 GB。
很多低端主板和低端CPU都不支持那麼大的內存好吧,不用擔心高地址位用不到而浪費了。運行內存需求較小的應用程序時,系統不會把內存全部佔用。用到的內存空間,操作系統會進行合理分配,不會浪費的。比如你吃雞,操作系統就會給吃雞進程分配內存,直到沒有空閑的內存空間給它分配了(虛擬內存先不考慮)。
而且沒錢買大內存。
有個答主說寄存器會有損耗,下面來解釋一下。
目前內存(RAM)的原理和快閃記憶體(Flash)的工作原理是不一樣的。快閃記憶體有損耗而內存幾乎是沒有損耗的,寄存器和內存一樣,可以看作CPU內部自帶的內存,但是速度比主板上插的內存要快幾個數量級。
內存的工作原理
電腦里的內存的全稱叫做隨機存取存儲器(random access memory,RAM),它是利用電容保存電荷的原理工作的,它的每一個單元(比特,bit,位)的結構十分簡單,優點是讀寫速度很快,缺點是斷了電數據會丟失。它幾乎不存在損耗的問題。寄存器和內存原理差不多,寄存器可以看作是CPU內部自帶的內存,它的速度比插在主板上的內存要快得多,損耗也是可以忽略不計的。
快閃記憶體的工作原理
U盤、SSD裡面使用的存儲單元是快閃記憶體,快閃記憶體(Flash Memory)是一種長壽命的非易失性(在斷電情況下仍能保持所存儲的數據信息)的存儲器,主流的快閃記憶體有NOR和NAND型,NAND型快閃記憶體的擦和寫均是基於隧道效應,電流穿過浮置柵極與硅基層之間的絕緣層,對浮置柵極進行充電(寫數據)或放電(擦除數據)。而NOR型快閃記憶體擦除數據仍是基於隧道效應(電流從浮置柵極到硅基層),但在寫入數據時則是採用熱電子注入方式(電流從浮置柵極到源極)。快閃記憶體的優點是斷電後數據可以保留,缺點是速度慢(相對於內存來說)。由於其工作方式導致快閃記憶體有擦寫次數的限制,也就是損耗。SSD內部的主控都會有磨損平衡演算法來為SSD續命。
結論
內存的浪費一般是以下兩個原因導致的:主板不支持較大的內存(不同主板不一樣,16~128 GB不等,可能還有更大的)或者是32位操作系統不支持大於4GB的內存。在定址能力之外的這部分內存會因為無法定址而無法使用,就被浪費掉了。這部分內存並不會因為沒辦法使用而慢慢地損耗掉。電腦在運行的時候會對內存和寄存器進行頻繁的讀寫,既然頻繁的讀寫都幾乎不會對內存造成損耗,那麼因為無法定址而多出來的內存單元也不會損耗咯,都不讀寫,沒有操作,只是加上電閑著,當然不會有損耗了。
至於就是經常切換大小端,我還沒聽說過主流的Intel和AMD能切換大小端的。當然其他的少數的特殊CPU是可以在加電的時候指定大端還是小端,不過我們也用不到啊。經常切換大小端是不可能的了。
我覺得推文原作者確實是在講段子。
我覺得你需要看看操作系統和計算機組成原理。
能力有限,就是把上課學到的簡單說了說,只能回答這麼多了,可能有些不合理的甚至錯誤的地方,請原諒。
點個贊再走唄(?`???′?)
會啊,長期運行32位程序,會讓系統平台和硬體忘記自己其實是支持64位的,久了就不支持64位了
這個問題是我提的,我大概說下我的想法。
推文原作者應該是在講段子,但這個提問並不是釣魚(當然我本人確實希望得到「看起來很扯但其實很有道理」的答案哈哈哈)。
推文的評論里有人給了一篇論文,https://www.researchgate.net/publication/275720759_MAGIC_Malicious_aging_in_CircuitsCores ,大概是說通過運行精心構造的程序可以加速CPU老化。
安全界已經有利用這種「程序在硬體上產生的副作用」的先例(side-channel attack)。例如Row hammer ,通過程序使內存中本不可訪問位置的比特位翻轉。
我本身並不熟悉安全或硬體領域,只是覺得這類「程序在硬體上產生的副作用」很有趣,所以提了這個問題看看有沒有什麼好玩東西:D。
老婆,你看這個問題,是真的,硬碟里的這些小黃片是為了保護沒用到的硬碟
莫非是……高位截癱?
沒錯,宏觀上還要風電、核電、水電定期輪換
I is fish,這鉤我咬了。 講道理只要是64位系統,系統啟動之後全程都是運行在LONG MODE下的,只要進行線程調度和發生中斷一定會用到64位寄存器。32位系統的話,還真不好說,萬一有0.00001%的可能圖中說的是真的呢(滑稽)
嗯,我覺得反了,應該是低 32 位寄存器磨損吧……
應該跟 SSD 一樣有磨損平衡的。
能用到壞算我輸。
逃~能想出高位損毀這種詞的人也是人才啊 咱們一起開老年保健品公司吧!
媽的智。。。勇雙全電腦長期使用當然會老化
一本正經地胡說八道,更像是釣魚。
還切換大小端呢,x86 CPU 什麼時候支持切換成大端了?
就算是支持切換的架構,你以為是能讓普通用戶隨意切的?
一百年後,歷史書上稱此人為計算機界的拉馬克。