Linux开发讲课16--- 【内存管理】页表映射基础知识2

news2025/2/23 6:22:50

ARM32页表和Linux页表那些奇葩的地方

ARM32硬件页表中PGD页目录项PGD是从20位开始的,但是为何头文件定义是从21位开始?

历史原因:Linux最初是基于x86的体系结构设计的,因此Linux内核很多的头文件的定义都是基于x86的,特别是关于PTE页表项里面的很多比特位的定义。因此ARM在移植到Linux时只能参考x86版本的Linux内核的实现。

X86的PGD是从bit22 ~ bit31,总共10bit位,1024页表项。PT页表从bit12 ~ bit 21 ,总共 10 bit位,1024页表项。

ARM的PGD是从bit20 ~ bit31,总共12bit, 4096页表项。PT域从bit12 ~ bit 19,总共8bit,2556页表项。

X86和ARM页表最大的差异在于PTE页表内容的不同。

Linux内核版本的PTE比特位的定义

/*
 * "Linux" PTE definitions for LPAE.
 *
 * These bits overlap with the hardware bits but the naming is preserved for
 * consistency with the classic page table format.
 */
#define L_PTE_VALID  (_AT(pteval_t, 1) << 0)  /* Valid */
#define L_PTE_PRESENT  (_AT(pteval_t, 3) << 0)  /* Present */
#define L_PTE_USER  (_AT(pteval_t, 1) << 6)  /* AP[1] */
#define L_PTE_SHARED  (_AT(pteval_t, 3) << 8)  /* SH[1:0], inner shareable */
#define L_PTE_YOUNG  (_AT(pteval_t, 1) << 10) /* AF */
#define L_PTE_XN  (_AT(pteval_t, 1) << 54) /* XN */
#define L_PTE_DIRTY  (_AT(pteval_t, 1) << 55)
#define L_PTE_SPECIAL  (_AT(pteval_t, 1) << 56)
#define L_PTE_NONE  (_AT(pteval_t, 1) << 57) /* PROT_NONE */
#define L_PTE_RDONLY  (_AT(pteval_t, 1) << 58) /* READ ONLY */

#define L_PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
#define L_PMD_SECT_DIRTY (_AT(pmdval_t, 1) << 55)
#define L_PMD_SECT_NONE  (_AT(pmdval_t, 1) << 57)
#define L_PMD_SECT_RDONLY (_AT(pteval_t, 1) << 58)

ARM32的PTE比特位的定义

/*
 *   - extended small page/tiny page
 */
#define PTE_EXT_XN  (_AT(pteval_t, 1) << 0)  /* v6 */
#define PTE_EXT_AP_MASK  (_AT(pteval_t, 3) << 4)
#define PTE_EXT_AP0  (_AT(pteval_t, 1) << 4)
#define PTE_EXT_AP1  (_AT(pteval_t, 2) << 4)
#define PTE_EXT_AP_UNO_SRO (_AT(pteval_t, 0) << 4)
#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0)
#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1)
#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0)
#define PTE_EXT_TEX(x)  (_AT(pteval_t, (x)) << 6) /* v5 */
#define PTE_EXT_APX  (_AT(pteval_t, 1) << 9)  /* v6 */
#define PTE_EXT_COHERENT (_AT(pteval_t, 1) << 9)  /* XScale3 */
#define PTE_EXT_SHARED  (_AT(pteval_t, 1) << 10) /* v6 */
#define PTE_EXT_NG  (_AT(pteval_t, 1) << 11) /* v6 */

那X86和ARM的页表差距这么大,软件怎么设计呢?Linux内核的内存管理已经适配了X86的页表项,我们可以通过软件适配的办法来解决这个问题。因此,ARM公司在移植该方案时提出了两套页表的方案。一套页表是为了迎合ARM硬件的真实页表,另一套页表是为了迎合Linux真实的页表。

对于PTE页表来说,一下子就多出了一套页表,一套页表256表项,每个表项占用4字节。为了软件实现的方便,软件会把两个页表合并成一个页表。4套页表正好占用256 * 4 * 4 = 4K的空间。因此,Linux实现的时候,就分配了一个page 来存放这些页表。

这一套方案的话,相当于每个PGD页表项有8字节,包含指向两套PTE页表项的entry。每4个字节指向一个物理的二级页表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1866541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…

服务器部署与DDOS攻防

知识点&#xff1a;DHPC与Web服务部署&#xff0c;DHCPig攻防&#xff0c;SYN Flooding测试 DHCP&#xff1a; 能够自动为客户机获取IP等参数 DHCP是动态主机配置协议&#xff08;Dynamic Host Configuration Protocol&#xff09;的缩写&#xff0c;它是一种网络管理协议&am…

华三交换机的软件版本升级操作

升级操作很常见&#xff0c;掌握方法是关键 实验环境&#xff1a;1台华三S6520-EI交换机&#xff0c;版本从2432P03升级成2432P05。 整体思路&#xff1a; 1.先查验软件版本 2.官网下载对于设备型号的软件版本 3.配置交换机地址使得与电脑进行通信&#xff0c;使用TFTP/FTP工…

UFS协议—新手快速入门(五)【11-13】

目录 十一、逻辑单元&#xff08;Logical Unit, LU&#xff09; 1、概念 2、UFS逻辑单元的独立特性 3、Well known LU &#xff08;1&#xff09;Boot Logical Units&#xff08;BOOT LUs&#xff09; &#xff08;2&#xff09;RPMB&#xff08;Replay Protected Memory…

27. 高级特性(下)

