新闻详情

新闻详情

首页 / 资讯中心 / 详情

init early_alloc_pgt_buf

发布时间:2026/9/27 8:20:20来源:尧图网络
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区域是内核镜像的一部分其映射关系是确定且可靠的。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

使用 Bot Framework Rich Cards 构建富卡片交互机器人:BotUsingCards 示例深度解析 2026/9/27 8:20:03

使用 Bot Framework Rich Cards 构建富卡片交互机器人:BotUsingCards 示例深度解析

示例工程 【免费下载链接】ailab Experience, Learn and Code the latest breakthrough innovations with Microsoft AI 项目地址: https://gitcode.com/gh_mirrors/ai/ailab 点击查看 免费下载 本指南围绕 Microsoft AI Lab 仓库中的 GoogleAssistantConnector/De…

阅读更多 →
端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50% 2026/9/27 8:19:57

端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50%

端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50%在移动端、车机座舱或边缘网关设备上部署端侧 SLM(如 2B~7B 量化模型、语音/视觉多模态模型)时,用户体验的第一道鬼门关就是冷启动耗时(Cold Sta…

阅读更多 →
RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战 2026/9/27 8:19:57

RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战

RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战在私有化或 SaaS 模式的 RAG(检索增强生成)系统交付上线后,很多小厂往往会遭遇一种始料未及的“财务危机”:系统刚上线一周,客户的…

阅读更多 →
MCP Server 跨语言 SDK 封装与统一契约测试平台实战 2026/9/27 8:19:56

MCP Server 跨语言 SDK 封装与统一契约测试平台实战

MCP Server 跨语言 SDK 封装与统一契约测试平台实战随着 Model Context Protocol(MCP) 成为全球多智能体工具接入的事实标准,大型企业内部的技术栈呈现出**“多语言并存、异构系统交织”**的格局: 算法团队主要使用 Python&#x…

阅读更多 →
状态恢复与快照测试:测试中的状态回滚与时间旅行 2026/9/27 8:19:49

状态恢复与快照测试:测试中的状态回滚与时间旅行

状态恢复与快照测试:测试中的状态回滚与时间旅行在现代前端复杂业务应用(如富文本编辑器、低代码拖拽画布、复杂配置向导、在线协同白板)的研发中,“状态快照(State Snapshot)、撤销回滚(Undo/R…

阅读更多 →
网站备案完成通知书获取完整流程与源码解析 2026/9/27 8:19:49

网站备案完成通知书获取完整流程与源码解析

网站备案完成通知书获取完整流程与源码解析 很多老板手里有项目,急着上线网站,但卡在最后一步:不知道《网站备案完成通知书》到底长啥样,更不知道后台代码里怎么调取这份文件。自己不会代码,找外包又嫌贵,还怕被坑。别慌,今天我就把这套 完整流程…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