32位机内存管理机制(上)

32位进程与64位系统内存交互技术实现 本文还有配套的精品资源,点击获取 简介:在IT系统编程中,32位进程与64位内存的交互是一个关键技术话题。本文针对32位进程如何在64位系统中读写内存进行了探讨,包括技术挑战和解决方案。使用C++语言和Windows API实现,如 ReadProcessMemory 和 WriteProcessMemory ,展示了32位进程如何通过Wow64... 阅读详情

一直有看linux内核的冲动,内核有些部分是汇编编写的,无奈汇编不大懂,所以利用五一三天假期大概走了一边8086CPU架构的汇编,8086CPU还是16位的,我们现在都进入64位时代了,这两者之间有很大的区别,但是看看16位的CPU汇编还是很重要的,这有助于理解32位的80386CPU。这篇文章来分析下80386的内存管理的一些基础知识,包括实模式、保护模式和内存寻址等等。

1.实模式

处理器被复位或者加电的时候以实模式启动。这时候处理器中各寄存器以实模式的初始化值工作。

80386处理器在实模式下的存储器寻址方式和8086是一样的,由段寄存器的内容乘以 16当做基地址,加上段内的偏移地址形成最终的物理地址,这时候它的32位地址线只使用了低20位。

 在实模式下,80386处理器不能对内存进行分页管理,所以指令寻址的地址就是内存中实际的物理地址。在实模式下,所有的段都是可以读、写和执行的。

实模式下80386不支持优先级,所有的指令相当于工作在特权级(优先级0),所以它可以执行所有特权指令,包括读写控制寄存器CR0等。

实际上,80386就是通过在实模式下初始化控制寄存器,GDTR,LDTR,IDTR与TR等管理寄存器以及页表,然后再通过加载CR0使其中的保护模式使能位置位而进入保护模式的。

当然,实模式下不支持硬件上的多任务切换。实模式下的中断处理方式和8086处理器相同,也用中断向量表来定位中断服务程序地址。中断向量表的结构也和8086处理器一样:每4个字节组成一个中断向量,其中包括两个字节的段地址和两个字节的偏移地址。

从编程的角度看,除了可以访问80386新增的一些寄存器外,实模式的80386处理器和8086有什么进步呢?其实最大的好处是可以使用80386的32 位寄存器,用32位的寄存器进行编程可以使计算程序更加简捷,加快了执行速度。

比如在8086时代用16位寄存器来完成32位的乘法和除法时,要进行的步骤实在是太多了,现在用32位寄存器一条指令就可以完成。80386中增加的两个辅助段寄存器FS和GS在实模式下也可以使用,这样,同时可以访问的段达到了6个而不必考虑重新装入的问题。

最后,很多80386的新增指令也使一些原来不很方便的操作得以简化。

2.保护模式

当 80386工作在保护模式下的时候,它的所有功能都是可用的。这时80386所有的32根地址线都可供寻址,物理寻址空间高达4GB。在保护模式下,支持内存分页机制,提供了对虚拟内存的良好支持。虽然与8086可寻址的1 MB物理地址空间相比,80386可寻址的物理地址空间可谓很大,但实际的微机系统不可能安装如此大的物理内存。所以,为了运行大型程序和真正实现多任务,虚拟内存是一种必需的技术。

保护模式下80386支持多任务,可以依靠硬件仅在一条指令中实现任务切换。任务环境的保护工作是由处理器自动完成的。在保护模式下,80386处理器还支持优先级机制,不同的程序可以运行在不同的优先级上。优先级一共分0~3 共 4个级别,操作系统运行在最高的优先级0上,应用程序则运行在比较低的级别上。配合良好的检查机制后,既可以在任务间实现数据的安全共享也可以很好地隔离各个任务。

从实模式切换到保护模式是通过修改控制寄存器CR0的控制位PE(位0)来实现的。

在这之前还需要建立保护模式必需的一些数据表,如全局描述符表GDT和中断描述符表IDT等。

