分頁基本原理 linux0 11

2021-06-27 15:46:19 字數 1188 閱讀 7377

我們都知道cpu定址過程是:邏輯位址-(分段)->線性位址-(分頁)->實體地址。

邏輯位址由段選擇符和段偏移位址兩部分組成;可以通過段選擇符在段描述符表中找到段基位址,段基位址+段偏移位址=線性位址。

在32位cpu架構中,mmu使用的是平坦記憶體模型,即所有的段基位址都是0,所以邏輯位址可以很容易在分段過程中過渡到線性位址。

分頁的主要作用就是將線性位址轉化為實體地址。

在linux0.11核心中:

有1個頁目錄,共1024目錄項(每項4byte);

每1個目錄項對應乙個頁表,共1024個頁表項;

每1個頁表項對應一頁「物理頁記憶體」,一頁物理頁4k。

剛好是32位cpu最大定址空間1024*1024*4k=4g。

而linux0.11支援16m的物理=4(目錄項)*1024(頁表項)*4096k(/頁) 。

分頁可以看做是線性位址通往實體地址的一道門,門前的都是32位的線性位址,線性位址=目錄項(前10位)+頁表項(中間10位)+偏移位址(後12位)組成,  

目錄項(10位,對應1024目錄項)

頁表項(10位,對應1024頁表項)  「注意,頁表項在系統初始化時是空的,當發生缺頁操作時,才會填充頁表項的值」

偏移位址(12位,對應4096byte的物理頁偏移)

這樣,在定址時,通過線性位址的前10位定位到某一目錄項,通過中間10位定位到此目錄項的頁表項(對應物理頁),通過後12位定位到此頁表項中具體實體地址。

分頁主要用於虛擬化,即在某一時刻,雖然記憶體只被某一程序使用,但在人的感官中,所有程序共享了記憶體。就像圖書館(硬碟)裡只有1本書(物理記憶體),但是有10個人(多程序)要看這本書,最好的處理辦法就是每個人只能看1天(cycle),第1個人看完之後還回圖書館,第2個人再看,然後第3個人,10天之後,所有人都看了這本書,相對於這10天時間,這本書被所有人共享。分頁機制就是利用這種方式將有限的物理記憶體最大利用化。

同時,分頁很好的解決了記憶體碎片問題(相對於分段、粒度很小),支援了寫時拷貝技術、記憶體和檔案對映,有效的交換空間處理等。

注(圖1來自google搜尋,圖2來自《linux核心完全注釋》)

分頁基本原理 c

分頁是web應用程式非常重要的乙個技術。資料庫中的資料可能是成千上萬的,不可能吧這麼多的資料一次顯示在瀏覽器上面。一般根據每行資料在頁面上所佔的空間每頁顯示若干行,比如一般20行是乙個比較理想的顯示狀態。分頁方法主要有以下兩種思路 1 取出所有符合條件的資料,放到資料集或者記憶體中,然後逐頁瀏覽。例...

mysql分頁sql基本原理

假設資料庫表student存在13條資料。語句1 select from student limit 9,4 語句2 slect from student limit 4 offset 9 語句1和2均返回表student的第10 11 12 13行 語句2中的4表示返回4行,9表示從表的第十行開始...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...