页目录和页表结构

鸿蒙进阶——HDI及IDL硬件接口IPC框架小结 HDI(Hardware Device Interface):OpenHarmony硬件设备接口,定义系统中跨进程通信的接口,实现服务间的跨进程通信 阅读详情


上图反映了如下信息:

1、  进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G – high_memory)、内核动态映射空间(VMALLOC_START  -  VMALLOC_END)

2、  三个空间使用同一张页目录表,通过 CR3 可找到此页目录表。但不同的空间在页目录表中页对应不同的项,因此互相不冲突

3、  内核初始化以后,根据实际物理内存的大小,计算出 high_memory、VMALLOC_START、VMALLOC_END 的值。并为“内核直接映射”空间建立好映射关系,所有的物理内存都可以通过此空间进行访问。

4、  “进程空间”和“内核动态映射空间”的映射关系是动态建立的(通过缺页异常)

假设在有三个线性地址 addr1, addr2, addr3 ,分别属于三个线性空间,但是最终都映射到物理页面1:

1、  三个地址对应不同的页表和页表项

2、  但是页表项的高 20bit 肯定是1,表示物理页面的索引号是1

3、  同时,根据高 20 bit,可以从 mem_map[] 中找到对应的 struct page 结构,struct page 用于管理实际的物理页面(红线)

4、  从线性地址,根据页目录表,页表,可以找到物理地址

5、  Struct page 和物理地址之间很容易互相转换

6、  从物理地址,可以很容易的反推出在内核直接映射空间的线性地址(蓝线)。要想得到在进程空间或者内核动态映射空间的对应的线性地址,则需要遍历相应的“虚存区间”链表。

 
关于页目录表:


1、  每个进程有一个属于自己的页目录表,可通过 CR3 寄存器找到
2、  而内核也有一个独立于其它进程的页目录表,保存在 swapper_pg_dir[] 数组中

3、  当进程切换的时候,只需要将新进程的页目录把地址加载到 CR3 寄存器中即可

4、  创建一个新进程的时候,需要为它分配一个 page,作为页目录表,并将 swapper_pg_dir[] 的高 256 项拷贝过来,低 768 项则清0
 

手把手教你用AI工具快速开发UniApp首页:从设计稿到完整页面的实战流程 本文详细介绍了如何利用Claude Code、Cursor等AI工具高效开发UniApp首页的完整工作流。从设计稿解析、Prompt工程、代码生成优化到调试适配,提供了一套可复用的实战流程,帮助前端开发者大幅提升从设计到代码的转化效率。 阅读详情

相关推荐

ADS实战指南:负载牵引(Loadpull)在射频功放设计中的关键应用

本文深入解析了负载牵引(Loadpull)技术在射频功率放大器设计中的核心作用与实战方法。通过生动的比喻和详细的ADS软件操作指南,阐述了如何通过系统扫描负载阻抗,在史密斯圆图上绘制等功率线与等效率线,从而精准找到最优阻抗点,以平衡输出功率与效率,是应对5G等现代通信系统严苛要求的必备技能。

weixin_29198045的博客 603

OS内存管理之页表,页表项以及页目录

页表由多个页表项组成,即页表中每一行的就是一个页表项。 页表项中记录的信息: 页框号:记录虚页面对应的具体哪个物理页面 有效位:标识该页表项对应的虚页面有没有读进内存,否则在磁盘 访问位:引用位,标识该页面有没有被访问过 修改位:此页面在内存中有没有被修改过,如果被修改过,将来是要被持久化到磁盘上的,该标志位就是这个目的 保护位:标识该页面的读写等权限 页表项一般是由硬件设计的,因为地址转换时大多数是由硬件完成的。 引出页目录: 对于32位虚拟地址空间,假设页面大小为4K,页表项大小为4字节: 一个进程

KingOfMyHeart的博客 6007

模拟IC设计实战:折叠式共源共栅放大器的参数优化与噪声抑制

本文深入探讨了折叠式共源共栅放大器的核心设计要点。针对低电压下增益与输出摆幅的矛盾,文章详细阐述了从套筒式结构转向折叠式结构的必要性,并重点分析了其参数优化与噪声抑制的实战方法。通过手把手的参数计算流程,指导如何平衡增益、带宽、摆幅与功耗。同时,深入剖析了噪声来源,强调了采用PMOS输入对管以抑制1/f噪声,并提供了针对共栅管及电流镜的噪声优化策略,是模拟IC设计中高性能放大器设计的实用指南。

