首页/新闻资讯/正文详情

init early_alloc_pgt_buf

发布时间:2026/9/26 3:58:27 来源:云帆数科 栏目:资讯中心
init early_alloc_pgt_buf
early_alloc_pgt_buf()是 Linux 内核 x86 架构启动早期用于初始化页表缓冲区的关键函数。它从brk区域申请一块内存并将其划分为页表页供后续的alloc_low_page()分配使用。代码逐行解析void __init early_alloc_pgt_buf(void) { unsigned long tables INIT_PGT_BUF_SIZE; // 1. 计算需要的内存大小 phys_addr_t base; base __pa(extend_brk(tables, PAGE_SIZE)); // 2. 从 brk 区域扩展并转为物理地址 pgt_buf_start base PAGE_SHIFT; // 3. 记录缓冲区起始页帧号 pgt_buf_end pgt_buf_start; // 4. 分配游标初始化为起始位置 pgt_buf_top pgt_buf_start (tables PAGE_SHIFT); // 5. 记录缓冲区结束页帧号 }关键变量与操作INIT_PGT_BUF_SIZE这是需要预留的总字节数由INIT_PGD_PAGE_COUNT * PAGE_SIZE计算得出。INIT_PGD_PAGE_COUNT会根据是否启用 KASLR 和 5 级页表动态调整通常在 6 到 16 个页面之间。extend_brk(tables, PAGE_SIZE)从内核镜像的brk区域“扩展”出tables字节的空间。brk区域是内核镜像的一部分在内核启动早期必然被映射因此可以作为页表分配的“启动资本”。PAGE_SIZE参数确保扩展后的地址按页对齐。__pa()将brk区域的虚拟地址转换为物理地址。页表项中需要填写的是物理地址因此这一步是必需的。三个关键全局变量pgt_buf_start缓冲区的起始页帧号PFN。pgt_buf_end当前分配位置初始时等于pgt_buf_start。pgt_buf_top缓冲区的结束页帧号。在启动流程中的角色这个函数在setup_arch()中被调用执行时机非常早。它解决了“先有鸡还是先有蛋”的问题要建立物理内存的直接映射需要页表。但要分配存放页表的内存又需要先有直接映射。pgt_buf就是在这个矛盾中提供的一个安全内存池。在直接映射完全建立之前alloc_low_page()会优先从这个缓冲区中取用内存来分配页表页。当pgt_buf_end追上pgt_buf_top即缓冲区耗尽时内核才会转向memblock去查找更多已映射的内存。设计意图这个函数体现了内核启动早期对确定性和安全性的追求使用brk区域而不是动态内存分配器是因为此时伙伴系统尚未就绪而brk区域是内核镜像的一部分其映射关系是确定且可靠的。

相关推荐

西安家电线下渠道选购指南:比价、安装与售后全解析
西安家电线下渠道选购指南:比价、安装与售后全解析

上个月朋友搬家,在“西安哪个家电商场买靠谱”这个问题上纠结了整整一周。我陪他跑了几个地方之后发现,真正该纠结的其实不是“哪个商场”,而是“你现在处在装修的哪个阶段、预算在哪档、愿不愿意花时间比价”。西安的家电零售渠道&#xff0… · 2026/9/26 3:58:27

撸了一个 MarkDown 编辑预览工具:TaoToken 统一 Key 接入 Mermaid、PlantUML、MathJax 渲染链路
撸了一个 MarkDown 编辑预览工具:TaoToken 统一 Key 接入 Mermaid、PlantUML、MathJax 渲染链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:58:21

Learn Claude Code:CodeAgent 状态机流程编排——Todo任务系统与自主智能体配置实战
Learn Claude Code:CodeAgent 状态机流程编排——Todo任务系统与自主智能体配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:58:21

Oracle AWR报告生成与解读:三分钟定位数据库性能瓶颈
Oracle AWR报告生成与解读:三分钟定位数据库性能瓶颈

前阵子凌晨一点被电话叫醒,生产库CPU直接拉满,登上去看系统状态一切正常,监听也在跑,会话数没有爆发式增长,但业务就是卡死。靠直觉猜了十分钟毫无头绪,最后是一份AWR报告让问题原形毕露——一条漏了索引的… · 2026/9/26 6:01:08

Claude Code模板实战:从失忆Agent到高效项目上下文固化
Claude Code模板实战:从失忆Agent到高效项目上下文固化

我真正开始重度使用 Claude Code,是在接手第四个完全陌生的代码仓库之后。工具本身安装不算难,难的是每次进入新项目,Agent 都会变得"失忆":上个月刚在这套技术栈上踩过的坑,换个仓库它又踩一遍;… · 2026/9/26 6:01:08

Claude代码模板工作流:CLI驱动的结构化Prompt工程实践
Claude代码模板工作流:CLI驱动的结构化Prompt工程实践

1. 项目概述:这不是一个“安装包”,而是一套可即插即用的 Claude 编程协作工作流模板 “claude-code-templates”这个标题乍看像某个 npm 包名,但实际翻遍 npm registry、GitHub 搜索、Claude 官方文档甚至社区讨论区,都找不到一… · 2026/9/26 6:01:08

Claude代码工作流引擎:CLI驱动的模板化代码生成协议
Claude代码工作流引擎:CLI驱动的模板化代码生成协议

1. 项目概述:这不是一个“模板库”,而是一套可执行的 Claude 代码工作流引擎“claude-code-templates”这个标题,第一眼容易被误解为一组静态的.js或.py文件集合——就像 GitHub 上常见的awesome-templates那样,点开就是几十个REA… · 2026/9/26 6:01:08

5G国际长途呼叫故障排查:从VoNR到IMS核心网全链路指南
5G国际长途呼叫故障排查:从VoNR到IMS核心网全链路指南

简介:一份面向5G核心网工程师、通信专业学生及国际漫游业务支撑人员的技术文档,系统讲解在5G网络中实现国际长途拨打的关键机制。内容围绕5GS与EPS互通的漫游架构展开,涵盖UE注册、AMF/NRF发现、SEPP安全通道、PDU会话建立,并重点… · 2026/9/26 6:01:08

制药MES系统架构解析:从电子批记录到系统集成与GMP合规
制药MES系统架构解析:从电子批记录到系统集成与GMP合规

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 6:01:02

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码