orange s學習 記憶體 定址空間學習

2021-09-10 09:15:05 字數 4148 閱讀 1779

參考資料: 記憶體

記憶體是計算機中重要的部件之一,它是與cpu進行溝通的橋梁。計算機中所有程式的執行都是在記憶體中進行的,因此記憶體的效能對計算機的影響非常大。

記憶體(memory)也被稱為記憶體儲器,其作用是用於暫時存放cpu中的運算資料,以及與硬碟等外部儲存器交換的資料。只要計算機在執行中,

cpu就會把需要運算的資料調到記憶體中進行運算,當運算完成後cpu再將結果傳送出來,記憶體的執行也決定了計算機的穩定執行。

●物理儲存器和位址空間

物理儲存器和儲存位址空間是兩個不同的概念。但是由於這兩者有十分密切的關係,而且兩者都用b、kb、mb、gb來度量其容量大小,因此容易產生認識上的混淆。

初學者弄清這兩個不同的概念,有助於進一步認識記憶體儲器和用好記憶體儲器。

物理儲存器是指實際存在的具體儲存器晶元。如主機板上裝插的記憶體條和裝載有系統的bios的rom晶元,顯示卡上的顯示ram晶元和裝載顯示bios的rom晶元,

以及各種適配卡上的ram晶元和rom晶元都是物理儲存器。

儲存位址空間是指對儲存器編碼(編碼位址)的範圍。所謂編碼就是對每乙個物理儲存單元(乙個位元組)分配乙個號碼,通常叫作「編址」。

分配乙個號碼給乙個儲存單元的目的是為了便於找到它,完成資料的讀寫,這就是所謂的「定址」(所以,有人也把位址空間稱為定址空間)。

位址空間的大小和物理儲存器的大小並不一定相等。舉個例子來說明這個問題:某層樓共有17個房間,其編號為801~817。這17個房間是物理的,

而其位址空間採用了三位編碼,其範圍是800~899共100個位址,可見位址空間是大於實際房間數量的。

對於386以上檔次的微機,其位址匯流排為32位,因此位址空間可達2的32次方,即4gb。(雖然如此,但是我們一般使用的一些作業系統例如windows xp、

卻最多只能識別或者使用3.25g的記憶體,64位的作業系統能識別並使用4g和4g以上的的記憶體。)

好了,現在可以解釋為什麼會產生諸如:常規記憶體、保留記憶體、上位記憶體、高階記憶體、擴充記憶體和擴充套件記憶體等不同記憶體型別。

●各種記憶體:這裡需要明確的是,我們討論的不同記憶體的概念是建立在定址空間上的。

擴充套件記憶體

我們知道,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就是管理擴充套件記憶體的驅動程式。

上位記憶體

為了解釋上位記憶體的概念,我們還得回過頭看看保留記憶體區。保留記憶體區是指640kb~1024kb(共384kb)區域。

這部分區域在pc誕生之初就明確是保留給系統使用的,使用者程式無法插足。但這部分空間並沒有充分使用,因此大家都想對剩餘的部分打主意,

分一塊位址空間(注意:是位址空間,而不是物理儲存器)來使用。於是就得到了又一塊記憶體區域umb。

umb(upper memory blocks)稱為上位記憶體或上位記憶體塊。它是由擠占保留記憶體中剩餘未用的空間而產生的,它的物理儲存器仍然取自物理的擴充套件儲存器,它的管理驅動程式是ems驅動程式。

影子記憶體(shadow ram):

因為bios使用的rom比我們使用的普通記憶體ram要慢很多,所以人們就想出在啟動後把bios的rom裡面的資訊拷貝到我們插的記憶體條(ram)裡來,

提高讀取速度,而在ram裡的這些bios的資訊就叫做bios影子記憶體。

影子記憶體(shadow ram)是基本輸入輸出作業系統(bios)程式在隨機訪問儲存器(ram)中的乙個備份,它們能被更快的訪問。

影子記憶體中的訪問通常在60-100納秒範圍,而rom訪問在125-250奈米範圍。

shadow ram也稱為「影子」記憶體。它是為了提高系統效率而採用的一種專門技術。 shadow ram所使用的物理晶元仍然是cmos dram(動態隨機訪問儲存器)晶元。

shadow ram 佔據了系統主存的一部分位址空間。其編址範圍為c0000~fffff,即為1mb主存中的 768kb~1024kb區域。這個區域通常也稱為記憶體保留區,使用者程式不能直接訪問。 

shadow ram的功能是用來存放各種rom bios的內容。或者說shadow ram中的內容是rom bios的拷貝。因此也把它稱為rom shadow(即shadow ram的內容是rom bios的「影 子」)。 

