計算機記憶體定址

2021-06-28 08:27:43 字數 2134 閱讀 7177



摘自:1、基本概念:

cpu段式管理:段式管理的基本原理是指把乙個程式分成若干個段(segment)進行儲存,每個段都是乙個邏輯實體(logical entity)。乙個使用者作業或程序所包含的段對應乙個二維線形虛擬空間,程式通過分段(segmentation)劃分為多個模組,故可以對程式的各個模組分別編寫和編譯。段式管理程式以段為單位分配記憶體,然後通過位址影射機構把段式虛擬位址轉換為虛擬位址。

cpu頁式管理: 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁(一般為4k),頁式管理把記憶體空間按頁的大小劃分成片或者頁面(page frame),然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。

有了上述的基本概念後,很顯然,cpu將乙個虛擬記憶體空間中的位址轉換為實體地址,需要進行兩步:首先將給定乙個邏輯位址,cpu要利用其段式記憶體管理單元,先將每個邏輯位址轉換成乙個執行緒位址,再利用其頁式記憶體管理單元,轉換為最終實體地址。這就是我們所知道的段頁式管理,這樣兩次轉換的好處可以克服段式管理和頁式管理的缺點。

段識別符號是由乙個16位長的字段組成,稱為段選擇符,由處理器提供段暫存器來存放段識別符號,段暫存器有6種:

(1)cs **段暫存器,指向包含程式指令的段;

(2)ss 棧暫存器,指向包含當前程式的段;

(3)ds 資料段暫存器,指向包含靜態資料或者全域性資料段;

(4)其他三個暫存器es, fs, gs稱為附加段暫存器,作一般用途,可以指向任意的資料段。

偏移量指明了從段開始的地方到實際位址之間的距離,偏移量為32位。

如上圖為段識別符號(段選擇符)格式,其中最關鍵的部分為索引號。

段識別符號,按照其字面意思便可理解它的作用是用來標識乙個段的,而段是如何表示的呢?

這就引申到了另外乙個概念:段描述符,每個段由乙個8位元組的段描述符表示,它描述了段的特徵(段描述符就是段)。段識別符號通過索引號(13位)就可以找到其對應的段(段描述符),段的格式如下圖所示:

段描述符放在全域性描述符表(gdt,存放於gdtr暫存器中)或區域性描述符表(ldt,存放於ldtr暫存器中)中,通常只定義乙個gdt,而每個程序除了存放在gdt中的段之外如果還學要建立附加的段,就可以有自己的ldt。。

(1)先檢查邏輯位址的段選擇符的ti欄位,以決定段描述符儲存在哪乙個描述符表中。(ti=0表明在gdt中,ti=1表明存在ldt中)

(3)把邏輯位址的偏移量與步驟(2)中得到的base字段值相加就可以得到其對應的線性位址。

首先,我們得知道一些線性位址相關的東西。

(1)線性位址被分成固定長度為單位的組,稱為頁。頁內部連續的線性位址被對映到連續的實體地址中。

(2)分頁段元把所有的實體地址分成固定長度的頁框,稱為物理頁。

(3)線性位址對映到實體地址的資料結構稱為頁表。

(4)32位的線性位址,被分成3個域:目錄(directory)高10位,頁表(table)中間10位,偏移量(offset)低12位,由偏移量的12bit可知,每頁含有4096位元組的資料。

線性位址的轉換分兩步完成,每一步都基於一種都基於一種轉換表,第一種轉換表稱為頁目錄表轉換,第二種轉換稱為頁表轉換。使用這種二級模式的目的在於減少每個程序頁表所需的ram的數量。就像我們看書有個書目錄一樣,方便快捷。具體轉換如下圖所示:

轉換步驟:

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

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

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

(4)將頁的起始位址與線性位址中最後12位相加,得到最終我們想要的其對應的實體地址

計算機記憶體

1.1 計算機硬體記憶體架構。計算機cpu central processing unit 和記憶體的互動是最頻繁的,記憶體是我們的快取記憶體區。使用者磁碟和cpu的互動,而cpu運轉速度越來越快,磁碟遠遠跟不上cpu的讀寫速度,才設計了記憶體,使用者快取使用者io等待導致cpu的等待成本。但是隨著...

計算機記憶體管理

在計算機中,儲存區域主要分為 他們的執行速率自下而上加快,與之相應的造價越高。其中,硬碟的執行效率最慢,暫存器的效率最快。在c 中,記憶體主要分為五個區,分別是 區是用來儲存程式的所有 以及字串常量等在編譯期間就能確定的值,在程式的整個生命週期內,在常量資料區的資料都是可用的。在這個區域內,所有的資...

計算機記憶體分配 管理

當我們寫完乙個程式後,編譯 鏈結 執行,表面看似很簡單,其實程式執行過程中,記憶體為我們的程式做了很多事。我們先來看乙個圖 一般我們將記憶體分為 堆區 棧區 全域性區 區 常量區,各個區域存放的內容 棧區 在程式中所建立的區域性變數 引數 陣列 指標等,當程式執行完後,將釋放所占用的該塊記憶體。堆區...