探索Linux 操作系统内存模型和管理-5(转)

探索Linux 操作系统内存模型和管理-5[@more@]

在 Linux 中,分页单元的使用多于分段单元。前面介绍 Linux 分段模型时已提到,每个分段描述符都使用相同的地址集进行线性寻址,从而尽可能降低使用分段单元将逻辑地址转换成线性地址的需要。通过更多地使用分页单元而非分段单元,Linux 可以极大地促进内存管理及其在不同硬件平台之间的可移植性。

分页过程中使用的字段

下面让我们来介绍一下用于在 x86 架构中指定分页的字段,这些字段有助于在 Linux 中实现分页功能。分页单元进入作为分段单元输出结果的线性字段,然后进一步将其划分成以下 3 个字段:

●Directory 以 10 MSB 表示(Most Significant Bit,也就是二进制数字中值最大的位的位置 —— MSB 有时称为最左位)。

●Table 以中间的 10 位表示。

●Offset 以 12 LSB 表示。(Least Significant Bit,也就是二进制整数中给定单元值的位的位置,即确定这个数字是奇数还是偶数。LSB 有时称为最右位。这与数字权重最轻的数字类似,它是最右边位置处的数字。)

线性地址到对应物理位置的转换的过程包含两个步骤。第一步使用了一个称为页目录 (Page Directory) 的转换表(从页目录转换成页表),第二步使用了一个称为页表 (Page Table) 的转换表(即页表加偏移量再加页框)。图 6 展示了此过程。

846067.gif

图 6. 分页字段

开始时,首先将页目录的物理地址加载到 cr3 寄存器中。线性地址中的 Directory 字段确定页目录中指向恰当的页表条目。Table 字段中的地址确定包含页的页框物理地址所在页表中的条目。Offset 字段确定了页框中的相对位置。由于 Offset 字段为 12 位,因此每个页中都包含有 4 KB 数据。

下面小结物理地址的计算:

●cr3 + Page Directory (10 MSB) = 指向 table_base

●table_base + Page Table (10 中间位) = 指向 page_base

●page_base + Offset = 物理地址 (获得页框)

由于 Page Directory 字段和 Page Table 段都是 10 位,因此其可寻址上限为 1024*1024 KB,Offset 可寻址的范围最大为 2^12(4096 字节)。因此,页目录的可寻址上限为 1024*1024*4096(等于 2^32 个内存单元,即 4 GB)。因此在 x86 架构上,总可寻址上限是 4 GB。

扩展分页

扩展分页是通过删除页表转换表实现的;此后线性地址的划分即可在页目录 (10 MSB) 和偏移量 (22 LSB) 之间完成了。

22 LSB 构成了页框的 4 MB 边界(2^22)。扩展分页可以与普通的分页模型一起使用,并可用于将大型的连续线性地址映射为对应的物理地址。操作系统中删除页表以提供扩展页表。这可以通过设置 PSE (page size extension) 实现。

36 位的 PSE 扩展了 36 位的物理地址,可以支持 4 MB 页,同时维护一个 4 字节的页目录条目,这样就可以提供一种对超过 4 GB 的物理内存进行寻址的方法,而不需要对操作系统进行太大的修改。这种方法对于按需分页来说具有一些实际的限制。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9417382/viewspace-940050/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9417382/viewspace-940050/

STM32H743 Cortex-M7运行Linux 5.10与CoreMark性能深度评测 在嵌入式系统开发中,微控制器(MCU)与微处理器(MPU)的选型常基于其架构特性。MCU通常运行实时操作系统(RTOS)以处理确定性的控制任务,而MPU凭借内存管理单元(MMU)支持完整的Linux等通用操作系统,以运行复杂的应用层软件。然而,随着高性能MCU如Arm Cortex-M7内核的出现,其高主频和大内存配置挑战了这一传统边界。通过深入的内核移植与优化,例如使用长期支持(LTS)的Linux 5.10内核并进行无MMU适配,可以在STM32H743这类MCU上成功运行精简的Linux系统。这揭示了 阅读详情