在機器上電時,將自動地把系統bios、顯示bios及其它介面卡的bios裝載到shadow ram 的指定區域中。由於shadow ram的物理編址與對應的rom相同,

所以當需要訪問bios時,只需訪問shadow ram即可,而不必再訪問rom。

經過上面分析,定址空間的記憶體劃分可歸納如下:

●基本記憶體佔據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等。

dos下的「常規記憶體」只有640k,這640k就是從0--a0000h這段位址空間;

所謂「上位記憶體區」,指的就是20位位址線所能定址到的1m位址空間的上面384k空間,就是從a0001h--100000h這段位址空間,也就是我們說的用於rom和系統裝置的位址區域,這384k空間和常規記憶體的640k空間加起來就是20位位址線所能定址的完整空間1024kb;

由於80286和80386的出現使pc機的位址線從20位變成24位又變成32位,定址能力極大地增加,1m以上的記憶體定址

空間,我們統稱為「擴充套件記憶體」;

這裡面絕大部分記憶體區域只能在保護模式下才能定址到,但有一部分既可以在保護模式下,也可以在實模式下定址,這就是我們前面提到過的位址100000h--10ffefh之間的這塊記憶體,為了表明其特殊性,我們把這塊有趣的記憶體區叫做「高階記憶體」。

前面我們提過由於ibm的愚蠢設計給pc機的記憶體結構埋下了麻煩的伏筆,現在我們來說說這個麻煩。我們都見過pc機上的記憶體條,但是由於上位記憶體區的存在,這個記憶體條上的位址居然不能連續,就是說,這個記憶體條上要有0--a0000h的位址空間,還要有100000h--最大記憶體容量的位址空間,中間的384k位址空間必須留出來給rom用,在現如今乙個晶元就好幾兆的情況下,你說這個記憶體條應該怎麼做,當然我相信一定是可以做出來的,但肯定很麻煩,如果當初ibm把這個「上位記憶體區」放在位址低端,就是0--6000h這一部分,豈不是這個麻煩就沒有了?!

但是,實際的記憶體條上位址都是連續的,並沒有人把這段位址空間留出來給rom使用,原因很簡單,採用技術手段把這段位址空間空出來,比浪費這384k記憶體的成本還要高,所以在這個位址區域就出現了很奇怪的現象,rom和ram的位址重疊。 實際上,往往rom並不能完全覆蓋整個384k區域,這樣就會有一些位址沒有被rom占用,那麼這部分位址上的ram仍然是可以使用的。實際上,和rom重疊的這384k ram一般也不會被浪費,說到這裡,不得不說所謂的rom shadowing了,ram和rom的效能是有很大差異的,ram的訪問速度要遠遠大於rom,而且ram可以32位訪問,rom通常只能16位,

所以目前的pc機對這塊ram和rom重疊的區域的處理採用一種rom shadowing的技術方式,當機器加電後,先讓rom有效,ram無效,然後讀出rom內容,再讓rom無效,ram有效,把讀出的rom內容放到相同位址的ram中,並把相應位置的ram設定為唯讀,這樣就把rom搬到了ram中,位址完全一樣,只是效能比使用rom要高些,這塊ram就好像rom的shadow一樣。

orange s 中的定址

定址是我覺得入門時遇到的最難的最大的問題,因為這是有許多年輕人不知道的歷史典故的,必須有歷史的積澱 看orange s的時候,定址是最先的乙個坎,8086的歷史告訴我們,20位位址線 16位的暫存器 所產生的是無法直接定址的痛苦,這裡的直接是 單用乙個16位的暫存器來提交給cpu 因為畢竟還有4位的...

關於記憶體定址空間

記憶體的位寬是1個位元組,意思是每次訪問記憶體乙個位址單元的時候,可以讀 寫1個位元組,這是資料匯流排的寬度 而能夠定址多少個位址單元,則是位址匯流排的寬度,與資料匯流排寬度無關。舉個例子,一條街道上的有65536所房子 每個房間的面積都是8平方公尺 那麼你的門牌號碼就應當是0 65535號 2 1...

CPU 定址空間

我們都熟知32為的作業系統的定址空間的大小為4g,因此我們安裝乙個32位系統在配置4g的記憶體條,這似乎非常完美。但是當我們開啟任務管理器發現我們的物理記憶體只有3g左右。定址空間一般指的是cpu對於記憶體定址的能力。通俗地講,就是最多能用到多少記憶體的乙個問題。資料在儲存器 ram 中存放是有規律...