DOS操作系统运行于实模式下,而Windows操作系统运行于保护模式下。

3.80386内存寻址机制

Windows的内存管理和DOS的内存管理有很大的不同,在了解Windows的内存管理模式之前,需要对80386保护模式下内存分页机制有所了解。

为了做个对比,先来看实模式下的内存寻址方式:在实模式下,一个完整的地址由段地址和偏移地址两部分组成。

处理器换算时先将段地址乘以10h,得到段在物理内存中的起始地址,然后加上16位的偏移地址得到实际的物理地址。

现在我们谈回到80386处理器的工作模式:


当80386处理器工作在保护模式和虚拟8086模式的时候,可以使用全部32根地址线访问4 GB大的内存。段地址加偏移地址的计算方法显然无法覆盖这么大的范围。

但计算一下就可以发现,实际上和8086同样的限制已经不复存在,因为80386所有的通用寄存器都是32位的,2^32 =4G,所以用任何一个通用寄存器来间接寻址,不必分段就已经可以访问到所有的内存地址。

这是不是说,在保护模式下,段寄存器不在有用了呢?

答案是否定的!实际上段寄存器更有用了,虽然在寻址上不在有分段的限制问题,但在保护模式下,一个地址空间是否

可以被写入,可以被多少优先级的代码写入等涉及保护的问题就出来了

要解决这些问题,必须对地址空间定义一些安全属性。段寄存器这是就派上了用场,不妨将这些属性放在段寄存器中!

但是问题来了,涉及属性和保护模式下段的其他参数,要表示的信息太多了,要用64长的数据才能表示,我们把这64位的属性数据叫做段描述符。

80386的段寄存器仍然是16位的,无法放下保护模式下的64位的段描述符,如何解决这个新的问题呢?解决办法是把所有段的段描述符顺序放在内存中的指定位置,组成一个段描述符表,而段寄存器中的16位用来做索引信息,指定这个段的属性用段描述符表中的第几个描述符来表示,这时,段寄存器中的信息就不再是段地址了,而是段选择器,可以通过它在段描述符表中”选择“一个项目以得到段的全部信息。

Windows 7 32位内存管理优化补丁 本文还有配套的精品资源,点击获取 简介:该补丁针对Windows 7 32位系统内存限制问题,目的是解决即使安装了4GB物理内存,也只能识别利用大约3.5GB内存的状况。补丁通过修改系统设置或驱动程序,例如优化PAE(Physical Address Extension)模式或更改注册表,使得系统能够更好地利用超过4GB的物理内存。尽管如此,补丁的使用需谨慎,因存在兼容性问... 阅读详情

相关推荐

FTP工具32位vs64位:选择与应用指南

本文还有配套的精品资源,点击获取 简介:FTP工具是用于互联网文件传输的标准协议软件,分为32位和64位版本,以适应不同架构的计算机操作系统。32位系统一次处理32位数据,内存受限,而64位系统支持更大的内存地址空间,适合处理大量数据。在选择FTP工具时,应考虑操作系统类型、性能需求和特定应用场景,如嵌入式系统或需要加密传输的安全需求。 1. FTP工具概述与架构...

weixin_30798867的博客 1118

32位微机的内存管理模式

32位微机的内存存管理仍然采用“分段”的管理模式,存储器的逻辑地址同样由段地址和偏移量两部分组成。32位微机的内存管理与16位微机的有相同之处,也有不同之处,因为它提供了两种不同工作方式:实方式和保护方式。 1、物理地址的计算方式   实方式:段地址仍然是16的倍数,每个段的最大容量仍为64K。段寄存器的值是段的起始地址,存储单元的物理地址仍为段寄存器的值乘16,再加上段内  偏移量。在此方式...

weixin_30455661的博客 203

32位系统突破4G内存限制补丁实战工具包

