内容来自于《Intel汇编语言程序设计》(第四版)第11章-------32位windows编程。
其实我们经常看到计算机的虚拟内存地址大于计算机的实际内存地址。这是什么原因呢?这就是内存管理要解释的内容。
内存管理主要涉及两个方面:
- 从逻辑地址到线性地址的转变
- 从线性地址到物理地址的转变(分页)
所谓逻辑地址,其实就是在段中的偏移地址。比如一个变量的逻辑地址,就是这个变量所在段的偏移地址,我们之前所讲的那些程序中变量的地址其实都是在段中的偏移地址(还记得OFFSET等等指令吗?)。这就是逻辑地址,如果我们这个时候将变量所在的段的地址加上变量在段中的偏移地址,然后到段描述符表中去找的话,交找到了变量的线性地址。如果操作系统没有启用分页机制的话,此时的线性地址就是实际的物理地址。一般我们的XP和LINUX等等操作系统都启用了分页机制,所以此时得到的地址还不是真正的物理地址。(线性地址是一个32位整数,所以他可以操作4GB的内存空间)
如果系统启用了分页机制,并且我们又得到了线性地址的话,我们就可以计算出真正的物理地址。所谓分页即系统将内存划分为称为页的小块,大小一般是4KB,如果当我们想访问某个变量的实际地址的时候,处理器就会通过页面转换将线性地址转换为物理地址。
下面来看看具体是如何变换的。
当我们进行逻辑地址到线性地址的转换的时候,需要涉及到一个段描述符,而段描述符存在于两种类型的表中,一个是GDT(Global Descriptor Table,全局描述符表),一个是LDT(Local Descriptor Table,局部描述符表)。GDT的表的基址放在GDTR(全局描述符表寄存器)中,而LDT的表的基址放在LDTR(局部描述符表寄存器)中,GDTR只有一个,而LDTR存放的是在一个多任务的操作系统中当前程序的LDT的基址。
有了LDT,我们就可以通过它将段基址+偏移地址换算为线性地址了。
得到线性地址,下一步就是把线性地址转换到物理地址,这里涉及到三个数据结构:
因为我们的线性地址的结构是这样的:
页目录域 + 页表域 + 偏移地址域
他们会分别去找相应的数据结构,首先通过页目录域到页目录表中找到页表的基地址,然后将页表域作为索引,从页表中找到对应的物理内存的基地址,然后将我们得到这个页的基地址同我们线性地址中12位的偏移地址相加,就得到了真正的物理地址。
这就是IA-32处理器管理内存的方法。
而接下来我们的操作系统就会担当起内存管理的任务,例如将资源划分为进程和线程进行管理等等。
内存管理的核心其实很简单,就是处理器将逻辑地址通过中间的一些地址表转换成真正的物理地址的过程。
但我还是有个疑问,GDT在什么情况下才能用到呢?
分享到:
相关推荐
- 总结了IA-32架构下内存管理的基本原则和技术。 - **段的使用** - 介绍了段的概念,并讨论了几种不同的段模型。 - **分页与分段** - 比较了分页和分段两种内存管理技术的异同点。 - **物理地址空间** - 介绍了...
### Intel 64-ia-32 架构软件开发手册卷3:系统开发 #### 一、关于手册 Intel 64-ia-32 架构软件...通过学习和应用手册中的内容,开发者可以更好地理解和利用Intel 64-ia-32架构的优势,从而提高系统的性能和稳定性。
### Intel IA-32 Spec V3 chapter2 学习笔记 #### 1. 系统架构概述 在《Intel IA-32 Spec V3》的第二章中,系统架构综述部分介绍了Intel IA-32架构的基础概念及其关键组件。IA-32架构自Intel 386处理器家族起便...
- Intel® 64 和 IA-32 架构是Intel处理器家族中两种主要的架构。IA-32指的是32位版本的架构,而Intel® 64则是在IA-32基础上扩展出来的64位版本。 - 这两种架构支持不同的指令集、内存模型和其他特性。 2. **...
- **系统编程指南(Volume 3)**:这部分则侧重于如何使用Intel 64和IA-32架构的各种特性来进行高效的系统级编程,包括中断处理、内存管理、处理器调度等方面的知识点。 #### 四、关键知识点解析 1. **Intel 64 ...
《Intel 64 和 IA-32 架构软件开发者手册》是一套全面详尽的技术文档,由英特尔公司发布,旨在为软件开发者提供有关Intel处理器架构的深入理解。这套手册分为五卷,覆盖了基本架构、指令集参考以及系统编程指南等...
### Linux 2.4.x 初始化过程详解:针对IA-32架构 #### 一、引言 本章节简要介绍了Linux 2.4.x在IA-32平台上的初始化过程,包括了概述、文档贡献、商标声明以及许可证等内容。本文档主要基于Linux内核源代码中的...
总结,《Intel® 64 and IA-32 Architectures Software Developer’s Manual》是理解和利用英特尔处理器的关键资源,涵盖了从底层硬件到高级编程策略的广泛知识,对于开发高效、优化的软件至关重要。通过深入学习和...
《IA32体系结构设计手册-卷1》提供了对Intel IA-32架构的全面了解,涵盖了从基本指令集到复杂内存管理的各个方面。它不仅是硬件工程师和系统架构师的重要参考资料,也是软件开发者理解和优化代码性能的关键文档。...
ARM和IA-32架构在指令集、内存管理和硬件接口等方面存在显著差异,因此需要在系统层面上进行深度优化以确保在不同平台上都能顺畅运行。微软通过Windows NT内核的灵活性,实现了这一目标,使得同一应用程序可以在两种...
《Intel® 64 and IA-32 AES Manual.zip》是一个包含两本重要技术文档的压缩包,主要涉及Intel处理器的64位架构以及IA-32架构,并着重介绍了Intel的高级加密标准新指令(AES-NI)集。这两本手册对于理解Intel处理器...
3. **启动MPD**: `mpd`是MPICH2的分布式内存管理器,需要在每个参与并行计算的节点上启动。通过`mpdboot`命令可以启动多个MPD实例。 4. **并行运行程序**: 使用`mpiexec`命令来启动并行程序,例如`mpiexec -n 4 my...
IA-32处理器有三种工作方式:保护方式(使用全部地址线,寻址4GB内存),实地址方式(8086模式,仅寻址1MB内存),以及系统管理方式。 【微机总线】 微机总线分为四个阶段:总线请求和仲裁、寻址、数据传送和结束...
- **内存管理**:探讨了IA-32平台上的内存管理机制,包括虚拟内存和物理内存的区别。 - **CISC与RISC比较**:对比分析了复杂指令集(CISC)和精简指令集(RISC)之间的区别,以及它们各自的优势。 - **Little-...
- **兼容性**:Intel 64架构是在IA-32基础上扩展而来,保持了与IA-32的兼容性,这意味着可以在Intel 64架构上运行原有的IA-32应用程序。 - **64位计算**:通过引入新的寄存器和指令集,Intel 64架构支持64位数据处理...
BOOTLOADER是嵌入式系统启动过程中的第一段程序,它的主要任务是初始化硬件、设置内存管理单元(MMU)、加载操作系统内核到内存并跳转到内核入口点。BOOTLOADER分为两个阶段:第一阶段通常由汇编语言编写,负责最...
Intel® 64和IA-32架构软件开发者手册(以下简称“手册”)是一系列由Intel官方提供的技术文档,旨在为开发人员提供关于Intel处理器架构及其指令集的详细信息。该手册分为五卷,分别涵盖了基本架构、指令集参考以及...
基于标题“操作系统学习资料”以及描述“该文档为intel官方资料,主要讲解操作系统原理及其开发”,本文将深入解析这份由Intel官方提供的学习资源——《IA-32 Intel Architecture Software Developer’s Manual》中...
所著,旨在为读者提供系统地学习汇编语言编程的路径和方法,特别是针对IA-32架构,在Linux系统上进行相关开发和应用。 从给出的内容来看,这本书不仅涵盖了IA-32汇编语言编程的核心知识,而且还提供了对Fedora ...