相关推荐

Linux内存管理与FreeRTOS系列移植-----入门学习(一)

–转载自:liefyuan-----(MQTT–入门) 消息队列遥测传输协议,基于发布/订阅通信协议,构建于TCP/IP协议上。三种身份:发布者,代理者(服务器),订阅者。发布和订阅都是客户端。链接为有序,无损,基于字节流的双向传输。 FreeRTOS文章系列----朱工 RTOS提供的事件型设计方式,使得RTOS只是在处理实际任务才会运行 —探索Linux内存模型------ IBM 与内存管理...

oooooooooooooookjk的博客 1156

深入解析计算机内存模型:从硬件抽象到编程实践的核心原理

内存模型是计算机系统中定义程序如何访问和使用内存的核心抽象概念,它构建了从物理内存到应用程序之间的关键桥梁。其基本原理是通过地址空间映射,为每个进程提供独立且连续的虚拟内存视图,从而实现进程隔离与内存保护。这一抽象的技术价值在于,它支撑了现代操作系统的多任务、虚拟内存及安全执行环境。在应用场景上,内存模型深刻影响着系统编程、并发程序设计与性能优化。例如,在硬件层面,缓存一致性协议与指令重排带来了多线程环境下的可见性与有序性问题;在语言运行时层面,Java内存模型通过happens-before原则与vola

weixin_30471561的博客 343

2、深入探索 Linux 内核开发:从基础到高级应用

本文档全面介绍了Linux内核开发的基础知识与高级应用,重点围绕可加载内核模块(LKM)框架展开。内容涵盖从内核构建、编写第一个内核模块,到深入理解内核内部原理,包括进程与线程管理、内存分配机制、CPU调度策略以及内核同步技术。新版基于Linux 6.1 LTS版本,包含大量实践示例与代码,并提供详细的学习路径和操作步骤,适合初学者及有一定经验的开发者深入学习。文中还提供相关资源下载链接,以及如何设置完整的内核开发工作空间。

dropout6artist的博客 63

二级页表分页存储需要目录页表数形象解释

在牛客看到的答案,很形象,分享出来 某计算机采用二级页表的分页存储管理方式,按字节编址,页面大小为1024B,每个页表项占2B,若逻辑地址空间的大小为 64K 个页面,则表示整个逻辑地址空间的页目录表中包含的表项的个数至 少为__128_____ 在解决这个问题前,我们用类比的方式来举一个例子。 假设有一本书,这本书每一页固定大小,最多一页有 1000 个字(页面大小); 每一页对应有一个目录...

nbcsdn的博客 7071

Dify + mem0插件实战:如何让AI记住你的饮食习惯(附完整代码)

本文通过Dify平台与mem0插件实战,详细演示了如何为AI助手构建长期记忆系统,使其能记住并理解用户的复杂饮食习惯(如过敏源、饮食偏好)。文章提供了完整的工作流配置与Python代码示例,帮助开发者实现跨会话的个性化饮食建议,解决AI对话中的“健忘”问题。

lg888的博客 1093

声纹识别初学

最近开始关注声纹识别技术,发现国内做这个的确实没有几家,而且大多重点推声纹认证,用在公安司法金融领域,而我却关注文本无关的声纹识别,这里把我搜到的一点资料汇总在此. 发现njustzj001的专栏有两篇文章适合入门的我,贴下链接: 综述:  http://blog.youkuaiyun.com/xmu_jupiter/article/details/47209961 PLDA解释:  http://

u013452331的专栏 2758

探索Linux 操作系统内存模型和管理-4(转)

探索Linux 操作系统内存模型和管理-4[@more@]每个 TSS 段 (TSS segment) 描述符都代表一个不同的进程。TSS 中保存了每个 CPU 的硬件上下文信息,它有助于有效地切换上下文。例如,在 U->...

congwan5321的博客 120

STM32F103C8T6 Bootloader开发实战:串口IAP固件升级与Keil工程配置详解

