天天看點

[轉] 徹底了解記憶體概念

    盡管記憶體這個詞常常挂在我們的嘴上,但是,有多少人真正了解記憶體、了解記憶體概念呢?

    對剛剛步入電腦世界的初學者來說,基本記憶體、上位記憶體、高端記憶體、擴充記憶體、擴充記憶體、保留記憶體等概念更是玄之又玄,難以徹底了解。是以我們特地介紹一下記憶體的基本概念。

基本知識

    ● 記憶體

    記憶體就是存儲程式以及資料的地方,比如當我們在使用 WPS 處理文稿時,當你在鍵盤上敲入字元時,它就被存入記憶體中,當你選擇存盤時,記憶體中的資料才會被存入硬 (磁) 盤。在進一步了解它之前,還應認識一下它的實體概念。

    ● 隻讀存儲器 (ROM)

    ROM 表示隻讀存儲器 (Read Only Memory) ,在制造 ROM 的時候,資訊 (資料或程式) 就被存入并永久儲存。這些資訊隻能讀出,一般不能寫入,即使機器掉電,這些資料也不會丢失。ROM 一般用于存放計算機的基本程式和資料,如 BIOS ROM。其實體外形一般是雙列直插式 (DIP) 的內建塊。

    ● 随機存儲器 (RAM)

    随機存儲器 (Random Access Memory) 表示既可以從中讀取資料,也可以寫入資料。當機器電源關閉時,存于其中的資料就會丢失。我們通常購買或更新的記憶體條就是用作電腦的記憶體,記憶體條 (SIMM) 就是将 RAM 內建塊集中在一起的一小塊電路闆,它插在計算機中的記憶體插槽上,以減少 RAM 內建塊占用的空間。目前市場上常見的記憶體條有 4M/條、8M/條、16M/條等。

    ● 高速緩沖存儲器 (Cache)

    Cache 也是我們經常遇到的概念,它位于 CPU 與記憶體之間,是一個讀寫速度比記憶體更快的存儲器。當 CPU 向記憶體中寫入或讀出資料時,這個資料也被存儲進高速緩沖存儲器中。當 CPU 再次需要這些資料時,CPU 就從高速緩沖存儲器讀取資料,而不是通路較慢的記憶體,當然,如需要的資料在 Cache 中沒有,CPU 會再去讀取記憶體中的資料。

    當你了解了上述概念後,也許你會問,記憶體就是記憶體,為什麼又會出現各種記憶體名詞,這到底又是怎麼回事呢?

    在回答這個問題之前,我們再來看看下面這一段。

實體存儲器和位址空間

    實體存儲器和存儲位址空間是兩個不同的概念。但是由于這兩者有十分密切的關系,而且兩者都用 B、KB、MB、GB 來度量其容量大小,是以容易産生認識上的混淆。初學者弄清這兩個不同的概念,有助于進一步認識記憶體儲器和用好記憶體儲器。

    實體存儲器是指實際存在的具體存儲器晶片。如主機闆上裝插的記憶體條和裝載有系統的 BIOS 的 ROM 晶片,顯示卡上的顯示 RAM 晶片和裝載顯示 BIOS 的 ROM 晶片,以及各種适配卡上的 RAM 晶片和 ROM 晶片都是實體存儲器。

    存儲位址空間是指對存儲器編碼 (編碼位址) 的範圍。所謂編碼就是對每一個實體存儲單元 (一個位元組) 配置設定一個号碼,通常叫作"編址"。配置設定一個号碼給一個存儲單元的目的是為了便于找到它,完成資料的讀寫,這就是所謂的"尋址" (是以,有人也把位址空間稱為尋址空間) 。

    位址空間的大小和實體存儲器的大小并不一定相等。舉個例子來說明這個問題:某層樓共有 17 個房間,其編号為 801~817。這 17 個房間是實體的,而其位址空間采用了三位編碼,其範圍是 800~899 共 100 個位址,可見位址空間是大于實際房間數量的。

    對于 386 以上檔次的微機,其位址總線為 32 位,是以位址空間可達 232 即 4GB。但實際上我們所配置的實體存儲器通常隻有 1MB、2MB、4MB、8MB、16MB、32MB 等,遠小于位址空間所允許的範圍。從下圖中我們可以看到位址空間與實體存儲器之間的關系。

    好了,現在可以解釋為什麼會産生諸如:正常記憶體、保留記憶體、上位記憶體、高端記憶體、擴充記憶體和擴充記憶體等不同記憶體類型。

