2008年8月27日 星期三

短暫的記憶

昨天寫了‘半導體(二)’後,收到兩個意見,第一個是問何謂靜態和動態記憶。而另一意見就指出靜態記憶每bit需要6管,而不是我說的兩管。

對於後者,這是事實,半導體靜態記憶體設計,的確每bit需要6管。這是由於很多工程和實際的考慮,例如,要處理時脈訊號等等。而最簡單的靜態記憶,理論上可以由兩管達成。當然,其實用性存疑。

至於第一問,這就難答了。因為,問者應不熟悉電子學,要不用電子學的理論,而解釋甚麼是動態,甚麼是靜態記憶,實在非常困難。我想了想,還是說一點趣事算了。

首先,電子學上的記憶是甚麼?又是一白癡問題,記憶就不是把資料記住嗎!正確,但如何記?數碼電子學內,會使用2進制,2進制祗有兩個狀態,即0和1。一個0和1的位元便稱為bit。若你可以保持這個位元的狀態,這便是記憶。

這樣高深,看不明白。來個實例,你的電燈開關便是個1bit的記憶裝置。當你亮著電燈,若不考慮停電或其他問題,你的電燈便一直亮著,同理,當你關閉電燈後,它便一直保持著這個關閉狀態。這便是1bit記憶了。

要保持狀態,對電子工程師來說可算是個大挑戰,他們巧妙地組合三極管(註一)和其他器件,有多種方法都可以鎖定狀態的。但最後,都要多管才能組成1bit的記憶。

最終便來了個每bit祗需一管的設計。

就算你不是修電子學的,也可能聽過有一種名為‘電容器’的電子器件。顧名思義,‘電容器’就是可以存貯電能的器件。不錯,但不要和日常經驗的可充電池混淆,電容器是可以充電,也可以放電的。但由於電容器有‘嚴重’的內部漏電效應,電能實際上在電容器上鮮有存放超過一秒的(註二)。

但在一個‘短暫’時間內,電容器便是一個記憶裝置。它‘有沒有充電’的兩個狀態便可以用來代表0和1!這個‘短暫’有多長,按記憶體生產標準,這是64ms。即千份之64秒。小於10份1秒!

原來,我們存放在記憶體內的資料,保存不超過10份1秒!這有違經驗啊!當然,我們用電腦的經驗就是,祗要你保持電腦開動,記憶就一直保持。那麼,又是如何達成的呢?

這就是一個非常巧妙的設計,但說穿了就是‘在失憶前,重新記憶!’動態記憶就是需要一套刷新(refresh)基制,這就是在記憶還有效時,便按現時的狀態,重新設定記憶。那麼,狀態又可再保持一段時間,重覆地刷新,記憶便可一直保持下去。這便是動態記憶體的‘動’!

但是千萬不要被我誤導,這個程序一點也不簡單。要優化‘刷新’程序,工程師都不知花了多少心血。例如,在刷新時,記憶體便‘暫時’不可使用,若是一次過刷新全部記憶體,這個‘暫時’對很多系統便‘長’得不能接受,特別是實時系統。可以想像,在一個導彈系統內,難道每64ms,便要‘暫時’失去指揮嗎?若是這樣,這導彈定必‘飛不起’。所以,如何降低刷新對系統表現的影響,經已是電子工程學的一大題目!

另一項容易混淆的概念就是靜態記憶可在失去電源後保持其記憶,這實在是大誤解。靜態記憶體在失去電源後便會‘失憶’,‘靜’就祗是說,在正常供電下,它們無需‘刷新’而已。

‘手指’內的並不是‘動態’也不是‘靜態’記憶體!在無電源下可保存記憶,是完全不同的工程學概念!

註一:三極管一般是指兩極(bipolar)三極管(即俗稱的‘原子粒’),理論上,它們也可造成記憶體。實際上,基於種種工程學上的考慮,都不會用它們去造。MOS技術,就更常用於紀憶體器件!

註二:這是個簡化了的說法,事實上,電能保存量和時間是成negative exponential關係的。這就是說,電能在初時會損失得較快,而損失的速率會越來越慢。理論上,放電過程是可以‘直到永遠’的。

沒有留言:

網誌存檔