第十学 linux内核——内存寻址——分页机制(2)

Linux内存寻址——分页机制 一、 分页机制 分页机制在段机制之后进行,完成线性地址到物理地址的转换。段机制把虚拟地址转换为线性地址,分页机制进一步把该线性地址转换为物理地址。 如果不允许分页(控制寄存器CR0的最高位置0),那么经过段机制转化而来的32位线性地址就是物理地址。但如果允许分页(CR0的最高位置1),就要将32位线性地址通过一个地址变换机制转化成物理地址。80x86规定,分页机制是可选的,但很多操作系统主要采... 阅读详情

        前面我们提到linux是如何把程序的逻辑地址通过摒弃段机制直接映射到线性地址空间,这节我们讨论linux如何实现线性地址到物理地址的映射。

        我们强调过linux如何致力于做出一个强大的可移植系统。linux为了可移植,采用了三级分页模式,以支持一些64位机。于是linux定义了以下三种类型的页表:

        页总目录(PGD)、页中间目录(PMD)、页表(PT)。linux的三级分页看起来是这样:(图片来自《linux操作系统原理与应用(陈莉君)》)

        跟我们前边提到的两级分页原理一样。

        x86是支持两级目录的,那如果我们要把linux的三级分页模式移植到这样一个结构上要怎么做呢?

        linux同样有非常巧妙的办法。

        我们说每一个进程都有自己的页目录和页表集,当进程切换发生时,linux把CR3控制寄存器的内容保存在前一个执行进程的PCB中,然后把下一个进程PCB中CR3的值装入CR3,这样我们就能正确的找到自己在物理内存中的地址。

        linux把PMD(页中间目录)看做只有一项的表,并把它存在PGD表项中,页表的中间目录被巧妙的折叠到页表总目录中,从而适应二级页表。

 

Linux内存寻址之分段机制及分页机制 前言 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。 分段到底是怎么回事 相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这就导致我们知其然不知 阅读详情

相关推荐

深入Linux内核(内存篇)—页表映射分页

深入Linux内核(内存篇)—页表映射一、分页二、X86中的分页三、ARM中的分页四、Kernel中的分页 操作系统的核心任务是对系统资源的管理,而重中之重的是对CPU和内存的管理。为了使进程摆脱系统内存的制约,用户进程运行在虚拟内存之上,每个用户进程都拥有完整的虚拟地址空间,互不干涉。 而实现虚拟内存的关键就在于建立虚拟地址(Virtual Address,VA)与物理地址(Physical Address,PA)之间的关系,因为无论如何数据终究要存储到物理内存中才能被记录下来。 如下图所示,进程1和进程

liyuewuwunaile的博客 9049

Linux内核之浅谈内存寻址

我们知道计算机是由硬件和软件组成,硬件主要包括运算器、控制器、存储器、输入设备和输出设备,软件主要是操作系统和用户应用软件,其中操作系统是联系硬件和软件的桥梁。文本主要分享运算器关于内存寻址的重点内容,从内存寻址的硬件机制重点和内核代码动手实践两部分来分享,欢迎交流。

金荣的个人技术博客 1628

内存寻址之分页机制

写在前面:分页机制完成线性地址到物理地址的转换 80x86 规定分页机制是可选的。分段和分页没有什么必然联系,分段可以说是 Intel 的 CPU 一直保持着的一种机制,而分页只是保护模式下的一种内存管理策略。想开启分页机制,CPU必须工作在保护模式,而工作在保护模式可以不开启分页。分页机制由控制寄存器 CR0 中的 PG 位启用,如PG=1则启用分页机制,把线性地址转换为物理地址;如果PG=0则直

Tanswer_ 5833

Linux内核页表映射分页机制原理

​ 最初8086处理器使用的是实地址,后来Intel为解决地址宽度不足的问题从而引入分段机制,再后来为进一步保护数据又引入分页机制,从而衍生出MMU、CRn等寄存器和物理单元,演变为至今的分段加分页的寻址系统。

weixin_47555079的博客 1937

內存寻址(二) —— Linux下的内存寻址

在内存寻址(一)中主要介绍了常规内存寻址的机制 这一篇总结一下Linux下的内存寻址。 Linux更喜欢分页 1.分段可以把逻辑地址分成不同的线性地址,而分页则可以把相同的线性地址映射到不同的页框中。Linux为了能够使所有进程“”看到“”相同的线性地址而选择非常有限地使用分段机制,这样简化了内存管理的难度。 2.Linux的设计目标是能够移植到多种流行的平台,而使用RISC的处理器对段机制支...

