首页 > 系统相关 >Linux PAGE_ALIGN 宏定义的理解

Linux PAGE_ALIGN 宏定义的理解

时间:2023-10-30 12:04:25浏览次数:39  
标签:定义 ALIGN ion Linux PAGE SIZE


前言

  • 最近再阅读 Linux ion(一种内存分配管理)时,遇到了 PAGE_ALIGN 宏,这个宏到底是怎么工作的? 【页对齐】时什么意思? 页大小就是 4096 吗?

追踪 PAGE_ALIGN

  • 通过一步一步的追踪,终于了解了 PAGE_ALIGN 宏的最终展开定义。其实就是 PAGE_SIZE 对齐,Linux 上默认是 4096
  • 源头: Linux 内核 drivers\staging\android\ion\ion_buffer.c -> ion_buffer_alloc

Linux PAGE_ALIGN 宏定义的理解_1024程序员节

Linux PAGE_ALIGN 宏定义的理解_PAGE_SIZE_02

  • PAGE_ALIGN 的定义 include\linux\mm.h
/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
  • arch\arc\include\uapi\asm\page.h -> PAGE_SIZE 的定义: 4096 的来源 1<<12

Linux PAGE_ALIGN 宏定义的理解_#define_03

  • include\linux\kernel.h ALIGN 的定义实现
  • 继续展开: include\uapi\linux\const.h,获取 PAGE_ALIGN 的最终实现

Linux PAGE_ALIGN 宏定义的理解_linux_04

Linux PAGE_ALIGN 宏定义的理解_PAGE_SIZE_05

  • PAGE_ALIGN 的展开

((((len)) + ((typeof((len)))(((((1UL)) << (12)))) - 1)) & ~((typeof((len)))(((((1UL)) << (12)))) - 1))

  • 可以同时看到 mask (掩码)的巧妙获取,比如 PAGE_SIZE - 1

小结

  • 重视细节,掌握全局,认真阅读,勤做笔记
  • Linux 技术非常的使用,多研究,获取更多


标签:定义,ALIGN,ion,Linux,PAGE,SIZE
From: https://blog.51cto.com/zhangsz0516/8087239

相关文章

  • Linux常用命令汇总:太完整了,值得收藏!
    你们好,我的网工朋友。前段时间发了个交换路由相关的命令合集,不少做运维的朋友说,怎么没有运维人常用的Linux命令汇总?这不就安排上了嘛!搞运维,命令绝对是最基本的了,今天发的这些常用命令都掌握了,肯定能提升你的工作效率,都存起来啊。今日文章阅读福利:《运维必读书籍:Linux就该这样学(电......
  • linux常用命令大全(无废话精简版本)
    文章目录一、文件管理类指令ls:列出当前目录下的文件和目录。cd:改变当前目录。pwd:显示当前目录的路径名。cp:拷贝文件或目录。mv:移动文件或目录,也可以用来重命名。rm:删除一个文件或目录。mkdir:创建一个新的目录。touch:更改一个文件或目录的时间戳,如果文件不存在,则创建它。ln:创建硬链......
  • 嵌入式linux总线设备驱动模型分析
    嵌入式linux系统按照,分层,抽象的思想,按照这样的思想来设计我们的程序可以更容易写出耦合性低、独立性强、可重用性强的代码。Linux内核中更是存在着更多的分离、分层思想的代码,platform平台设备驱动就是用了这样的思想。本篇笔记我们一起来学习一下platform驱动框架。Linux引入platf......
  • 嵌入式linux系统中设备树基础知识
    笔记整理自百问网+正点原子前言之前分享的笔记:【Linux笔记】总线设备驱动模型中在platform_device部分有简单说明描述设备有两种方法:一种是使用platform_device结构体来指定;另一种是使用设备树来描述。本篇笔记我们就来简单地学习一下设备树的一些知识。什么是设备树设备树简单理解......
  • Linux 虚拟内存参数配置
    一、问题出发点Jun110:30:21audit1kernel:swapper:pageallocationfailure.order:1,mode:0x20Jun110:30:21audit1kernel:Pid:0,comm:swapperTainted:G---------------T2.6.32-431.20.3.el6.x86_64#1Jun110:30:21audit1kernel:CallTrace:Jun11......
  • 嵌入式linux系统设备树实例分析
    前言我们可以从LED程序中榨取很多知识:基本的驱动框架、驱动的简单分层、驱动的分层+分离思想、总线设备驱动模型、设备树等。这大多都是结合韦老师的教程学的。这篇笔记结合第6个demo(基于设备树)来学习、分析:框图下面是LED程序的几个层次结构图:注意:层与层之间的箭头指向是相对的,从哪......
  • 【Python】在linux环境下, Django 3.0+版本遇到的一些问题
    1.Django3.2版本升级后的一些报错,导致项目运行失败1.1site-packages/rest_framework/serializers.py fromdjango.db.models.fieldsimportFieldDoesNotExistImportError:cannotimportname'FieldDoesNotExist'解决办法:改变FieldDoesNotExist的导入方式fromdjango......
  • 实战攻防演练-Linux写入ssh密钥,利用密钥登录
    前言密钥形式登录的原理是利用密钥生成器制作一对密钥,一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过SSH暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也......
  • linux基本文件命令复习笔记
    1,放大缩小终端窗口字体  放大 ctrlshift+=   缩小  ctrl-2,6个常见终端命令 (1)ls  查看当前文件夹下的内容 (2)pwd 查看当前所在文件夹  (3)cd目录名 切换文件夹 (4)touch文件名 如果文件不存在,新建文件。和mkdir不同的是,mkdir创......
  • python进阶14大模块200页知识体系md笔记,第3篇:linux命令进阶
    本完整笔记从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、html+css、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。完整版笔记直接地址:请移步这里......