驱动开发学习20250516

内核内存管理

系统内存布局——内核空间和用户空间

虚拟地址空间

  • 大小:4G(32位系统)

  • 分割为内核空间虚拟地址和用户空间虚拟地址

  • 分割方式:用户空间为较低的3GB虚拟地址空间,内核使用剩余的1GB

  • 内核地址在地址空间的起始位置的默认值:0xc0000000,
    此值可以修改:X86:0xc0000000, ARM:80000000

  • 访问内核空间地址需要特权模式

  • 常见布局
    .------------------------0xffffffff(4GB)
    内核空间地址
    .------------------------CONFIG_PAGE_OFFSET 0xc0000000
    用户空间地址

    .------------------------00000000

  • 每个进程共享地址空间的原因:将内核的虚拟地址映射到每个进程的虚拟地址空间能够避免每次进入或退出内核时内存地址切换产生的开销

  • 内存管理单元将内存分为大小固定的单元——页面,一个页面包含4096字节(4KB)

虚拟地址和物理地址的映射

  • 内存页、虚拟页:长度固定的连续虚拟内存块

  • 帧(页面帧):固定长度的连续物理内存块

  • 页面表:用来存储虚拟地址和物理地址之间映射

  • 内存与页面对齐:内存地址正好从页面的开头开始。
    地址是系统页面大小(4096)整数倍的所有内存都称为与页面对齐

内核地址——低端和高端内存

  • 低端内存:内核地址空间的第一个896MB空间
    内核空间中存在逻辑地址的内存
    逻辑地址:线性映射到物理地址上的内核空间中的地址,可以用偏移量或位掩码将其转换为物理地址

  • 高端内存是指超过896MB的那部分,内核用它临时映射1GB以上的物理内存。

虚拟内存地址访问

  • 虚拟内存地址构成:虚拟页码和偏移量
  • 访问虚拟内存对应的物理内存:
  1. 提取偏移量和虚拟页码
  2. 遍历进程的页面表
  3. 匹配虚拟页码和物理页面,访问该页面帧中的数据
  4. 根据偏移量找到帧中正确的位置

页面分级

N级中的每个表项将指向N+1级表中的项
四级分页模式

  • 页面全局目录(PGD):每个进程只有一个PGD,最多包含1024项
  • 页面上部目录(PUD)
  • 页面中间目录(PMD)
  • 页面表(PTE)

页面查找和TLB

  • 转换后备缓冲器(TLB):缓存最近访问的虚拟页面的PTE
    每次内存访问时,MMU首先检查TLB中最近使用过的页面,
  • TLB查找:访问虚拟内存时,CPU遍历TLB,试图找到正在访问页面的虚拟页码
  • TLB命中:当找到TLB项时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值