为了突破4GB内存限制,Intel引入了机制,允许32位处理器访问超过4GB的物理内存。PAE通过扩展页表结构,将物理地址从32位扩展到36位,使得系统最多可识别64GB内存:但PAE仅适用于服务器操作系统(如Windows Server),普通桌面系统如Windows XP或Windows 7家庭版仍无法直接使用超过4GB内存。补丁的核心目标是突破32位系统的4GB内存访问上限,使得操作系统能够识别并使用超过4GB的物理内存。

weixin_42581003的博客 1476

32位保护模式内存寻址原理

阅读: 2,136 内存寻址原理 在做网络安全事件分析的时候,都会遇到内存寻址的知识,例如上次跟大家分享的《 空指针漏洞防护技术》,就涉及到非法访问内存地址的问题。如果这个坎儿迈不过去,你就会迷失在代码中,更无从分析了。今天绿盟科技的安全技术专家就讲讲这个内存寻址的原理,文章分为上下两篇《内存寻址原理》及《内存寻址方式》。 随着信息化发展和数据处理能力需求的提高,对计算机

qq308845474的博客 5352

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3295

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南)

本文详细介绍了从Design Compiler(DC)过渡到DC Topographical(DCT)和DC Graphical(DCG)的完整操作框架,特别针对DEF文件处理提供避坑方案。通过环境准备、工具升级、DEF文件处理、DCG综合配置等步骤,帮助开发者高效应对28nm以下工艺节点的物理感知综合挑战,显著提升时序收敛效率。

weixin_27966471的博客 378

计算机原理学习(6)-- x86-32 CPU和内存管理之分页管理

前言 上一篇我们了解了x86-16 CPU计算机的内存访问方式,寻址方式,以及基于MS-DOS的应用程序的内存布局。这一篇会主要介绍32位处理器的内存访问,内存管理以及应用程序的内存布局。虽然目前64位CPU已经非常普及了,不过相对于32位的内存管理方式并没有大的变化,而32位相对于16位却有了极大的改变。 1.  x86-32 CPU 1985年10月。In

CC的技术专栏 1万+

高通平台camera构架sensor驱动详解

优先阅读。

a5566255的专栏 3249

Linux虚拟地址空间布局

