free_page_tables图文并茂详细解读

RK3576+Android14集成RG200U-CN 5G模组深度适配指南 5G模组集成是嵌入式系统开发中的关键能力,其本质涉及硬件接口、内核驱动与Android通信框架的三层协同。PCIe物理链路稳定性决定模组识别基础,而Android 14重构的ModemService与AIDL HAL接口则要求严格遵循RIL新规范,不再兼容传统AT直连方式。RG200U-CN作为支持Sub-6GHz与VoNR的国产5G模组,其QMI协议私有性、PCIe供电时序敏感性及eSIM激活流程,均对RK3576平台提出独特适配要求。工程实践中需同步关注PCIe电气特性验证、内核TTY设备节点暴露逻辑、 阅读详情

具体解读对着图片看,图片的英文就是代码的变量
int free_page_tables (unsigned long from, unsigned long size)
{
        unsigned long *pg_table;
        unsigned long *dir, nr;

        if (from & 0x3fffff)// 要释放内存块的地址需以4M 为边界。
                panic ("free_page_tables called with wrong alignment");
        if (!from)// 出错,试图释放内核和缓冲所占空间。
                panic ("Trying to free up swapper memory space");
        // 计算所占页目录项数(4M 的进位整数倍),也即所占页表数。
        size = (size + 0x3fffff) >> 22;//size转换为4M的倍数,此时size为个页目录项的个数

 

// 下面一句计算起始目录项。对应的目录项号=from>>22,因每项占4 字节,并且由于页目录是从物理地址0 开始,因此实际的目录项指针=目录项号<<2,也即(from>>20)。与上0xffc 确保目录项指针范围有效。
        dir = (unsigned long *) ((from >> 20) & 0xffc);        /* _pg_dir = 0 */
        for (; size-- > 0; dir++){// size 现在是需要被释放内存的目录项数。
                if (!(1 & *dir))        // 如果该目录项无效(P 位=0),则继续。对着下图看
                        continue;        // 目录项的位0(P 位)表示对应页表是否存在。

 

pg_table = (unsigned long *) (0xfffff000 & *dir);        // 取目录项中页表地址。
                for (nr = 0; nr < 1024; nr++){        // 每个页表有1024 个页项。
                        if (1 & *pg_table)        // 若该页表项有效(P 位=1),则释放对应内存页。
                                free_page (0xfffff000 & *pg_table);
                        *pg_table = 0;        // 该页表项内容清零。
                        pg_table++;        // 指向页表中下一项。
                }
                free_page(0xfffff000 & *dir);// 释放该页表所占内存页面。但由于页表在物理地址1M以内,所以这句什么都不做。
                *dir = 0;                        // 对相应页表的目录项清零。
        }
        invalidate ();                // 刷新页变换高速缓冲。
        return 0;
}

linux内存管理memory.c 源码注释 /* * linux/mm/memory.c * * (C) 1991 Linus Torvalds */ /* * demand-loading started 01.12.91 - seems it is high on the list of * things wanted, and it should be easy to implement. - Linus */ ... 阅读详情

相关推荐

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 835

linux内存管理-linux/mm/memory.c/free_page_tables()【转】

http://blog.youkuaiyun.com/astonqa/article/details/7598548 看linux0.11的源码有一段时间了,发现前期的轮廓建立起来后,重点马上到了具体操作上。即函数,毕竟OS本身是由一系列函数组成的,“源码面前了无秘密”,所以要深刻理解操作系统的神奇,深入理解每一个函数的每一行代码很是关键。 接下来一段时间,会随着学习的步骤,参看赵炯博士的内核注释和网

le119126的专栏 1356

Workbench下列车转向架随机振动疲劳分析

结果中添加功率谱响应工具(Response PSD Tool),可以查看几何体以及远程点上的功率谱密度,如下图11所示,这里查看几何体上某一硬点的加速度功率谱密度响应曲线,如下图12所示。结果中添加疲劳工具(Fatigue Tool),查看列车转向架的疲劳寿命情况,这里采用窄带的寿命假设理论,曝光时间为1s指明计算出的疲劳寿命的基本单位是秒,寿命结果如下图14所示,可以看到最大寿命为1e35s,最小寿命为2.3542e18s,注意单位制,可再次基础上将其转换为小时或天。频域上的统计计算,软件很快计算完成。

ansysxuexizhe的博客 2605

深入浅出内存管理--alloc_pages与free_page分析(框图)

