X86記憶體管理之分段管理

2021-04-19 20:12:22 字數 691 閱讀 9929

最近一直在學習x86彙編,自己打算從基礎的開始學習,對以後做嵌入式開發有一定的幫助。

今天看了關於在x86處理上兩種關於記憶體管理的方式:分段管理和分頁管理,以及課程中沒有講到的段頁式管理。

一.分段管理

在286以下的cpu中(8086,8088),位址線是20位,可定址範圍220b=1m。而在8088或8086中暫存器只有16位,即216b=64k,那麼如果利用16暫存器訪問到1m的位址空間呢?intel公司提出了記憶體分段管理機制:

1.段暫存器,首先1m記憶體空間正好被分為16個段,每個段的大小為64k。由於每個段為64k,那麼每個段的起始位址都應該是***x0h這種形式。從「***x0h」可以看出,這個20位的位址是不能被直接存放到16位暫存器中的,但從這個位址可以看出它的最低位總是0h=0000b,則將這個位址的最低位去掉後,就可以儲存到16位暫存器中,並將其稱為段暫存器。

2.段內偏移,由於現在每個段都有64 k空間,則必須有乙個儲存段內某乙個具體位址的16位暫存器,則將其稱為段內偏移量暫存器。

根據前面第一點「1.段暫存器」所說的,可知段暫存器中所儲存的內容是段基址被去掉最低位的0h=0000b而得到的,所以在計算真正實體地址時,必需將最後低位的0h=0000b補上,即將段基址左移四位則可得到,再加上段內偏移量,則實體地址的計算公式為:

物理址=段基址<<4 + 偏移量

由於時間關係,就寫到這裡吧, 有時間再將分頁管理寫出來!

之二 X86頁式記憶體管理

記憶體管理的目的是什麼?記憶體管理本身就像乙個外觀模式,它隱藏底層細節而給應用程式提供乙個統一易用的訪問記憶體的介面。程式可以訪問4g空間中的任意位址,但實際上物理記憶體可能只有幾百m,這之間的矛盾該怎麼解決?關鍵時刻,還是得抱硬碟的大腿。當可用記憶體不足時,將記憶體中不緊急的內容從記憶體中換出到磁...

x86中記憶體管理暫存器

一 記憶體管理暫存器 處理器提供了4個記憶體管理暫存器 gdtr ldtr idtr和tr 用於指定記憶體分段管理所用系統表的基位址,如圖4 2所示。處理器為這些暫存器的載入和儲存提供了特定的指令。有關系統表的作用請參見4.2節 保護模式記憶體管理 中的詳細說明。gdtr ldtr idtr和tr都...

x86記憶體定址

最近又研究了一下記憶體定址,沒有乙份資料能講的透徹,不是不細緻,而是缺乏整體感,都不全面,讓人看完後沒有乙個整體模型,現就我關心的問題記錄如下,如果要很全面很細緻的記錄的話會花費我很多精力,所以只是記錄大概流程,以後再慢慢修正吧。所有貼圖皆來自網路 一 分段的由來 1.8086 分段的產生主要是因為...