Linux下的位址對映

2021-08-09 15:21:13 字數 2376 閱讀 7759

在cpu中設定四個「段暫存器」 cs ds ss es 分別用於可執行**即指令,資料,堆疊和其他;

每個段暫存器都是16位,對應位址匯流排的高16位。

每條「訪內指令」的內部位址都是16位。

訪內**的內部位址(16位)轉化成實際位址(20位);

-->段暫存器中內基位址<<4+內部位址;

對於每乙個由段暫存器的內容確定的「基位址」,乙個程序總能訪問從此開始的64k位元組的連續位址空間,不能對訪問乙個程序的內容加以限制。乙個cpu如果缺乏對記憶體訪問的限制或者保護就談不上什麼記憶體管理;

段式記憶體管理機制

在原有暫存器的基礎上增設了二個暫存器;乙個是全域性段描述表暫存器gdtr,另乙個是區域性性的段描述表暫存器ldtr。分別用來指向儲存在記憶體中的乙個段描述結構陣列(段描述表)。

段暫存器不在儲存基位址。最低的2位表示,特權級別(00核心態,11使用者態),第3位表示使用

gdtr/ldtr,高13位

儲存gdtr/ldtr的陣列下標。

段描述表項的定義

通過段暫存器找到相應的段描述表項,b 表示基位址; l表示段長度及一些其他資訊。

(1)根據指令性質確定使用哪乙個段暫存器

(2)根據段暫存器內容,找到相應的「位址段描述結構」

(3)從位址段描述結構中得到基位址

(4)將指令中發出的位址為位移,與段描述結構中規定的段長度相比,看看是否越界。

(5)根據指令的性質和段描述符中的訪問許可權來確定是否越權。

(6)將指令中發出的位址為位移,與基位址相加而得到實際的「實體地址」。

通過段暫存器找到段描述表暫存器,從而獲得線性位址(段式對映中的實體地址)。

(1)從cr3中得到頁面目錄(pgd)的基位址。

(2)以線性位址中的dir位段(22-31位)為下標,在目錄中取得相應頁面表的基位址。

(3)以線性位址中的page位段(12-21位)為下標,在所得到的頁面表中取得相應的頁面描述項。

(4)將頁面描述項中給出的頁面基位址與線性基位址中的offset位段(0-11位)相加得到實體地址。

每個程序都有其自身的頁面目錄pgd,指向這個目錄的指標保持在每個程序的mm_struct資料結構中。每當排程乙個程序進入執行的時候,核心都要為即將執行的程序設定好控制暫存器cr3,而mmu的硬體則總是cr3中取得指向當前頁面目錄的指標。

乙個頁面表項或目錄表項的大小為4個位元組,1024(2^10)個表項正好也是4k位元組;

段式儲存管理機制的靈活性和效率都比較差。

80386把線性位址空間劃分成4k位元組的頁面,每個頁面可以被對映至物理儲存空間中任意一塊4k位元組大小的區間(邊界必須與4k位元組對齊)。在頁式存管中,連續的線性位址經過對映後在物理空間卻不一定連續(靈活)。

當要將一部分物理空間的內容換出到磁碟上的時候,在段式儲存管理中要將整個段(通常很大)都換出,而在頁式儲存管理中則是按頁進行,效率更高。

目錄項含有指向頁面表的指標,頁面表項中含有指向頁面起始位址的指標。

由於頁面表和頁面的起始位址都總是在4k位元組的邊界上,這些指標的低12位都為0;目錄項和頁表項都只要20位用於指標就夠了。而餘下12位可以用於控制或其他目的。

第7位(在目錄項中保留不用)為d(dirty)標誌,表示該頁面已經被寫過,所以已經「髒」了;當p為0,表示相應的頁面或頁面表不在記憶體上。

核心中有個全域性量mem_map,是乙個指標,指向乙個page資料結構的陣列。每個page資料結構代表乙個物理頁面,整個陣列就代表著系統中的全部物理頁面。因此,頁面表項的高20位對於軟體和mmu硬體有著不同的意義。對於軟體,這是乙個物理頁面的序號,將這個序號用作下標就可以從mem_map找到代表這個物理頁面的page資料結構。對於硬體,則(在低位補上12個0後)就是實體地址的起始位址。

在對映過程中,mmu首先檢查的p標誌位,它指示所對映的頁面是否在記憶體中。只有在p標誌位為1的時候,mmu才會完成對映的全過程;否則就會因不能完成對映而產生一次缺頁異常。

對於軟體來說,頁面表項為0表示尚未為這個表項(所代表的虛存頁面)建立對映,所以還是空白;而如果頁面表項不為0,但p標誌為0,則表示對映已經建立。但是所對映的物理頁面不在記憶體中(已經換到交換裝置上)。

linux下的分段分頁 位址對映

首先我們要注意的是虛擬空間分為核心空間和使用者空間。1.從邏輯位址到線性位址的轉換 對於linux來說,基本不使用分段的機制,或者說,linux中的分段機制只是為了相容ia32的硬體而設計的。linux核心的設計並沒有全部採用intel所提供的段方案,僅僅有限度地使用了一下分段機制。這不僅簡化了li...

Linux位址對映 位址轉換 mmap,vma

一,線性對映與非線性對映 1.記憶體管理 物理記憶體管理 linux 記憶體最小管理單位為頁 page 通常一頁為 4k。初始化時,linux 會為每個物理記憶體也建立乙個 page 的管理結構,操作物理記憶體時實際上就是操作 page 頁。某些裝置會對映在物理記憶體位址外,這些位址會在使用時建立 ...

linux的內網位址對映到公網位址

1.啟用閘道器伺服器路由 功能 root localhost vi etc sysctl.conf net.ipv4.ip forward 1 root localhost sysctl p 2.為區域網訪問internet 的資料報採用snat策略,將源位址更改為伺服器的 公網ip 位址 root...