本文详细介绍了STM32F103C8T6 Bootloader开发实战,重点讲解串口IAP固件升级的实现方法与Keil uVision5工程配置。通过Flash分区管理、USART1通信协议设计及应用程序跳转机制等核心技术,帮助开发者掌握嵌入式系统固件升级方案,提升设备维护效率。

weixin_29165725的博客 436

Linux内存管理和分配实例探索

Linux发展到现在,其内存管理机制足够成熟,内存条大小的发展速度已经足够应付日常跑应用的要求。但是,无论有多少内存可用,内存一直都是一种稀缺资源,合理的内存管理是软件正常运行的基础。对此,我对于Linux的内存分配进行了一次探索,看看在linux自身有限的内存下,程序到底能申请多少可用的内存。 1.可用内存 Linux可以轻松打破MS-DOS内存模型的上限,而每个Linux系统总有自己的内存申请上限,这个上限和系统内存大小有什么关系呢?下面用一个程序进行测验。 首先要做一些准备工作,了解自身系统的内存是多

weixin_42937012的博客 1277

从2804云台电机到桌面机械臂:一个STM32/GD32玩家的FOC驱动踩坑全记录

本文详细记录了从2804云台电机到桌面机械臂的FOC驱动开发历程,涵盖了硬件选型、驱动方案优化、软件调试等关键环节。特别分享了L6234P驱动芯片的发热问题、AS5600编码器的I2C通信陷阱以及PID调参的实战经验,为DIY爱好者提供了宝贵的参考。

weixin_26897585的博客 480

两个独立的正态分布的和仍然为正态分布的证明

正态分布的和

weixin_40064300的博客 1万+

Linux操作系统内存管理的源码实现(转)

Linux操作系统内存管理的源码实现(转)[@more@]  最近一段时间在阅读Linux的源代码,想把看到的东西写出来,觉得内存这一部分最简单,就先写了出来。请指正!   内存最低4K的地址是一张页目录(page_dir),页...

138

Vue3 + MQTT.js 实现 SCADA 实时数据通信:从不稳定到稳定的完整实践