vv45678的博客 978

关于Linux内存寻址与页表处理的一些细节

http://blog.sina.com.cn/s/blog_533074eb0101ai5t.html 上图反映了如下信息: 1、 进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G– high_memory)、内核动态映射空间(VMALLOC_START - VMALLOC_END) 2、三个空间使用同一张页目录表,通过CR3可找到此

yiyeguzhou100的专栏 1万+

SAP采购申请详述;以及采购计划协议/交货计划行

SAP采购申请详述;以及采购计划协议/交货计划行

saplakes的博客 4344

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 794

什么是页表和页目录

4G内存分解为1M个内存页。 1K个页组成一个页表。 1K个页表组成一个页目录。 每一个程序都有个页目录,用来记录当前的所用到的内存页吗?

daojin505的专栏 1340

大厂校招:星宸科技嵌入式面试及参考答案(5万字长文)

当一个新的硬件设备被插入系统时,内核会发送一个设备事件通知 udev,udev 会根据设备的属性和规则,为该设备创建一个合适的设备文件。通过去除不必要的驱动程序、禁用不需要的功能、选择合适的内核配置选项、优化内核编译选项和定制内核模块等方法,可以减小内核的大小和复杂性,提高系统的性能和稳定性。上半部通常是在中断关闭的情况下执行的,以确保中断处理的原子性。处理碎片化内存是内存管理中的一个重要问题,可以采用内存压缩、内存池管理、伙伴系统、首次适应算法和最佳适应算法等方法来减少内存碎片的产生,提高内存的利用率。

大模型大数据攻城狮的专栏 2929

Linux从头学15:【页目录和页表】-理论 + 实例 + 图文的最完全、最接地气详解

作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 文章目录页表的拆分过程页目录结构几个相关的寄存器加载用户程序时: 页目录、页表的分配和填充过程线性地址到物理地址的查找、计算实例 在x86系统中,为了能够更加充分、灵活的使用物理内存,把物理内存按照4KB的单位进行分页。 然后通过中间的映射表,把连续的虚拟内存空间,映射到离散的物理内存空间。 映射表中的每一个表项,都指向一个物理页的开始地址。 但是这样的映射表有一个明显的缺点:映射表自身也是需保存在物理内存中的。 在 32.

IOT物联网小镇 3369

芯片测试:WAT、CP、FT

最近部门来了一个日本回来的同事,虽然他尽量用非常Poor的中文给我解释一些东西,其中还夹杂着一些英文让我很受挫,于是最近来学一下WAT中的常用的单词含义。直接去查缩写、查单词很难去记住,要把具体的东西放在具体的场景,引发知识的连接才会在脑子里留下一定的映像。感兴趣的一起来学习一下这篇不错的文章吧。注释是我查询记录,如有不妥,欢迎指出修正。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5091

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。

智能AI让学术科研更容易 1890

进程页表两级结构:页目录和页表页

进程页表的基本结构仅适合于小进程地址空间,在大地址空间下,该结构发生了变化。大虚址空间下的内存进程页表结构采用页表页和页目录。    32位意味着虚址空间可达4GB    虚址空间计算方法:32位的编址为232,232=210*210*210*22=4GB 1k=1024b 1m=1024K 1g=1024M    若虚址空间为2GB,在页长4KB时共有 2G=1024K*1024K

ZYX的专栏 1万+

华为OD机试真题 新系统 - 计算数列位置N的值 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2012

转 进程页表两级结构:页目录和页表页

