首页 > 系统相关 >Linux内核中的PAGE_SHIFT

Linux内核中的PAGE_SHIFT

时间:2024-11-21 21:41:19浏览次数:1  
标签:SHIFT 虚拟地址 偏移 内核 Linux PAGE

Linux内核中的PAGE_SHIFT

什么是PAGE_SHIFT?

在Linux内核中,PAGE_SHIFT是一个非常重要的宏,它定义了一个页的大小,通常是2的幂次方。这个值表示了虚拟地址空间中一个页的偏移量占用了多少位。换句话说,它告诉我们一个页的大小是多少字节。

PAGE_SHIFT的作用

  • 页大小的确定: PAGE_SHIFT直接决定了一个页的大小。例如,如果PAGE_SHIFT是12,那么一个页的大小就是2^12 = 4096字节。
  • 页表索引: 在页表中,每个页表项对应一个页。PAGE_SHIFT用于计算虚拟地址中的页号和页偏移。通过将虚拟地址右移PAGE_SHIFT位,可以得到页号;而将虚拟地址与PAGE_SIZE - 1做与运算,可以得到页偏移。
  • 物理地址计算: 在将虚拟地址转换为物理地址时,PAGE_SHIFT也起着关键作用。通过页表查找得到物理页框号,再将页偏移与物理页框号拼接,即可得到物理地址。

为什么使用PAGE_SHIFT?

  • 灵活性和可配置性: 通过改变PAGE_SHIFT的值,可以调整页的大小,从而适应不同的硬件和操作系统需求。
  • 简化计算: 使用位移操作可以高效地计算页号和页偏移,提高内存管理的效率。
  • 统一接口: PAGE_SHIFT提供了一个统一的接口,使得内核代码在处理不同页大小的系统时更加通用。

PAGE_SHIFT的典型值

  • x86-64架构: 通常为12,即页大小为4KB。
  • 其他架构: 可能会有不同的值,但通常也是2的幂次方。

示例代码

#include <linux/mm.h>

void example(unsigned long addr) {
    unsigned long page_mask = ~((1UL << PAGE_SHIFT) - 1);
    unsigned long page_frame_number = addr >> PAGE_SHIFT;
    unsigned long page_offset = addr & (PAGE_SIZE - 1);

    // page_frame_number: 页框号
    // page_offset: 页偏移
}

总结

PAGE_SHIFT是Linux内核中一个非常基础的概念,它直接影响到内存管理的效率和灵活性。通过理解PAGE_SHIFT的作用,可以更好地理解Linux内核的内存管理机制。

标签:SHIFT,虚拟地址,偏移,内核,Linux,PAGE
From: https://www.cnblogs.com/linhaostudy/p/18561611

相关文章

  • [Linux]进程控制
    进程控制进程创建fork函数作用fork函数的作用是用来创建一个新进程,新进程被称为子进程,而原来的进程称为父进程。返回值fork函数有两个返回值,给父进程返回子进程pid,给子进程返回0。为什么有两个返回值?在执行fork函数的时候,当fork函数的核心逻辑已经执行完成,准备return时,......
  • Linux下 GDB调试器的使用
    文章目录1.可执行程序的Debug版和Release版区别一、编译选项与目的二、性能与体积三、功能与特性四、查看可执行文件2.GDB相关命令GDB常用命令1.可执行程序的Debug版和Release版区别一、编译选项与目的Debug版:编译选项:通常使用包含调试信息的编译选项,如/MDd......
  • 使用再生龙CloneZilla进行Linux系统的镜像完全封装和还原
    写文章  使用再生龙CloneZilla进行Linux系统的镜像完全封装和还原巴布改不掉晚睡的咸鱼​关注 71人赞同了该文章CloneZilla可以将Linux完整移植到另一台机器中,保证数据,分区,挂载,启动项。。所有的一切完全一致注意:进行还原的机器需要......
  • Linux基础——yum downgrade和yum localinstall降级安装
    一、问题描述需求:租户需要从openssl-1.1.1t-11降级安装openssl-1.1.1f-36,安装包相关依赖问题;报错:rpm安装提示依赖问题 报错:yumlocalinstall本地rpm包无法安装; 二、解决办法1、方法一:yumdowngrade降级#通过本地rpm包或在线yum源安装,加上参数“--allowerasing”允许......
  • 从0开始学习Linux——Shell编程详解【04】
     期目录:从0开始学习Linux——简介&安装从0开始学习Linux——搭建属于自己的Linux虚拟机从0开始学习Linux——文本编辑器从0开始学习Linux——Yum工具从0开始学习Linux——远程连接工具从0开始学习Linux——文件目录从0开始学习Linux——网络配置从0开始学习Linux——......
  • linux之磁盘管理
    磁盘管理1.磁盘分类机械硬盘:盘片主轴传动手臂做机械运动类似DVD固态硬盘:内部是主板和U盘类似2.硬盘大小3.5英寸:台式机2.5英寸:笔记本服务器3.硬盘接口IDE接口过时scsi接口过时sata接口台式机3.0nvme接口固态硬盘SAS接口企业级4.硬盘存储......
  • Linux中如何批量删除系统中所有的自建用户
    一、需求分析在Linux系统中,一般情况下,系统用户(如root、bin、daemon等)的用户ID(UID)通常是小于1000的。对于自建用户(非系统用户),UID一般从1000开始分配。不过,这不是绝对的规则,具体的UID范围可以由系统管理员在创建用户时指定,或者根据系统的用户管理配置文件(如/etc/login.de......
  • 【linux之clickhouse的问题记录】记由于clickhouse服务内存打满导致cpu/mem都飙升然后
    在记录相关文档的过程中发现监控中关于该节点的clickhouse数据异常,随后在node节点监控中也不见该节点信息于是找到相关机器进行检查,堡垒机发现无法连接clickhouse的节点,随后找同网段的机器尝试ping一下测试连通性,随后发现无法ping通错误信息:From172.21.0.1icmp_seq=1Destin......
  • Metasploit Pro 4.22.5-2024111901 (Linux, Windows) - 专业渗透测试框架
    MetasploitPro4.22.5-2024111901(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releasedNov19,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框......
  • Metasploit Framework 6.4.37 (macOS, Linux, Windows) - 开源渗透测试框架
    MetasploitFramework6.4.37(macOS,Linux,Windows)-开源渗透测试框架Rapid7Penetrationtesting,2024-11-20请访问原文链接:https://sysin.org/blog/metasploit-framework-6/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org世界上最广泛使用的渗透测试框架......