原文:Linux虚拟地址空间布局 - clover_toeic - 博客园 文章目录1、内核空间2、栈(stack)3、内存映射段(mmap)4、堆(heap)栈和堆的区别5、BSS段6 数据段(Data)7、代码段(text)8、保留区 在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。 在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(

zj 875

沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎

本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。

qq_42212808的博客 200

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1075

32位下的内存地址分布

32位下的内存地址分布图如下:1g为内核空间,3g为用户空间 内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于...

qq_41257782的博客 4217

攻克低照度检测难题:YOLOv11主干网络增强新方案PE-YOLO详解

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 105

Linux内存管理1---内存寻址

1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理。 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础、虚拟地址空间的管理、物理地址空间的管理. 本文将主要以X86架构为例来介绍Linux内存管理的内存寻址。 2. 内存寻址的演变 内存寻址是操作系统设计的硬件基础之一 操作系统是横跨软件和硬件的桥梁, 操作系统设计者必...

weixin_30642305的博客 144

论文阅读:ICLR 2026 Breaking and Fixing Defenses Against Control-Flow Hijacking in Multi-Agent Systems

该论文首先系统阐述了控制流劫持攻击的核心机理。此类攻击通过操纵多智能体系统的编排机制,诱导系统执行非安全操作,进而实现敏感信息窃取。攻击者将恶意指令伪装成环境错误信息,借助可信代理传递至系统编排器,利用"困惑副手"漏洞绕过传统安全防线。该论文指出,现有防御方案如LlamaFirewall所依赖的对齐检查机制存在根本性局限——安全目标与功能需求之间存在不可调和的内在冲突。该论文的核心贡献体现在攻防两个维度。

CSPhD-winston的博客 493

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

操作系统内存管理浅见

操作系统内存管理浅见     我们举32位机,2G内存的计算机作为例子。32位指出CPU中ALU可以处理的位数,也指出地址线的位数,可以访问的内存为2的32次方,也就是4G内存,这里的4G内存指虚拟内存。它和你的2G物理内存间有一个映射表,映射表中有虚拟内存与物理内存的对应关系。虚拟内存和物理内存都被划分为许多块。如果虚拟内存中没有所需的数据,发生缺页中断,从硬盘中加载数据到物理内存,操作系统内

木有 1369

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存

自学笔记(一)个人理解linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址...

weixin_42110038的博客 1512

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

关于malloc申请内存

自学笔记(一) 个人理解 linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。 linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址 因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址并

1285

从0实现32位操作系统-实现分页机制

我们的系统运行在内存上,内存上很容易出现一些内存碎片,当我们需要一个很大的内存空间时,一般是不能利用这些内存碎片,这就使得内存的利用率降低。而分页机制则可以很好的解决这个问题,分页机制是计算机系统的一项关键技术,它将整个内存空间划分成固定大小的页面,通常为4KB或更大。这种划分使得操作系统能够更灵活地管理内存资源。每个进程的地址空间也被划分为相同大小的页面,操作系统通过一个称为页表的数据结构来维护逻辑地址到物理地址的映射关系。分页机制还可以简化内存管理操作,可以更高效的进行内存分配和释放。

qq_49340792的博客 1258

X86 32位内存管理

目录 1.内存及寻址 2.地址变换 3.分段机制 4.分页机制 5.保护 6.去到底部 一、内存及寻址 返回目录 二、地址变换 ![](http://images2017.cnblogs.com/blog/825979/201801/825979-20180120210830521-745157906.png) 80X86 从 逻辑地址 到 物理地址 的转换:第一阶段是使用分段机制把...

六六哥的博客 661

FreeRTOS在ARM Cortex-M3架构的32位单片机中的内存管理详解

以下探讨源自我在学习FreeRTOS在ARM Cortex-M3下部署时遇到的内存管理问题。在我查阅许多资料后总结出了一些观点,希望这些观点可以帮助刚接触嵌入式操作系统的朋友,让大家对内存管理方面有一个比较直观的认识。

tsistbasit的博客 1736

深入剖析nanopb在STM32上的内存管理机制

聚焦nanopb在STM32平台的内存分配策略,剖析其轻量级特性如何优化嵌入式环境下的资源使用,结合nanopb的实际应用揭示高效内存管理的关键细节。

weixin_30978239的博客 953

IA32CPU内存管理机制

最近看了一些Inter32CPU的内存管理机制,做个总结,但是我毕竟是新手,对很多东西也是一知半解,希望大家指教。 1.物理内存的管理,这不考虑MMU的内存管理机制,纯粹的对物理内存的管理,在电脑刚启动时候的实模式就应该是对实际物理内存的操作了。 2.虚拟内存的管理,Inter32CPU实现了一个分页的虚拟内存管理机制。 IA32CPU内存管理机制主要就是:分段和分页。平时程序里说的代码

firefoxbug的专栏 2183

【STM32】内存管理

内存管理,是指软件运行时对MCU内存资源的分配和使用的技术。如何高效、快速的分配,并且在适当的时候释放和回收内存资源**内存使用三部曲:内存申请(分配)内存使用内存释放malloc[用于内存的申请]和free[用于内存的释放]标准的C语言库也提供了mallow函数和free函数来实现动态申请和释放内存。那为啥我们不用C语言库的呢?原因如下:占用大量的代码空间 不适合在资源紧缺的嵌入式系统当中没有线程安全的相关机制运行有不确定性,每次调用这些函数时花费的时间可能都不一样内存碎片化。

m0_73409202的博客 2553
上一篇: 对int、iret和栈的深入理解
下一篇: 32位机内存管理(下)
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值