本文將主要以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控制器要併發的...