目录 一、为了类型安全和抽象而使用 newtype 模式二、使用类型别名创建类型同义词2.1 使用type关键赋予现有类型一个别名2.2 减少重复2.3 与Result<T, E>结合使用2.4 从不返回的 never type 三、高级函数和闭包3.1 函数指针3.2 返回闭包 四、宏4.1 宏和函数的区别4.2 mac…

ElasticSearch8.X查询DSL语法案例进阶实战

什么是Query DSL Query DSL主要由两部分组成&#xff1a;查询和过滤。 查询部分&#xff1a;用于指定搜索条件和匹配规则。例如&#xff0c;可以使用match查询进行全文检索&#xff0c;term查询进行精确匹配&#xff0c;range查询进行范围匹配等。过滤部分&#xff1a;用于对查…

【八股系列】探索响应式布局的奥秘:关键技术与实战代码示例

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【为什么组件中的 data 必须是一个函数&#xff0c;然后 return 一个对象&#xff0c;而 new Vue 实例里&#xff0c;data 可以直接是一个对象&#xff1f;】 &#x1f3a0; …

【python】eval函数

1.eval函数的语法及用法 &#xff08;1&#xff09;语法&#xff1a;eval(expression) 参数说明&#xff1a; expression&#xff1a;必须为字符串表达式&#xff0c;可为算法&#xff0c;也可为input函数等。 说明&#xff1a;表达式必需是字符串&#xff0c;否则会报错&a…

(2024,稀疏高秩适配器(SHiRA),适配器快速切换和多适配器融合,稀疏掩码,稀疏高秩且正交的适配器,移动场景部署)

Sparse High Rank Adapters 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 介绍 2. 背景&#xff1a;LoRA 的边缘部署挑战 3. 提议的方法 3.1 稀疏高秩适配器&#xff0…

共享资源,共谋协同发展新机遇

树莓集团在资源共享与协同发展方面取得了显著成效。通过优化资源配置、构建产业服务平台、校企合作育人、推动产业转型升级以及主导产业园运营与建设等举措&#xff0c;树莓集团不仅促进了数字产业的快速发展&#xff0c;也为各数字产业园区和合作企业提供了更多的发展机会和合…

Compiled blocks

目录 一&#xff0c;编译块 Compiled Block 二&#xff0c;编译循环 三&#xff0c;调用编译块 Invoke 四&#xff0c;Tips and notes 一&#xff0c;编译块 Compiled Block 在几何体网络内&#xff0c;可将网络的一部分放入编译块&#xff08;compiled block&#xff09;内…

天润融通:AI赋能客户体验,推动企业收入和业绩增长

“客户体验已经成为全球企业差异化的关键。人工智能与数据分析等创新技术正在加速推动企业在客户体验计划中取得成功&#xff0c;以保持领先地位”。Customer Insights & Analysis 研究经理Craig Simpson说道。 客户体验 (CX&#xff0c;Customer Experience) 是客户在与企…

基于PHP+MySql的留言管理系统的设计与实现

功能概述 网页留言板管理系统&#xff0c;用户层面分为普通用户和管理员&#xff0c;并设权限&#xff08;即后台留言管理系统普通用户不能访问&#xff0c;别人的留言自己不可以修改删除&#xff0c;未登录不能使用留言功能&#xff09;&#xff0c;功能包括用户登录注册、留…

鸿蒙开发HarmonyOS NEXT(一)

最近总听见大家讨论鸿蒙&#xff0c;前端转型的好方向&#xff1f;先入门学习下 目前官方版本和文档持续更新中 一、开发环境 提示&#xff1a;要占用的空间比较多&#xff0c;建议安装在剩余空间多的盘 1、下载&#xff1a;官网最新工具 - 下载中心 - 华为开发者联盟 (huaw…

【Mac】王国保卫战:起源 for mac(塔防策略游戏)游戏介绍和安装教程

游戏介绍 《王国保卫战&#xff1a;起源》&#xff08;Kingdom: Origins&#xff09;是一款策略塔防游戏&#xff0c;其核心玩法融合了塔防、策略管理和资源管理元素。游戏的主要目标是在一个开放的像素化世界中建立和管理自己的王国&#xff0c;并抵御夜晚来袭的怪物入侵。 …

c语言学习记录(十)———函数

文章目录 前言一、函数的基本用法二、函数的参数传递1.基本方式2 数组在函数中的传参 前言 一个学习C语言的小白~ 有问题评论区或私信指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、函数的基本用法 函数是一个完成特定功能的代码模块&…

使用Dropout大幅优化PyTorch模型,实现图像识别

大家好&#xff0c;在机器学习模型中&#xff0c;如果模型的参数太多&#xff0c;而训练样本又太少&#xff0c;训练出来的模型很容易产生过拟合的现象。在训练神经网络时&#xff0c;过拟合具体表现在模型训练数据损失函数较小&#xff0c;预测准确率较高&#xff0c;但是在测…

gc.log中 CMS-concurrent-abortable-preclean

问题 在gc日志中看到 2024-06-26T16:16:07.5040800: 64690272.666: [CMS-concurrent-abortable-preclean-start]CMS: abort preclean due to time 2024-06-26T16:16:12.5530800: 64690277.716: [CMS-concurrent-abortable-preclean: 1.052/5.049 secs] [Times: user1.33 sys0…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

C语言 指针——向函数传递字符串

目录 向函数传递字符串 计算实际字符个数 用字符数组编程实现字符串复制 用字符指针编程实现字符串复制 关于程序的效率的几点建议 向函数传递字符串 向函数传递字符串时  既可用 字符数组 作函数参数  也可用 字符指针 作函数参数 Simulating Call by reference &…