Linux記憶體管理1 記憶體定址

2022-05-06 10:09:07 字數 2727 閱讀 1702

本文將主要以x86架構為例來介紹linux記憶體管理的記憶體定址。

作業系統是橫跨軟體和硬體的橋梁, 

作業系統設計者必須在硬體相關**和硬體無關**之間劃分清晰的界限,以便作業系統很容易的移植到不同的平台

時代

處理器資料

匯流排寬度

是否有段

位址匯流排

寬度訪存

空間備註

石器時代

80808位無

16位64k

(1)由乙個主累加器(暫存器a)和6個次累加器(暫存器b,c,d,e,h和l)組成

(2)次累加器可以配對用來訪問16位的記憶體位址。

(3)訪問記憶體需要通過絕對位址,程式中位址必須通過硬編碼,難以重定位

青銅時代

8086

16位有

20位1m

(1)引入「段」,增加了4個段暫存器:cs、ds、ss和es,分別用於可執行**段、資料段、堆疊段及其他段,

(2)每個段暫存器都是16位的,對應於位址匯流排中的高16位,段大小為64k

(3)通過16位訪內位址(段偏移量)加上段暫存器<<4(段基址)得到 20位的位址,完成16位到20位的位址對映

**時代

80286

16位有

24位16m

(1)引入保護模式

(2)80286記憶體定址可以有兩種方式,一種是先進的保護模式,另一種是老式的8086方式,被稱為實模式。

(3)系統啟動時處理器處於實模式,只能訪問1m空間,經過處理可進入保護模式,訪問空間擴大到16m。

(4)每個段的大小還是64k

**時代

80386

32位有

32 位

4g(1)在段暫存器的基礎上構築保護模式,並保留段暫存器16位;

(2)從8086的16位到80386的32位處理器實質上是處理器體系結構的變化(ia32)

(3)從定址方式上說,就是從「實模式」到「保護模式」的變化

(4 )段的大小不再侷限於64k而是4gb

暫存器暫存器名

位數說明

8個通用暫存器

eax ebx ecx edx ebp esi edi

32位4個段暫存器

cs  ds ss es

16位(1)8080時cs  ds ss es分別用於存放可執行**的**段、資料段、堆疊段和其它段的基位址;

(2)80386後用於存放某個段的選擇符(段描述符表的索引),段基址(32位)存放在段描述符表(簡稱段表,每項為8個位元組)中,段描述符表的索引就是選擇符

指令指標暫存器

eip32位

(1)eip存放下一條將要執行指令的偏移量,這個偏移量是相對於當前正在執行的**段暫存器cs而言的

(3)eip中的低16位可以被單獨訪問,起名為指令指標ip暫存器,用於16位定址

標誌暫存器

eflags

32位存放有關處理器的控制標誌。很多標誌與16位elags含義相同

4個控制暫存器

32位

用於分頁機制。

(1)cr1是未定義的控制暫存器,供將來的處理器使用。

(2)cr2是缺頁線性位址暫存器,儲存最後一次出現缺頁的全32位線性位址(將在記憶體管理一章介紹)

(3)cr3是頁表基址暫存器,儲存頁表的實體地址,頁表總是放在以4k位元組為單位的儲存器邊界上,因此,其位址的低12位總為0,不起作用

注:實模式pe和pg為0,保護模式pe和pg為1

頁目錄主要用於二級定址,用於存放頁表的基址,可定址到頁表,頁表用於定址到頁

4個系統位址暫存器

8個除錯暫存器

1個測試暫存器

應用程式設計師看到的位址空間稱為虛擬位址空間,其中的位址稱為虛擬位址

一段連續的、不分段的,範圍從0到4gb的位址空間,乙個線性位址就是一段線性位址空間的乙個絕對位址

段機制把虛擬空間的乙個位址轉化線性位址空間的乙個線性位址。選擇符是段描述符表的索引,通過它找到段描述符表中的的某項,它儲存段的基址。再加上偏移量就可以得到線性位址

分頁機制將線性位址轉換為實體地址,通過線性位址查詢到相應的頁目錄或頁表,再通過線性位址中的偏移量就可以得到實體地址

注:intel手冊規定段機制是必選的,它規定分段機制是必須得,分頁機制是可選的

如上可以看到虛擬位址空間的段基址+段長度與線性位址空間的轉換關係

1. x86三種模式?

保護模式、實模式、虛擬模式。

實模式段暫存器儲存段的基位址;保護模式段暫存器儲存的是段描述符表的索引,可以定位到對應的段描述符得到段的基址

2.x86保護模式的作用?

保護模式主要是保護核心空間的許可權;

多使用者系統下保護各個程序的程序空間

3.為何8位機**不可重入?

4.32位機的資料匯流排和位址匯流排的關係?

[1] linux記憶體管理講座ppt-陳莉君

記憶體管理之記憶體定址

記憶體定址 三種記憶體位址 邏輯位址 logical address 包含機器語言指令中用來指定乙個運算元或一條指令的位址 線性位址 linear address 線性位址也稱為虛擬位址 virtual address 實體地址 physical address 用於記憶體晶元級記憶體單元定址,他們...

linux 記憶體定址

1 實體地址 虛擬位址及線性位址 2 虛擬位址到實體地址的過程 記憶體定址的過程可以簡單理解為虛擬位址到實體地址的轉換過程。程式設計師所使用的虛擬位址,並不是直接送到記憶體匯流排,而是被送到記憶體管理單元 mmu,由乙個或一組晶元組成是一種硬體電路,實現虛擬位址到實體地址的轉換 mmu包括分段機制和...

linux 記憶體定址總結

邏輯位址到實體地址的轉換過程 邏 輯位址經過記憶體控制單元 mmu 的分段單元硬體電路之後轉換成線性位址,線性位址經過分頁單元的硬體電路轉換成實體地址。在mp中,多個cpu通過記憶體 仲裁器對ram進行併發的訪問 每個ram有乙個仲裁器 在up中也是有記憶體仲裁器的,因為cpu和dma控制器要併發的...