进程页表的基本结构仅适合于小进程地址空间,在大地址空间下,该结构发生了变化。大虚址空间下的内存进程页表结构采用页表页和页目录。   32位意味着虚址空间可达4GB   虚址空间计算方法:32位的编址为232,232=210*210*210*22=4GB1k=1024b1m=1024K1g=1024M   若虚址空间为2GB,在页长4KB时共有2G=1024K*1024K*2    (2*1024*...

Stand_heo的博客 1932

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

操作系统 | 内存管理——页表、页表项、页目录、多级页表

一、页表、页表项 页表由多个页表项组成,即页表中每一行的就是一个页表项。 页表项中记录的信息: 页框号:记录虚页面对应的具体哪个物理页面 有效位:标识该页表项对应的虚页面有没有读进内存,否则在磁盘 访问位:引用位,标识该页面有没有被访问过 修改位:此页面在内存中有没有被修改过,如果被修改过,将来是要被持久化到磁盘上的,该标志位就是这个目的 保护位:标识该页面的读写等权限 页表项一般是由硬件设计的,因为地址转换时大多数是由硬件完成的。 二...

"You are worthy! You can do it!" 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

多级页表&页目录自映射学习记录_BUAAOS

多级页表&页目录自映射学习记录 在做虚拟内存管理时,有很多搞不懂的地方,所以在这里记录下来,以便日后查阅复习 多级页表 为什么采用多级页表 一级页表存在的问题 首先明确页表的概念,每个进程有一个页表,用于描述该进程占用的物理页面及逻辑排列顺序。页表记录虚页号和实页号的对应关系。页面大小固定→\rightarrow→页面偏移量固定;虚页大小由逻辑地址决定,除去页面偏移量的固定位数,剩余的就是虚页号了。那么如果逻辑地址空间很大,虚页就会很多,意味着我们要一片大大的连续地址空间 来存储一张好大好大的页表,

Yiman_bh的博客 6021

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

理论+实例,带你掌握Linux的页目录和页表

摘要:操作系统在加载用户程序的时候,不仅仅需要分配物理内存,来存放程序的内容;而且还需要分配物理内存,用来保存程序的页目录和页表。

华为云官方博客 1791

查缺补漏----页目录项和页表

查缺补漏----页目录项和页表(页目录项与页表的关系)

weixin_69884785的博客 1187

(单开)关于页目录项

引用一位老铁的话 就是相当于一个一本书的目录 一个H1的标题就是目录号,在H1下的所有H2标题都是该目录号索引的页表,每个H2标题里的H3就是第三级页表,而这第三级页表的一个个格子就是页号。 H1(目录号1) H2(次目录号1_1) H3(页号1_1_1) 数据块1 H3(页号1_1_2) 数据块2 H2(次目录号1_2) H3(页号1_2_1) 数据块3 H3(页号1_2_2) 数据块4 H1(目录号2) H2(次目录号2_1) H3(页号2_1_1) 数据块5 H.

Z_timer的博客 2402

32位系统 2级页表详解

进程页表两级结构:页目录和页表页    进程页表的基本结构仅适合于小进程地址空间,在大地址空间下,该结构发生了变化。大虚址空间下的内存进程页表结构采用页表页和页目录。    32位意味着虚址空间可达4GB    虚址空间计算方法:32位的编址为232,232=210*210*210*22=4GB 1k=1024b 1m=1024K 1g=1024M    若虚址空间为2GB,在

野生程序猿 1万+

页表的结构

当一个进程需要访问其虚拟内存空间中的某个地址时,操作系统会首先通过查找页目录表,使用前10位找到对应的页目录项,然后从该页目录项中读取出页表的物理地址。接着,操作系统会使用中间10位在页表中找到对应的页表项,从该页表项中读取出物理页框的地址。当操作系统查找一个地址的时候,先通过地址的前10位,确定这个地址所在的页数,找到页数以后,通过后中间10位找到该页中存放的物理页框的起始地址,后12位看作一个偏移量,在物理内存中找到对应的物理页框后加上这个偏移量就是实际的地址。页表项中包含了物理页框的地址。

nongcha_ice的博客 719

【Linux系统】页表结构

本文介绍了x86架构下的页表结构及其工作原理。虚拟地址通过分层页表结构映射到物理内存,该结构分为页目录、二级页表和偏移量三部分。页目录和二级页表采用类似数组的索引方式,通过10+10+12位的地址分割实现高效映射。这种设计不仅简化了内存管理,还支持权限控制、虚拟内存和地址空间隔离,同时减少内存碎片。4KB页面大小的选择平衡了内存管理和性能优化,并得到硬件广泛支持。MMU硬件组件负责实时地址转换,确保进程访问正确的物理内存地址。

2403_88316985的博客 1093
上一篇: 自动启动程序
下一篇: 2008安全漏洞发展趋势Top10
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值