天天看點

深入了解計算機系統-之-記憶體尋址(一)--存儲管理機制(虛拟位址,線性位址,實體位址) 實體位址(physical address) 分段機制與邏輯位址(logical address) 分頁機制與線性位址(linear address) 位址空間和位址轉換

用于記憶體晶片級的單元尋址,與處理器和cpu連接配接的位址總線相對應。

這個概念應該是這幾個概念中最好了解的一個,但是值得一提的是,雖然可以直接把實體位址了解成插在機器上那根記憶體本身,把記憶體看成一個從0位元組一直到最大空量逐位元組的編号的大數組,然後把這個數組叫做實體位址,但是事實上,這隻是一個硬體提供給軟體的抽像,記憶體的尋址方式并不是這樣。

是以,說它是“與位址總線相對應”,是更貼切一些,不過抛開對實體記憶體尋址方式的考慮,直接把實體位址與實體的記憶體一一對應,也是可以接受的。也許錯誤的了解更利于形而上的抽像。

intel為了相容,将遠古時代的段式記憶體管理方式保留了下來。

邏輯位址指的是機器語言指令中,用來指定一個操作數或者是一條指令的位址。

intel中段式管理中,對邏輯位址要求,“一個邏輯位址,是由一個段辨別符加上一個指定段内相對位址的偏移量,表示為 [段辨別符:段内偏移量]

用分段方法來配置設定和管理虛拟存儲器。把任務的位址空間分成若幹段,而每一段有自己的段名和段大小。任務所使用的每一個位址空間都抽象為段基址:段偏移的格式,極大的友善了程式的編寫和調試。 作業系統有實模式和保護模式兩種,比如以前使用單片機那就是實模式,申請的位址就是實際的實體位址,尋址空間有限。而保護模式可以擴充到4g的虛拟位址,是以現在的作業系統都是運作在保護模式下的。 在x86架構下的系統,必須先将段管理的邏輯位址轉換為虛拟位址,再将虛拟位址轉換為實體位址(如果打開了分頁管理的話)。而arm架構是沒有分段管理的,是以直接将虛拟位址轉換為實體位址。

線性位址(linear address)或也叫虛拟位址(virtual address),跟邏輯位址類似,它也是一個不真實的位址,如果邏輯位址是對應的硬體平台段式管理轉換前位址的話,那麼線性位址則對應了硬體頁式記憶體的轉換前位址。

用分頁方法來配置設定和管理實存。即把整個主存分成大小相等的存儲塊,可裝入作業的任何一頁。 這樣配置設定記憶體時,作業系統以塊為機關将程序中的若幹個頁分别裝入到多個可以不相鄰接的實體塊中。

“頁”,我們稱之為實體頁,或者是頁框、頁桢的。是分頁單元把所有的實體記憶體也劃分為固定長度的管理機關,它的長度一般與記憶體頁是一一對應的。

1、分頁單元中,頁目錄是唯一的,它的位址放在cpu的cr3寄存器中,是進行位址轉換的開始點。萬裡長征就從此長始了。

2、每一個活動的程序,因為都有其獨立的對應的虛似記憶體(頁目錄也是唯一的),那麼它也對應了一個獨立的頁目錄位址。——運作一個程序,需要将它的頁目錄位址放到cr3寄存器中,将别個的儲存下來。

3、每一個32位的線性位址被劃分為三部份,面目錄索引(10位):頁表索引(10位):偏移(12位)

依據以下步驟進行轉換:

1、從cr3中取出程序的頁目錄位址(作業系統負責在排程程序的時候,把這個位址裝入對應寄存器);

2、根據線性位址前十位,在數組中,找到對應的索引項,因為引入了二級管理模式,頁目錄中的項,不再是頁的位址,而是一個頁表的位址。(又引入了一個數組),頁的位址被放到頁表中去了。

3、根據線性位址的中間十位,在頁表(也是數組)中找到頁的起始位址;

4、将頁的起始位址與線性位址中最後12位相加,得到最終我們想要的葫蘆;

虛拟存儲器由大小可變的存儲塊(段)構成。實模式下直接由段基址:段偏移來得到虛拟位址。而保護模式下,cpu采用稱為段描述符的資料來描述段的位址,大小和屬性資訊以及使用情況。虛拟存儲器的位址(邏輯位址)由訓示描述符的段選擇子和段内偏移兩部分構成,這樣的位址合成為虛拟位址空間。

例如,通過這種轉換,80386支援的虛拟控件就達到64t位元組。程式員編寫程式時使用的存儲位址空間是虛拟位址空間。是以我們可以認為有64t的存儲空間可供使用。

顯然,隻有在實體存儲器的程式才能夠被執行,也隻有實體存儲器中的資料才可以被通路。是以,虛拟位址空間必須被映射到實體位址空間,二維的虛拟必須被轉換成一維的實體位址。而由于實體位址空間遠小于虛拟位址空間。是以隻有虛拟位址空間的部分可以映射到實體位址空間。由于實體存儲器的大小遠小于實體位址的空間,是以隻有上述部分中的部分才能真正映射到實體存儲器。

每一個任務都有一個虛拟位址空間。為了避免多個并行任務的多個虛拟位址空間直接映射到同一實體位址空間,采用線性位址空間來隔離虛拟位址空間和實體位址空間。

線性位址空間由一維的線性位址構成,線性位址空間和實體位址空間對等。

是以将一個虛拟記憶體空間中的位址轉換為實體位址,需要進行兩步:首先将給定一個邏輯位址,cpu要利用其段式記憶體管理單元,先将為個邏輯位址轉換成一個線程位址,再利用其頁式記憶體管理單元,轉換為最終實體位址。

深入了解計算機系統-之-記憶體尋址(一)--存儲管理機制(虛拟位址,線性位址,實體位址) 實體位址(physical address) 分段機制與邏輯位址(logical address) 分頁機制與線性位址(linear address) 位址空間和位址轉換

通過描述符表和描述符,分段管理機制實作了虛拟位址到線性位址的映射。完成了把二維的虛拟位址轉換為一維的線性位址。這一步總是存在的。

分頁管理機制把線性位址空間和實體位址空間分别劃分為大小相同的塊,這樣的塊稱為頁。通過線上性位址空間的頁和實體位址空間的頁之間建立的映射表,分頁管理機制實作了線性位址空間到實體位址空間的映射,實作線性位址到實體位址的轉換。分頁管理機制是可選的,在不采用分頁管理機制時,線性位址空間就直接等同于實體位址空間,線性位址直接等于實體位址。

轉載:http://blog.csdn.net/gatieme/article/details/50646824