内存寻址之分页机制

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

写在前面:

分页机制完成线性地址到物理地址的转换 80x86 规定分页机制是可选的。分段和分页没有什么必然联系,分段可以说是 Intel 的 CPU 一直保持着的一种机制,而分页只是保护模式下的一种内存管理策略。想开启分页机制,CPU必须工作在保护模式,而工作在保护模式可以不开启分页。

分页机制由控制寄存器 CR0 中的 PG 位启用,如PG=1则启用分页机制,把线性地址转换为物理地址;如果PG=0则直接把段机制产生的线性地址当作物理地址使用。

为什么要分页?

问题的本质是在目前只分段的情况, CPU 认为线性地址等于物理地址,而线性地址是由编译器编译出来的,它本身是连续的,所以物理地址也必须要连续才行,但我们可用的物理地址不连续。换句话说,如果线性地址连续,而物理地址可以不连续,不就解决了吗。所以要解除线性地址和物理地址一一对应的关系,然后将他们的关系重新建立,通过某种映射关系,可以将线性地址映射到任意物理地址。

页与页表

为了效率起见,将线性地址空间分成若干大小相等的片,称为页( Page )。相应的地,逻辑上把内存划分为与页大小相等的若干存储块,称为( 物理 )块或页面( Page Frame )。常见的页面大小为 4KB,每一页都有 4K 字节长,每一页的起始地址都能被 4K 整除。

分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个 4K 字节作为一个单位来映射,并且每个页面都对齐 4K 字节的边界,因此,线性地址的低 12 位经过分页机制直接地作为物理地址的低 12 位使用。所以,线性地址的高 20位可用来定位一个物理页,低 12 位可用来在该物理页内寻址。

页表项结构

页表就是个 N 行 l 列的表格,页表中的每一行(只有一个单元格)称为页表项( Page Table Entry,PTE ),其大小是 4 字节,页表项的作用是存储内存物理地址。当访问一个线性地址时,实际上就是在访问页表项中所记录的物理内存地址。

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

相关推荐

RS08架构内存优化实战:分页机制寻址模式详解

在嵌入式系统开发中,内存管理是核心基础,尤其对于资源受限的8位微控制器。其原理在于通过硬件和指令集设计,在有限的地址总线宽度下高效访问物理内存。这项技术的价值在于能显著优化代码体积和执行效率,对于Flash和RAM极小的场景至关重要。应用场景广泛覆盖物联网终端、消费电子、工业控制等低功耗设备。本文聚焦RS08架构,深入解析其独特的内存分页(Paging)机制寻址模式,通过汇编器协作与数据布局策略,解决内存访问的挑战,实现极致的代码压缩与性能提升。

weixin_33690963的博客 412

分页存储概念清晰梳理(页面、页表页表项、页面大小、页内地址等概念)

分页存储概念清晰梳理(页面、页表页表项、页面大小、页内地址等概念)

chenguanjun2b的博客 6万+

linux内存寻址分页机制

一、内存寻址 逻辑地址 -----分段单元------》 线性地址 ------分页单元-------》物理地址 (分段单元和分页单元为硬件电路) 1、内存地址: 逻辑地址:用于机器指令(汇编、CPU指令)进行寻址,由段标志符(16位,也称段选择符)+ 段偏移地址组成(指定段内相对地址的偏移量) 线性地址:也称虚拟地址,32位无符号,可以表示4GB的地址; 物理地址:32位或36位无符号(与CPU的管脚数对应),用于内存芯片进行内存单元寻址,与从CPU到内存总...

qq_29044159的博客 367

【操作系统】——基本分页存储管理

文章目录一、什么是分页存储二、页表(存PCB中)三、如何实现地址转换 一、什么是分页存储 将内存分为一个个大小相等的分区, 这些分区称作为(页框、页帧、内存块、物理块、物理页面)若对分区进从编号,则又有了对应的(页框号、页帧号、内存块号、物理块号、物理页号),从0开始 进程的信息都是要存在内存中的,既然内存有了分区,那么进程逻辑地址空间上也会有相应的大小相等的分区,称为 (页、页面),对应编号为(页号、页面号),从0开始。 上面这么多名称着实是难记,但是我们只需要记住只有(页、页面)/(页号、页面号)是和

m0_54385790的博客 1万+

基本地址变换机构

分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此,页式管理中地址是一维的。即,只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位。https。...

m0_52559870的博客 2699

内存管理——操作系统(考研操作系统)

内存的基础概念 内存可存放数据。程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾 指令的工作原理:指令的工作基于“地址”。每个地址对应一个数据的存储单元 我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。指令中的地址参数直接给出了变量 x 的存放的实际地址(物理地址)。 但实际在生成机器指令的时候,并不知道该进程的数据会被放到什么位置,所以编译生成的指令中一般是使用逻辑地址(相对地址)。 程序经过编译、链接后

mankeywang的博客 2370

【计算机考研408】进程运行的流程

进程运行的流程

与恶龙缠斗良久终成恶龙 1038

Linux内存寻址分页机制

http://blog.xiaohansong.com/2015/10/05/Linux内存寻址分页机制/ 在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程。下面,我们就来看看更加重要和复杂的分页机制分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址分页机制进一步把该线性地址再转换为物理地址。 ...

diaoju3333的博客 149

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

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

RToax 960

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

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

HelloNerd的博客 1639

Linux 内存寻址分页机制

在上一篇文章《Linux 内存寻址之分段机制》中,我们了解逻辑地址通过分段机制转换为线性地址的过程。下面,我们就来看看更加重要和复杂的分页机制分页机制在段机制之后进行,以完成线性—物理地址的转换过程。段机制把逻辑地址转换为线性地址分页机制进一步把该线性地址再转换为物理地址。 硬件中的分页 分页机制由CR0中的PG位启用。如PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为

andylauren的专栏 453

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

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

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

MC9RS08LA8内存架构与寻址模式深度解析:从分页机制到Flash编程实战

在嵌入式系统开发中,内存管理是核心基础技术,它决定了程序的执行效率与资源利用率。其原理是通过地址总线和内存控制器,实现对存储单元的寻址与访问。对于资源受限的8位微控制器,高效的内存访问技术价值尤为突出,它能在有限的硬件资源下,通过精巧的地址空间划分和寻址模式优化,显著提升代码执行速度和降低功耗。这类技术广泛应用于工业控制、消费电子和物联网设备等对成本与功耗敏感的领域。本文聚焦于MC9RS08LA8微控制器,深入剖析其独特的内存分页机制和多种寻址模式,并详细阐述如何利用分页窗口进行高页寄存器访问和安全的在线编

weixin_33901641的博客 474

内存寻址(二):linux中的分段与分页机制

摘要:本文主要为你讲解linux中的分段和分页机制的实现原理,相关的宏定义和函数功能。 1.linux中的分段 除了用来模拟80286的模式以外,段式基地址总是0(也就是说linux并没有真实地实现分段机制),所以线性地址和虚拟地址总是一样的。运行在所有用户态的linux进程都使用一对相同的段进行数据和指令的寻址,它们就是用户数据段和代码段;同理,存在内核数据段和代码段。这四个重要的段描述符的值是:

河西无名式 3100
上一篇: [Web Server](一)Tiny Web Server分析
下一篇: [编译链接装载系列]之聊聊目标文件与ELF格式
Tanswer_
博客等级 码龄10年 231粉丝 91原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值