各種記憶體概念

    這裡需要明确的是,我們讨論的不同記憶體的概念是建立在尋址空間上的。

    IBM 推出的第一台 PC 機采用的 CPU 是 8088 晶片,它隻有 20 根位址線,也就是說,它的位址空間是 1MB。

    PC 機的設計師将 1MB 中的低端 640KB 用作 RAM,供 DOS 及應用程式使用,高端的 384KB 則保留給 ROM、視訊适配卡等系統使用。從此,這個界限便被确定了下來并且沿用至今。低端的 640KB 就被稱為正常記憶體即 PC 機的基本 RAM 區,請看圖 1。保留記憶體中的低 128KB 是顯示緩沖區,高 64KB 是系統 BIOS (基本輸入/輸出系統) 空間,其餘 192KB 空間留用。從對應的實體存儲器來看,基本記憶體區隻使用了 512KB 晶片,占用 0000 至 80000 這 512KB 位址。顯示記憶體區雖有 128KB 空間,但對單色顯示器 (MDA 卡) 隻需 4KB 就足夠了,是以隻安裝 4KB 的實體存儲器晶片,占用了 B0000 至 B10000 這 4KB 的空間,如果使用彩色顯示器 (CGA 卡) 需要安裝 16KB 的實體存儲器,占用 B8000 至 BC000 這 16KB 的空間,可見實際使用的位址範圍都小于允許使用的位址空間。

    在當時 (1980 年末至 1981 年初) 這麼"大"容量的記憶體對 PC 機使用者來說似乎已經足夠了,但是随着程式的不斷增大,圖象和聲音的不斷豐富,以及能通路更大記憶體空間的新型 CPU 相繼出現,最初的 PC 機和 MS-DOS 設計的局限性變得越來越明顯。

    1. 什麼是擴充記憶體?

    EMS 工作原理

    到 1984 年,即 286 被普遍接受不久,人們越來越認識到 640KB 的限制已成為大型程式的障礙,這時,Intel 和 Lotus,這兩家硬、軟體的傑出代表,聯手制定了一個由硬體和軟體相結合的方案,此方法使所有 PC 機存取 640KB 以上 RAM 成為可能。而 Microsoft 剛推出 Windows 不久,對記憶體空間的要求也很高,是以它也及時加入了該行列。

    在 1985 年初,Lotus、Intel 和 Microsoft 三家共同定義了 LIM-EMS,即擴充記憶體規範,通常稱 EMS 為擴充記憶體。當時,EMS 需要一個安裝在 I/O 槽口的記憶體擴充卡和一個稱為 EMS 的擴充記憶體管理程式方可使用。但是 I/O 插槽的位址線隻有 24 位 (ISA 總線) ,這對于 386 以上檔次的 32 位機是不能适應的。是以,現在已很少使用記憶體擴充卡。現在微機中的擴充記憶體通常是用軟體如 DOS 中的 EMM386 把擴充記憶體模拟或擴充記憶體來使用。是以,擴充記憶體和擴充記憶體的差別并不在于其實體存儲器的位置,而在于使用什麼方法來讀寫它。下面将作進一步介紹。

    前面已經說過擴充存儲器也可以由擴充存儲器模拟轉換而成。EMS 的原理和 XMS 不同,它采用了頁幀方式。頁幀是在 1MB 空間中指定一塊 64KB 空間 (通常在保留記憶體區内,但其實體存儲器來自擴充存儲器) ,分為 4 頁,每頁 16KB。EMS 存儲器也按 16KB 分頁,每次可交換 4 頁内容,以此方式可通路全部 EMS 存儲器。圖 2 給出了 EMS 的工作原理。符合 EMS 的驅動程式很多,常用的有 EMM386.EXE、QEMM、TurboEMS、386MAX 等。DOS 和 Windows 中都提供了 EMM386.EXE。

    2. 什麼是擴充記憶體?

    我們知道,286 有 24 位位址線,它可尋址 16MB 的位址空間,而 386 有 32 位位址線,它可尋址高達 4GB 的位址空間,為了差別起見,我們把 1MB 以上的位址空間稱為擴充記憶體 XMS (eXtend memory) 。

    在 386 以上檔次的微機中,有兩種存儲器工作方式,一種稱為實位址方式或實方式,另一種稱為保護方式。在實方式下,實體位址仍使用 20 位,是以最大尋址空間為 1MB,以便與 8086 相容。保護方式采用 32 位實體位址,尋址範圍可達 4GB。DOS 系統在實方式下工作,它管理的記憶體空間仍為 1MB,是以它不能直接使用擴充存儲器。為此,Lotus、Intel、AST 及 Microsoft 公司建立了 MS-DOS 下擴充記憶體的使用标準,即擴充記憶體規範 XMS。我們常在 Config.sys 檔案中看到的 Himem.sys 就是管理擴充記憶體的驅動程式。

    擴充記憶體管理規範的出現遲于擴充記憶體管理規範。

    3. 什麼是高端記憶體區?

    在實方式下,記憶體單元的位址可記為:

        段位址:段内偏移

    通常用十六進制寫為 XXXX:XXXX。實際的實體位址由段位址左移 4 位再和段内偏移相加而成。若位址各位均為 1 時,即為 FFFF:FFFF。其實際實體位址為:FFF0 + FFFF = 10FFEF,約為 1088KB (少 16 位元組) ,這已超過 1MB 範圍進入擴充記憶體了。這個進入擴充記憶體的區域約為 64KB,是 1MB 以上空間的第一個 64KB。我們把它稱為高端記憶體區 HMA (High Memory Area) 。HMA 的實體存儲器是由擴充存儲器取得的。是以要使用 HMA,必須要有實體的擴充存儲器存在。此外 HMA 的建立和使用還需要 XMS 驅動程式 HIMEM.SYS 的支援,是以隻有裝入了 HIMEM.SYS 之後才能使用 HMA。

    4. 什麼是上位記憶體?

    為了解釋上位記憶體的概念,我們還得回過頭看看保留記憶體區。保留記憶體區是指 640KB~1024KB (共 384KB) 區域。這部分區域在 PC 誕生之初就明确是保留給系統使用的,使用者程式無法插足。但這部分空間并沒有充分使用,是以大家都想對剩餘的部分打主意,分一塊位址空間 (注意,是位址空間,而不是實體存儲器) 來使用。于是就得到了又一塊記憶體區域 UMB。

    UMB (Upper Memory Blocks) 稱為上位記憶體或上位記憶體塊。它是由擠占保留記憶體中剩餘未用的空間而産生的,它的實體存儲器仍然取自實體的擴充存儲器,它的管理驅動程式是 EMS 驅動程式。

    5. 什麼是 SHADOW (影子) 記憶體?

    對于細心的讀者,可能還會發現一個問題:即是對于裝有 1MB 或 1MB 以上實體存儲器的機器,其 640KB~1024KB 這部分實體存儲器如何使用的問題。由于這部分位址空間已配置設定為系統使用,是以不能再重複使用。為了利用這部分實體存儲器,在某些 386 系統中,提供了一個重定位功能,即把這部分實體存儲器的位址重定位為 1024KB~1408KB。這樣,這部分實體存儲器就變成了擴充存儲器,當然可以使用了。但這種重定位功能在當今高檔機器中不再使用,而把這部分實體存儲器保留作為 Shadow 存儲器。Shadow 存儲器可以占據的位址空間與對應的 ROM 是相同的。Shadow 由 RAM 組成,其速度大大高于 ROM。當把 ROM 中的内容 (各種 BIOS 程式) 裝入相同位址的 Shadow RAM 中,就可以從 RAM 中通路 BIOS,而不必再通路 ROM。這樣将大大提高系統性能。是以在設定 CMOS 參數時,應将相應的 Shadow 區設為允許使用 (Enabled) 。

總結

    經過上面分析,記憶體儲器的劃分可歸納如下:

    ● 基本記憶體 占據 0~640KB 位址空間。

    ● 保留記憶體 占據 640KB~1024KB 位址空間。配置設定給顯示緩沖存儲器、各适配卡上的 ROM 和系統 ROM BIOS,剩餘空間可作上位記憶體 UMB。UMB 的實體存儲器取自實體擴充存儲器。此範圍的實體 RAM 可作為 Shadow RAM 使用。

    ● 上位記憶體 (UMB) 利用保留記憶體中未配置設定使用的位址空間建立,其實體存儲器由實體擴充存儲器取得。UMB 由 EMS 管理,其大小可由 EMS 驅動程式設定。

    ● 高端記憶體 (HMA) 擴充記憶體中的第一個 64KB 區域 (1024KB~1088KB) 。由 HIMEM.SYS 建立和管理。

    ● XMS 記憶體 符合 XMS 規範管理的擴充記憶體區。其驅動程式為 HIMEM.SYS。

    ● EMS 記憶體 符合 EMS 規範管理的擴充記憶體區。其驅動程式為 EMM386.EXE 等。