頁框的劃分,在作業系統初始化時就已經完成(應該)
32位機的每一次定址需要32位的位址(實體地址)
linux 核心**結構:簡寫
struct task
struct mm_struct
分層管理:(介紹32位)
將定址過程變成多層的查詢,兩層的分成pgd和pt,三層加上pmd
位址劃分:
每個程序都有乙個分層管理機制,mm_struct中有乙個pgd_t的指標
pgd(32bit * 1024個條目)
pt(1024個pt,每個pt存放
32bit * 1024個條目)
定址過程:
cr3暫存器:存放當前程序的pgd(實體地址)
頁目錄:位址的23-32位是pgd的內部位址,用來在pgd的表項中尋找乙個條目,該條目指向乙個pt
頁表:位址的13-22位是pt的
內部位址,用來在pt的表項中尋找乙個條目,該條目指向乙個頁
頁內:0-12位為頁內位址(4k)
適用情況:
兩層:i386
三層:i386啟用pae,ia64
三層對映:
程序與系統虛擬儲存空間:(不考慮硬碟的swap)
每個程序有4g的虛擬儲存空間
0-3g為使用者空間
3g-4g為系統
虛擬儲存
空間(所有程序共享)
在linux原始碼page_32_types.h中有__page_offset的巨集定義,大小為3g,同時為使用者空間上限
邏輯上系統使用最高的1g空間,但是事實上是從0開始用的,所以需要__page_offset這個巨集
所以在系統空間(核心空間),實體地址為virt_addr- __page_offset,實體地址需要加上
__page_offset
notice:核心程式設計中使用的virt_to_phys()和phys_to_virt()函式就這個原理
21 Linux的目錄結構與目錄管理
linux目錄結構 1 目錄建立的規則 fhs 檔案系統層次化標準 指定了linux作業系統,那些目錄是一定要具備的 boot bin sbin etc sys proc mnt media usr option var home root tmp dev 2 目錄的結構 樹形結構 rootfs 根...
linux記憶體管理 分段管理
分段管理是從邏輯記憶體的角度來分的,就是將使用者程式位址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯資訊 分頁是從物理記憶體的角度,將記憶體按頁劃分,便於減小記憶體碎片 最早的處理器儲存空間較小,採用的是直接物理記憶體訪問的方式,這種稱為實模式 為了支援更大的儲存器,在8086時將位址...
Linux記憶體管理
本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...