理解記憶體概念

2021-06-03 18:43:40 字數 4893 閱讀 3413

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

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

基本知識

● 記憶體

記憶體就是儲存程式以及資料的地方,比如當我們在使用 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。

在當時 (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. 什麼是高階記憶體區?

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

通常用十六進製制寫為 ***x:***x。實際的實體地址由段位址左移 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 等。

徹底理解記憶體概念

儘管記憶體這個詞常常掛在我們的嘴上,但是,有多少人真正了解記憶體 理解記憶體概念呢?對剛剛步入電腦世界的初學者來說,基本記憶體 上位記憶體 高階記憶體 擴充套件記憶體 擴充記憶體 保留記憶體等概念更是玄之又玄,難以徹底理解。所以我們特地介紹一下記憶體的基本概念。基本知識 記憶體 記憶體就是儲存程式以...

徹底理解記憶體概念 zz

儘管記憶體這個詞常常掛在我們的嘴上,但是,有多少人真正了解記憶體 理解記憶體概念呢?對剛剛步入電腦世界的初學者來說,基本記憶體 上位記憶體 高階記憶體 擴充套件記憶體 擴充記憶體 保留記憶體等概念更是玄之又玄,難以徹底理解。所以我們特地介紹一下記憶體的基本概念。基本知識 記憶體 記憶體就是儲存程式以...

通過記憶體溢位理解棧的概念

棧是一種有限儲存的資料結構 資料只能在棧的頂端進行新增或刪除,遵循lifo 後進先出 原則。棧支援兩種操作push和pop。push 在棧頂新增乙個資料。pop 從棧頂移除乙個資料。接下來我們看一下一段c程式的記憶體結構在函式呼叫和返回時內容是如何變化的。text 包含將要執行的 data 包含程式...