儘管記憶體這個詞常常掛在我們的嘴上,但是,有多少人真正了解記憶體、理解記憶體概念呢?
對剛剛步入電腦世界的初學者來說,基本記憶體、上位記憶體、高階記憶體、擴充套件記憶體、擴充記憶體、保留記憶體等概念更是玄之又玄,難以徹底理解。所以我們特地介紹一下記憶體的基本概念。
基本知識
●記憶體
記憶體就是儲存程式以及資料的地方,比如當我們在使用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。
在當時(2023年末至2023年初)這麼「大」容量的記憶體對pc機使用者來說似乎已經足夠了,但是隨著程式的不斷增大,圖象和聲音的不斷豐富,以及能訪問更大記憶體空間的新型cpu相繼出現,最初的pc機和ms-dos設計的侷限性變得越來越明顯。
1.什麼是擴充記憶體?
ems工作原理
到2023年,即286被普遍接受不久,人們越來越認識到640kb的限制已成為大型程式的障礙,這時,intel和lotus,這兩家硬、軟體的傑出代表,聯手制定了乙個由硬體和軟體相結合的方案,此方法使所有pc機訪問640kb以上ram成為可能。而microsoft剛推出windows不久,對記憶體空間的要求也很高,因此它也及時加入了該行列。
在2023年初,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等。
徹底理解記憶體概念
儘管記憶體這個詞常常掛在我們的嘴上,但是,有多少人真正了解記憶體 理解記憶體概念呢?對剛剛步入電腦世界的初學者來說,基本記憶體 上位記憶體 高階記憶體 擴充套件記憶體 擴充記憶體 保留記憶體等概念更是玄之又玄,難以徹底理解。所以我們特地介紹一下記憶體的基本概念。基本知識 記憶體 記憶體就是儲存程式以...
理解記憶體概念
儘管記憶體這個詞常常掛在我們的嘴上,但是,有多少人真正了解記憶體 理解記憶體概念呢?對剛剛步入電腦世界的初學者來說,基本記憶體 上位記憶體 高階記憶體 擴充套件記憶體 擴充記憶體 保留記憶體等概念更是玄之又玄,難以徹底理解。所以我們特地介紹一下記憶體的基本概念。基本知識 記憶體 記憶體就是儲存程式以...
徹底理解鏈結器 一,概念
在介紹本章的主題之前,我們先來看幾個問題 問題一寫c c 的同學應該經常遇到這樣的乙個error undefined reference to abc 在遇到這樣的問題時你知道這背後到底 出問題了嗎?你通常都能順利解決類似問題嗎?問題二問題三 你的同學 同事在工作學習中可能不時就會提及到靜態鏈結庫動...