2 1 linux儲存管理 記憶體管理基本框架

2021-08-04 02:24:52 字數 1364 閱讀 9027

頁框的劃分,在作業系統初始化時就已經完成(應該)

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 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...