alloc_pages 从前面文章的介绍来看,alloc_pages用于连续物理内存的分配,它的实现如下图所示: 从这个流程图来分析,函数是一步一步调用到buffered_rmqueue的,alloc_pages是页分配器的对外接口,系统中很多模块和驱动可以直接调用它申请到内存,而buffered_rmqueue是底层伙伴系统算法的实现。它的流程图如下所示: 这里框图介绍了buffered_rm...

程序猿Ricky的日常干货 4772

AutoCAD Plant 3D自定义零件库实战:手把手教你用Python创建参数化槽式三通

本文详细介绍了如何利用Python脚本在AutoCAD Plant 3D中创建参数化槽式三通组件,从API原理到实战开发,帮助用户构建高效的自定义零件库。通过Python装饰器系统控制零件属性和行为,实现几何建模、参数管理和规格编辑器集成,提升工业管道设计的标准化和效率。

weixin_28267011的博客 336

SAP AI Core 高阶能力实战参考

文章摘要:本文探讨了在企业SAP架构中整合GenAI技术的工程化实践,重点分析了SAP AI Core的高阶能力应用。作者指出,企业级AI应用需解决多轮对话管理、Git同步工作流、提示词治理等核心问题,而非简单接入大模型API。技术方案展示了如何通过SAP AI Core的orchestration service管理对话历史,利用GitOps实现AI资产版本控制,并强调prompt template在审计合规中的治理价值。全文以SAP技术栈(ABAP/RAP/Fiori)为背景,阐释了AI能力与企业核心系

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 106

linux free函数 源码,Linux-0.11内核源码分析系列:内存管理free_page()与free_page_tables()函数分析...