呆呆觉得这事儿不简单的博客 541

Linux内核空间内存管理(一):内存寻址、内存管理机制综述

内存寻址 、硬件中的分段与分页 、Linux内存管理 页与内存管理区 、kmalloc()和vmalloc()

ZY-JIMMY 6140

深入理解Linux内核页表映射分页机制原理

操作系统用于处理内存访问异常的入口操作系统的核心任务是对系统资源的管理,而重中之重的是对CPU和内存的管理。为了使进程摆脱系统内存的制约,用户进程运行在虚拟内存之上,每个用户进程都拥有完整的虚拟地址空间,互不干涉。而实现虚拟内存的关键就在于建立虚拟地址(Virtual Address,VA)与物理地址(Physical Address,PA)之间的关系,因为无论如何数据终究要存储到物理内存中才能被记录下来。2022年嵌入式开发想进互联网大厂,你技术过硬吗?

wswlz的博客 2055

深入理解Linux内核:内存寻址精要

本文还有配套的精品资源,点击获取 简介:本书为Linux操作系统内部机制的专业读者提供了深入探讨。第二章专注于Linux内核的内存寻址,解释了内存管理和使用的细节,包括物理内存、虚拟内存、页和页框的概念及其在Linux中的应用。页表的层次结构、内存分配(包括slab分配器和伙伴系统)、交换机制以及内存保护和页故障处理等关键主题都会得到详细介绍。读者通过本章的学习,将能深入理...

weixin_28895791的博客 1131

Linux内存管理:内存寻址之分段机制与分页机制

目录 Linux 内存寻址之分段机制 前言 分段到底是怎么回事? 实模式的诞生(16位处理器及寻址) 保护模式的诞生(32位处理器及寻址) IA32的内存寻址机制 寻址硬件 IA32的三种地址 MMU地址转化过程 IA32的段寄存器 分段机制的实现 段描述符 段描述符表 总结 Linux中分段的实现 总结 Linux 内存寻址之分页机制 硬件中的分页 为什么使用两级页表 两级页表结构 页目录项 页面项 线性地址到物理地址的转换 扩展分页 页面高速缓存 Li

RToax 1009

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

(详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、安装opencv-python 这里推荐使用pycharm直接安装opencv-python 打开文件——设置——python解释器——点击+号 搜索opencv-python,点击安装包,等待片刻即可安装好 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好 import cv2 二、准备分类器 咱们使用opencv官方提供的分类器,包括面部识别,侧...

qq_52852432的博客 1万+

linux内核之内存寻址

内存地址 理解内存地址 1.内存地址的分类 逻辑地址 线性地址(虚拟地址) 物理地址 2.三种内存地址之间的转换 内存控制单元(MMU)通过一种称为分段单元的硬件电路将一个逻辑地址转换为线性地址;紧接着通过第二个分页单元把线性地址转换为物理地址。 硬件分段 Intel微处理器以两种不同的地址模式运行,分别是实模式和保护模式,实模式一般是为了兼容早期的模型,现在我们从保护模式来看硬件中的分段问题。 1.一个逻辑地址由两部分组成 段标识符 段标识符又称段选择符,是一个16位的字段,如下图: 段内

抱猫人的博客 2199

RK3568点不亮EK79007 MIPI屏?别急着改时序,先检查这个初始化命令

本文深入解析RK3568开发板调试EK79007 MIPI屏幕时初始化命令的关键作用,揭示80%的时序问题实际源于命令配置不当。通过典型故障案例,详细拆解初始化命令的调试方法、寄存器映射及系统化排查流程,帮助工程师快速定位和解决屏幕点亮问题。

weixin_33657090的博客 349

【Linux 内核知识梳理 10】Linux内存寻址之分段机制

【Linux 内核知识梳理 10】Linux内存寻址之分段机制及分页机制一、分段的由来1、实模式的诞生(16位处理器及寻址) 一、分段的由来 相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这就导致我们知其然不知其所以然。下面我们先扒一下分段机制产生的历史。 1、实模式的诞生(16位处理器及寻址) 在8086处理器诞生之前,内存寻址方式就是直接访问物理地址。 本文学自:《Linux内存寻址之分段机制及分页机制》 ...

|~~~热爱生活、努力学习的小伙汁~~~| 604

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 489

Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))