本文介绍了SCADA组态引擎开发中MQTT协议的应用及优化实践。项目采用MQTT协议实现工业设备数据采集与可视化,但面临连接不稳定、数据格式多样化和数据绑定复杂三大问题。针对MQTT连接问题,分析发现超时设置过短(原8秒)、缺少客户端超时配置和心跳机制是主要原因。优化方案包括:协议转换(mqtt://→ws://)、双重超时保护(15秒手动+30秒客户端)、60秒心跳间隔等,显著提升了连接稳定性。通过完整代码实现展示了连接配置、认证处理和错误处理机制,为物联网数据传输提供了可靠解决方案。

weixin_36794508的博客 1398

转 Linux内存管理原理

Linux内存管理原理 在用户态,内核态逻辑地址专指下文说的线性偏移前的地址Linux内核虚拟3.伙伴算法和slab分配器 16个页面RAM因为最大连续内存大小为16个页面 页面最多16个页面,所以16/2order(0)bimap有8个bit位两个页框page1与page2组成与两个页框page3与page4组成,这两个块之间有一个bit位 order(1)bimap有4个bit...

weixin_33722405的博客 71

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

RK3588嵌入式AI工业部署:YOLOv11 + OpenCV实时推理系统全栈实现

接下来,你可以尝试优化模型(如量化、剪枝)、扩展功能(如多摄像头推理、结果上传到云端),让你的AI应用更加完善。不需要担心技术门槛,我们会一步步带你完成环境搭建、模型转换、部署推理的全流程,最终让你在RK3588上体验AI目标检测的丝滑快感。首先,我们需要把YOLOv11的PyTorch模型(.pt格式)转换成ONNX格式,这是模型部署的第一步。此时,你应该能看到摄像头画面中出现了实时的目标检测框,标注着检测到的物体类别和置信度。文件,这就是RK3588可运行的模型文件。文件,这就是转换后的ONNX模型。

LXY_LOVE36的博客 245

STM32H743移植Linux 5.10实战:无MMU环境下的性能优化与CoreMark测试

在嵌入式开发领域,Linux操作系统凭借其成熟稳定的网络协议栈、文件系统和丰富的软件生态,已成为复杂应用的首选。其核心运行原理依赖于内存管理单元(MMU)实现进程隔离与虚拟内存,这通常要求处理器具备相应的硬件支持。然而,以STM32H743为代表的高性能Cortex-M7微控制器,虽无MMU,但其强大的算力(主频高达480MHz)为探索Linux的极限移植提供了可能。通过配置Linux内核的无MMU(NOMMU)支持、采用Flat内存模型、并使用静态链接的BusyBox构建极简根文件系统,开发者能够在资源受

chaoyv 719

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[操作系统]一条-r参数之差:从Windows CMD到操作系统底层的层层递进

从CISC和RISC的此消彼长,到如今x86和ARM的分庭抗礼,再到开源开放的RISC-V的强势崛起,指令集架构的发展始终是计算机技术创新的核心驱动力。需要区分的是,ISA是“做什么”的规范(软件与硬件的接口),而微架构是“如何做”的具体硬件实现方案(如流水线、缓存大小)。PowerPC ISA也是开放的。其指令长度固定,简化了硬件实现。总的来说,Windows更倾向于为用户提供单一架构下无缝的体验(并通过模拟等方案解决兼容问题),而Linux则通过设计和开源生态,将选择的自由延伸到了更广阔的硬件世界中。

qq_55948352的博客 603

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux 系统的 C++ 编程指南(一)

亲爱的读者,您好!您已经置身于朋友之中。欢迎您踏上高级技能、意外惊喜、巧妙知识和新颖编程工具的旅程。假设您是一位经验丰富的软件工程师,知道如何编写高质量的代码,并对一些构建和操作系统有所了解。您也遇到过几种计算机架构,并修复了一个或两个错误。那么以下情况如何:您是一位刚开始学习如何成为一名软件工程师的学生。您希望有一天成为一名优秀的专业人士。您希望成为别人在软件行为不可预测时寻求的专家。或者您只是出于最初的好奇心拿起这本书,还不知道能期待什么。那就太完美了!

龙哥盟 1354

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux的memmap函数_(五)Linux内存管理zone_sizes_init

背景Read the fucking source code! --By 鲁迅A picture is worth a thousand words. --By 高尔基说明:Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio1. 介绍在(四)Linux内存模型之Sparse Memory Model中,我们分析了bo...

weixin_39862871的博客 952

(五)Linux内存管理zone_sizes_init

背景 Read the fucking source code!--By 鲁迅 A picture is worth a thousand words.--By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 介绍 在(四)Linux内存模型之Sparse Memory Model中,我们分析了bootmem_init函数的上半部分,这次让我们来到下半部分吧,下半部分主要是围绕zon..

M120674的专栏 510

深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现

前 言第1章 CPU虚拟化 11.1 x86架构CPU虚拟化 11.1.1 陷入和模拟模型 21.1.2 x86架构虚拟化的障碍 21.1.3 VMX 31.1.4 VCPU生命周期 51.2 虚拟机切入和退出 81.2.1 GCC内联汇编 81.2.2 虚拟机切入和退出及相关的上下文保存 101.3 陷入和模拟 151.3.1 访问外设 151.3.2 特殊指令 221.3.3 访问具有副作用的...

weixin_32586767的博客 846

【原创】(五)Linux内存管理zone_sizes_init

背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 介绍 在(四)Linux内存模型之Sparse Memor...

C07734的博客 2197

linux内存管理_[转载] (五)Linux内存管理zone_sizes_init

原文链接:https://www.cnblogs.com/LoyenWang/p/11568481.html作者:LoyenWang出处:https://www.cnblogs.com/LoyenWang/公众号:LoyenWang版权:本文版权归作者和博客园共有转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任背景Read the fucking sou...

weixin_39785422的博客 140
上一篇: 探索Linux 操作系统内存模型和管理-3(转)
下一篇: 探索Linux 操作系统内存模型和管理-4(转)
congwan5321
博客等级 码龄11年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值