/**Author:DavidLin*Date:2014-11-22pm*Email:linpeng1577@163.comorlinpeng1577@gmail.com*world:thecityofSZ,inChina*Ver:000.000.001*history:editortimed...

weixin_39968309的博客 267

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 989

Linux 内核解读之内存管理----memory.c

转载请注明原文出处http://blog.youkuaiyun.com/lizhiliang06/article/details/8655115 80x86体系结构中,Linux内核的内存管理程序使用分页管理方式。利用页目录和页表结构处理内核中其他部分代码对内存申请和释放操作。Memory.s是linux内存管理的核心,80x86内存管理最大寻址范围是4G的内存空间,在最大1024*1024*4KB的范

2026

芒果YOLOv8改进72:动态标签分配策略篇之ATSS:自适应训练样本选择Adaptive Training Sample Selection策略

YOLOv8代码实践|ATSS标签分配策略改进🥭

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2909

Spring AI 项目实战(一):Spring AI 核心模块入门

摘要:本文探讨了Spring Boot与Spring AI在Java生态下开发智能应用的技术融合。Spring Boot通过自动配置和嵌入式服务器简化企业级应用开发,其核心架构包括Spring Application和Web MVC框架。Spring AI则提供标准化接口,整合Hugging Face、TensorFlow等AI引擎,模块化支持NLP、CV和ML任务。文章通过代码示例展示了文本分类、图像处理和机器学习预测的实现,为开发者提供了Java生态下高效构建AI应用的解决方案。

博客 1533

linux0.11内存memory.c一些函数的简单的注释(一)

memory.c中一些函数自己的一些自己看法,有错大家指出来。或者是更好的解释可以个提出来呀。有什么问题也可以向rentiansheng@163.com发邮件, 谢谢大家。 1. 设置页表、页目录的位置 boot/head.s _pg_dir:              // 页目录将会存放在这里。因为这句话出现head.s第一个有效代码的位置,因为head.s移动到内存物理0的位置,

三月软件工作室--任忌 2605

手把手教你学Simulink--巴特沃斯滤波器设计与实现仿真

巴特沃斯滤波器的设计目标是拥有尽可能平滑的通带响应,这意味着在通带内信号衰减最小且没有波动。这种类型的滤波器非常适合用于音频处理、生物医学信号处理以及其他需要高保真度的应用场景。根据应用需求的不同,可以选择低通、高通、带通或带阻滤波器。明确你的系统需求,如输入信号类型(正弦波、方波等)、滤波器类型(低通、高通、带通或带阻)、截止频率、滤波器阶数等。假设我们需要设计一个4阶低通巴特沃斯滤波器,其截止频率为1kHz,用来过滤掉高于1kHz的所有频率成分。

MHD0815的博客 451

Linux-0.11内核源码分析系列:内存管理free_page()与free_page_tables()函数分析

/* *Author : DavidLin *Date : 2014-11-22pm *Email : linpeng1577@163.com or linpeng1577@gmail.com *world : the city of SZ, in China *Ver : 000.000.001 *history : editor time

linpeng1577的专栏 1456

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

linux/mm/memory.c/free_page_tables()

看linux0.11的源码有一段时间了,发现前期的轮廓建立起来后,重点马上到了具体操作上。即函数,毕竟OS本身是由一系列函数组成的,“源码面前了无秘密”,所以要深刻理解操作系统的神奇,深入理解每一个函数的每一行代码很是关键。 接下来一段时间,会随着学习的步骤,参看赵炯博士的内核注释和网上其他达人的点评注解,以每个函数为题目进行一个个人的注解。姑且厚颜算作原创吧,不为其他,只为记录下学习印记,加深

astonqa的专栏 2268

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

笔记 4 :linux 0.11 注释 get_free_page , get_limit , get_base , _set_base , invalidate , copy_page_tables

(27)本条目开始, 开始分析 copy_process () 函数,其又会调用别的函数,故先分析别的函数。

zhangzhangkeji的博客 361

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux0.11 kernel/exit.c中的free_page_tables()

上次看到do_exit中的free_page_tables(),因为其中牵扯到了内存管理中的分页和分段,看了两天终于明白了。今天继续看我们的init进程,就又回到free_page_tables。 free_page_tables(get_base(current-&gt;ldt[1]),get_limit(0x0f));free_page_tables(get_base(current-&gt;...

weixin_30429201的博客 140

crash utility help page: kmem

crash utility help page: kmem NAME kmem - kernel memory内核内存 SYNOPSIS kmem [-f|-F|-c|-C|-i|-v|-V|-n|-z|-o|-h] [-p | -m member[,member]] [[-s|-S|-r] [slab] [-I slab[,slab]]] [-g [fla...

mounter625的专栏 1027

opening tables mysql_MySQL 大量 Opening tables 案例分析-爱可生

因为一时间没法排查出具体原因,所以针对 MySQL 进程打了个快照,方便事后详细排查。二、分析栈帧用 pt-pmp 工具处理下快照后,内容比较多,这里只显示一些比较重要的堆栈:1402pthread_cond_wait,wait(os0event.cc:165),os_event::wait_low(os0event.cc:165),sync_array_wait_event(sync0arr.c...

weixin_34820733的博客 347

linux源代码阅读笔记 free_page_tables()分析

76 /* 77 * This function frees a continuos block of page tables, as needed 78 * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. 79 */ 80 int free_page_tables(u...

weixin_30257433的博客 123

Linux-Used内存到底哪里去了

前几天 纯上 同学问了一个问题:我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算?我有什么办法确定free中used的内存都去哪儿了呢?这个问题不止一个同学遇到过了,之前子嘉同学也遇到这个问题,内存的计算总是一个迷糊账。我们今天来把它算个清楚下!内存方面的概念很多,需要深入挖掘!

运维老生常谈 1787

Linux内存管理-函数详解

 0.11核提供的内存管理函数大部分在memery.c中,我将其中的函数从功能上分为三类:内存的分配与释放、页异常处理和内存初始化。第一类主要包括单个物理页的操作和页表的操作,单个物理页的操作就是一个物理页的申请、映射和释放;页表操作主要是多个页表的释放、复制。第二类主要是处理缺页异常和写保护异常的中断处理函数。第三类就是一个函数负责内存的初始化工作。一、内存的分配与释放1、get

chenglian_999的专栏 3183

Linux 0.95 内存管理

Linux 版本是从 0.12 到 0.95 的,具体情况感兴趣的自行搜索。这一系列的文章从 0.01 到 0.12,历经 4 个版本,除了 0.01 版本详尽解释所有的函数,其余版本都是在前一版本的基础上做新内容的介绍,这篇文章原先也是打算如此,但发现隔了几天没看源码,又是有些许生疏,更不用说读者了,而且对于 0.01 版本那个样式的代码解释,我看得不是很满意,注释离代码有点儿远,看着不是很舒服,因此这一篇文章将和 0.01 版本一样详尽的介绍每一个函数,但有些知识依旧不会像 0.01 版本说的那么基础。

snowlyw的博客 546

InnoDB INFORMATION_SCHEMA Buffer Pool Tables

InnoDB INFORMATION_SCHEMA Buffer Pool Tables InnoDB INFORMATION_SCHEMA缓冲池表提供有关InnoDB缓冲池中页面的缓冲池状态信息和元数据。 InnoDB INFORMATION_SCHEMA缓冲池表包括下面列出的表: mysql&gt; SHOW TABLES FROM IN...

dbtrd733355的博客 234
上一篇: android的system.img,userdata.img,ramdisk.img分析
下一篇: 获取当前进程指针!
刀客777
博客等级 码龄15年 11粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值