1. Hugging Face是什么,提供了哪些内容 2. Hugging Face模型的使用(Transformer类库) 3. Hugging Face数据集的使用(Datasets类库)

iioSnail的博客 8万+

Linux的内存寻址——浅谈分段和分页机制

本文会以80x86架构,linux2.6为例,简单介绍内存的分段和分页机制。1. 三种内存地址关于内存地址,首先要了解它有三种,分别是逻辑地址、线性地址和物理地址。把逻辑地址转换为线性地址是由一个叫做分段单元的硬件电路完成的。同样地,还有一个叫做分页单元的硬件电路负责把线性地址转换为物理地址。那现在很明确地,当我们讨论分段的时候,就是讨论逻辑地址是如何转换成线性地址的。当我们讨论分页的时候,就是在...

HelloNerd的博客 1644

基于物联网设计的蜂箱智能监测系统设计

为解决传统养蜂业依赖人工、管理效率低下、干扰蜂群等问题,本项目设计并实现了一套基于物联网(IoT)的蜂箱智能监测系统。

683

linux内核寻址,Linux内核分析与应用2-内存寻址

2.1 内存寻址数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂计算机体系结构中的核心问题之一,就是如何有效地进行内存寻址; 内存寻址技术,从某种程度上代表了计算机技术.“段”的引入:段描述了一块有限的内存区域,区域的起始位置存在专门的寄存器,也就是段寄存器中.“保护模式”的引入:访问内存时不能直接从段寄存器中获得段的起始地址,而需经过额外的转化或检查“黄金时代”:Linux...

weixin_29523709的博客 521

MySQL——cost成本计算之MySQL如何选择使用索引(trace)

文章目录前言trace工具分析执行计划 前言 在之前博客中,根据测试案例,发现同样的sql语句,因为传入的条件值的不同,导致MySQL有时候选择使用索引,有时候又不适用索引。 如下所示sql的执行计划: EXPLAIN SELECT * FROM employees WHERE name > 'aaa'; EXPLAIN SELECT * FROM employees WHERE name > 'zzzz'; 在MySQL中,为什么会出现上述这种玄乎的现象呢? 本篇博客重点说明原因。 在说

专注写bug 679

多角度模板匹配的模板创建技巧

基于形状的模板匹配多角度创建技巧

manuoo的专栏 3402

Linux内核(三)——内存寻址

这是因为段选择符的长度为13比特,所以总共有2^13个数值,但是0值的段选择符是无效的。段描述符的作用就是让CPU能够知道要访问的是内存的哪个位置,如下图中内存有一个段(比如数据段)是CPU要访问的,原本的方式是段寄存器中的段选择符指向描述符表中对应的段描述符,段描述符再指向内存中的段。②从段选择符的index字段计算段描述符的地址,index字段的值乘以8(一个段描述符的大小),这个结果与gdtr或ldtr寄存器中的内容相加(这个内容就是gdt或者ldt的地址,也就是其在内存中的位置)。

qq_46146657的博客 1561

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《深入理解linux内核》-2-内存寻址

这一章深入详细介绍了地址转换的过程(逻辑地址=>线性地址=>物理地址),和与之相关的分页、分段机制,还包括PAE、TLB、硬件高速缓存等

文杰的博客 1327

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Linux 内核知识梳理 11】Linux内存寻址之分页机制

【Linux 内核知识梳理 11】Linux内存寻址之分页机制一、硬件中的分页1、为什么使用两级页表2、两级页表结构3、页目录项4、页面项5、线性地址到物理地址的转换6、扩展分页7、页面高速缓存8、页面高速缓存9、总结 在前面《 【Linux 内核知识梳理 10】Linux内存寻址之分段机制》 中我们介绍了Linux 的分段机制,了解到逻辑地址是通过分段机制来转换为线性地址的, 接下来我们来看下分页地址, 为完成线性地址— 物理地址的转换过程。段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转

|~~~热爱生活、努力学习的小伙汁~~~| 686

陈老师Linux内核内存寻址导学

陈老师学堂在线《Linux内核分析与应用》导学第二章 : 内存寻址

金荣的个人技术博客 1589
上一篇: Qt学习:三维绘图之OpenGL和Qt的结合
下一篇: Qt学习:项视图类
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值