2009年9月26日 星期六

記憶體

記憶體的作用
為什麼記憶體這麼重要呢﹖其實﹐電腦真正工作的場所是在記憶體上面﹐包括所有系統的驅動程式、作業系統、工作數據、成品/半成品等等﹐都必須先載入(load)到記憶體上面才能給 CPU 讀取。尤其對 Windows 或比較大型的程式﹐要求的記憶體也越多。而且﹐永遠也不會嫌多的﹐就像錢對於我來說
如何計算記憶體的容量﹖
記憶體的最小單位是位元(bit)﹐每個位元可以代表 1 或 0 (開或關)﹐而 8 個位元則組成 1 字節(byte)﹐byte 可以說是電腦最基本的計算單位了﹐再往後則每乘以 1024 來增加單位﹐也就是說﹐1KB(Kilo Byte)等於 1024 個 byte﹔1MB(Mage Byte)等於 1024 個 KB﹔1GB(Giga Byte)等於 1024 個 MB﹔以此類推...
很早就和大家說過了:電腦只認識 0 和 1 ﹐任何程式語言要交由電腦運算﹐最終的還要換成 0 和 1 才能夠讓電腦讀得懂。我們在鍵盤上敲進一個字母'A'﹐真正傳給電腦的是 01000001 這個 byte(8bit)﹐我們稱這種字母對應方法為 ASCII(America Standard Code for Information Interchange)。通常我們以純文字所處理的文章﹐就是使用 ASCII 字母的了。
究竟記憶體的需求量怎樣計算出來的呢﹖如果以純文字來計算﹐一頁 A4 紙大約 5000 多字節(包括標點和空白)﹐即 5KB﹐那麼 1MB 就有超過二百頁了。但如果要做出更漂亮的文字﹐每個字還需要更多的記憶體來儲存其字形、特殊效果、行段格式、等等﹐那麼1MB 也只能儲存數十頁﹐有時更少。總之﹐越漂亮的文件﹐所需的記憶體也越多。
下面再拿一個比較實際的例子來算算記憶體的使用量﹕
我們在選購顯示卡(Video Adapter)的時候﹐常聽說此卡有多少多少 RAM ﹐究竟多少才夠用呢﹖
先拿一個單色顯示卡來說﹐假設它的解析度是 640x480 ﹐也就是說螢幕上橫有 640 個顯示點﹐豎則有 480 個點﹐而每個點只有兩種變化﹕亮(白/黃/錄等單色)或不亮﹐這可用 1 個 bit(2的1次方) 的開關來表示。那麼 640x480x1(bit)=307200(bit)/8=38400(byte)/1024=37.5(KB)/1024=0.036621(MB)。您看只需要很少的RAM就夠了。然而﹐採用的是彩色顯示卡的話﹐如果要顯示16色﹐每個點就需要 4bit(2的4次方等於16) 來顯示了﹐那麼就需要 640x480x4(bit)=228800(bit)=153600(byte)=150KB=0.15MB ﹔如果要顯示 256(8bit)色﹐則需要 840x480x8/8/1024/1024=0.29MB 了。
假如您的顯示卡可以顯示 1024x768 的解析度和 32bit 顏色的話﹐您最少需要 1024x768x32/8/1024/1024=3MB 的 RAM。而現在市面上的顯示卡還可以有自己的程式處理功能(如 3D 加速)﹐那麼則需要更多的 RAM 了。
不過,請您要分清楚的是:這裡以 Video RAM 為例子﹐使用的 RAM 並不是電腦系統上面的記憶體﹐而是顯示卡本身的(雖然某些 on-board 顯示卡會共用電腦的 RAM )。同時,這裡雖然只作為一個計算例子而已﹐不過也適合計算一個 BMP 圖像檔案的大小。
記憶體的管理
不同的作業系統﹐對記憶體的管理也不相同﹐下面以傳統的 DOS 來看看記憶體的分配情形。由於傳統設計的限制和向後兼容的考慮﹐DOS 主要運用的是記憶體的前 1MB 。而且﹐真正用來工作的地區也只是前面的 640K (然而今日的 Windows 已經打破了這個限制了)。
離開了記憶體﹐電腦一點東西都做不到﹐但如果 RAM 給擾亂了或是超出了範圍﹐電腦也會不工作﹐通常電腦的"當機"就是這樣形成的。
一般來說﹐當一個程式被啟動的時候﹐所有其必須運用的資料都會先載入到 RAM 上面﹐當程式被關閉的時候﹐也將所佔用的空間騰空出來好給其它程式使用。但有些被稱為"駐留程式"的程式﹐即使是關閉了依然還會存留在 RAM 裡面﹐不過,這種程式為數不多,且都是些經常要用到的一些程式。另外,有些電腦病毒也是這樣躲在 RAM 裡面而將繼續開啟的檔案感染。
好的作業系統有較完善的記憶體管理﹐能避免因記憶體錯誤而當機的能力也比較好。通常我們在 MS Windows 上面看到什麼 'Illegal operation, protection error: 0x008800' 之類的信息﹐就多是因為記憶體錯誤而引起的。幸運的話﹐用 Ctrl+ALT+Del 將受影響的程式結束掉﹐還可以繼續工作﹔然而大多數情況之下﹐除了關機就別無它途﹐更糟糕的是連錯誤信息都沒有就不動了。但相同的情形﹐如果在一個 Unix(或 Linux)系統上面﹐它們對記憶體的管理非常棒。就算本機的鍵盤不能操作,您還可以從另外的機器 telnet 進去然後將問題程式 kill 掉也還可以繼續工作﹐未必一定要關機的。
記憶體的分類
凡是能利用電子性能來作記錄的元件都可以稱為記憶體(Memory)﹐也分為唯讀記憶體即 ROM(Read Only Memory) 和隨機儲存記憶體: RAM(Random Access Memory)。
其實幾乎所有的主機板主機板和插卡及其他設備都有它們的 ROM﹐主要是記錄一些控制程式和協議等﹐也有各自的 RAM 來儲存資料。
而我們通常說到的電腦記憶體就多指系統的 RAM﹐早期的 RAM 都是直接焊接在主機板上面的﹐而現在 RAM 已經模組化成為 SIMM(Single In-line Momory Module)﹐更靈活於擴充或更換。以前的 SIMM 有 30 腳(pin)和 72 腳之分﹐其數據 BUS 分別為 8bit 和 32bit。假如您翻看前面CPU的敘述﹐也會看到不同年代的 CPU 其數據 BUS 也是不同的﹐這個值就直接決定一個記憶庫(Memory Bank)有多大﹐而電腦的 RAM 最低需要一個 Memory Bank 才可以運作。
這樣我們就明白了為什麼在 486(32bit data bus) 上面﹐要由 4 條 30 腳(8bit) RAM 來組成一個 bank﹐而使用 72 腳(32bit)的 RAM 一條就夠了。現在是 Pentium CPU 的年代﹐其數據 BUS 是 64bit 的﹐30 腳的 RAM 根本用不上﹐72 腳的也要 2 條才夠基本一個bank。不過﹐現在 168 腳的 SDRAM(Synchronous Dynamic Random Access Memory)已經是 64bit 的了﹐這種 module 我們稱為 DIMM(Dual In-line Memory Module)。而且在速度上也快很多﹐RAM 的速度是以 ns(nanoseconds﹐1ns 相當於光線穿越 11.72 英寸所需的時間)做單位﹐以資料的儲存速度為標準﹐數值越低越快。以前的 SIMM 有些是 70ns﹐有些則是 60ns 如EDO (Extended Data Out) RAM﹐現在的 DIMM 已經最快可以到 10ns 了。 若是您現在買到 DDR(Data Direction Register) 的 RAM ,那速度就更快了。同時,為配合 CPU 的外頻速度,也需要不同外頻速度的 RAM 才能發揮效能。
ROM 雖然說是唯讀的﹐但現在的主機板的 ROM 多數是可以 refresh 的﹐也就是通過程式可以對裡面的內容進行更新。不過﹐如果自己升級 ROM 就要非常小心了﹐尤其是在升級過程的一半斷電的話可就難堪了。比如前不久發作的 CIH 病毒﹐就可以進入到 ROM 裡面去改寫資料﹐以致機器動不起來。如果拿去修理﹐有些奸商會乘機叫您將主機板換掉﹐其實只要有適當設備﹐將資料重新寫進 ROM 就可以救回的了﹐再不然﹐買一個新的 ROM 換掉也可以。
然而﹐RAM 有一共通特性﹐就是有電才能維持記憶﹐如果電源關掉了﹐所有的記憶都會回復到全部為正或負。如果打開機器蓋子去看看主機板的話﹐上面應該都有顆鈕釦電池﹐它就是用來維持主機板之 CMOS(Complementary Metal-Oxide Semiconductor﹐用來儲存和維護一些機器的基本設定資料)的工作的。一旦機器很久沒用﹐重新開機的時候或許會開不起來﹐可能就是 CMOS 的電池也跑光了﹐以前的設定也就消失掉﹐此時只能再進入 BIOS(Basic Input Output System) 在廠家預設的基礎上進行修改後才能讓機器回復工作。有時候如果忘記了 BIOS 的密碼﹐也可以通過取出電池或通過跳針將原有的設定清除掉﹐再重新設定過。

沒有留言:

張貼留言