段页式内存管理中,逻辑地址,线性地址,物理地址的差别

线性地址是逻辑地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。

如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。不过,在开启分页功能之后,一个线性地址可能没有相对映的物理地址,因为它所对应的内存可能被交换到硬盘中。32位线性地址可用于定位4GB存储单元。

所谓物理地址,就是指系统内存的真正地址。对于32 位的操作系统,它的范围为0x00000000~0xFFFFFFFF,共有4GB。只有当CPU工作于分页模式时,此种类型的地址才会变得非常“有趣”。本质上,一个物理地址是CPU插脚上可测量的电压。操作系统通过设立页表将线性地址映射为物理地址。Windows 2K/XP所用页表布局的某些属性对于调试软件开发人员非常有用。

分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称为页。通过在线性地址空间的页与物理地址空间的页之间建立映射,分页机制可以实现线性地址到物理地址的转换。线性地址空间的页与物理地址空间的页之间的映射可根据需要来确定。线性地址空间的任何一页,可以映射为物理地址空间中的任何一页。

逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层。程式代码会产生逻辑地址,或说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址能再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80x86的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address) 是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory)是指计算机呈现出要比实际拥有的内存大得多的内存量。因此他允许程式员编制并运行比实际系统拥有的内存大得多的程式。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个非常恰当的比喻是:你不必非常长的轨道就能让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就能完成这个任务。采取的方法是把后面的铁轨即时铺到火车的前面,只要你的操作足够快并能满足需求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux0.11内核中,给每个程式(进程)都划分了总容量为64MB的虚拟内存空间。因此程式的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为和虚拟内存空间的概念类似,逻辑地址也是和实际物理内存容量无关的。逻辑地址和物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。机理 逻辑地址(或称为虚拟地址)到线性地址是由CPU的段机制自动转换的。如果没有开启分页管理,则线性地址就是物理地址。如果开启了分页管理,那么系统程式需要参和线性地址到物理地址的转换过程。具体是通过设置页目录表和页表项进行的。

转载于:https://www.cnblogs.com/kuainiao/archive/2012/12/17/2821801.html

(转)逻辑地址,线性地址,物理地址的差别相关推荐

  1. Linux下逻辑地址-线性地址-物理地址图解

    一.逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到. 我们写个最简单的hello world程序 ...

  2. 操作系统 内存碎片 cache替换算法 虚拟地址逻辑地址线性地址物理地址

    采用分区式存储管理的系统,在储存分配过程中产生的.不能供用户作业使用的主存里的小分区称成"内存碎片".内存碎片分为内部碎片和外部碎片. 内部碎片 内部碎片就是已经被分配出去(能明确 ...

  3. linux kernel基本构成的内容有下列哪些项_Linux下逻辑地址-线性地址-物理地址详解...

    一.逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到. 我们写个最简单的hello world程序 ...

  4. 虚拟地址 线性地址 物理地址 傻傻分不清楚?

    Virtual address  Linear address  Physic address 先说说逻辑地址: 我们时常会看到一种地址的表述方式--segment:offset.比方0x0:0x7c ...

  5. linux内核线性地址等于物理地址,Linux 从虚拟地址到物理地址

    我们都知道,动态共享库里面的函数的共享的,这也是动态库的优势所在,就是节省内存.C 编译出来的可执行文件几乎都会用到libc的库,假如没有这个共享的技术,每个可执行文件都要占一份libc库的内存,这将 ...

  6. linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一)

    分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从<深入理解linux内核>这本书中摘抄几段关于上述名词的解释: 一.<深入理解linux内核>的解释 ...

  7. 逻辑地址、线性地址和物理地址的转换

    一.逻辑地址 逻辑地址是指在计算机体系结构中是指应用程序角度看到的内存单元.存储单元.网络主机的地址. 逻辑地址往往不同于物理地址,通过地址翻译器或映射函数可以把逻辑地址转化为物理地址. 一个逻辑地址 ...

  8. 逻辑地址,线性地址,物理地址

    2019独角兽企业重金招聘Python工程师标准>>> 本人是搞java开发的,但是了解一些底层的东西能帮助我理解一些编程上的东西. linux使用的基本上都是虚拟地址,内核程序中用 ...

  9. 逻辑地址、线性地址、物理地址和虚拟地址初步认识

    早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址.当计算机同时运行多个程序时,必须保证这些 ...

最新文章

  1. 比Spring简单的IoC容器
  2. C语言实验——拍皮球_JAVA
  3. c#设计模式学习1之工厂模式
  4. [js] Geolocation.getCurrentPosition()用来做什么的?在什么浏览器不受兼容?
  5. python 复制文件并重命名_好书推荐 | Python 如此神奇,让繁琐工作自动化
  6. Tideways+Xhgui搭建非侵入式php监控平台
  7. libSVM + VS2013 + C++使用介绍
  8. JAVA8——StringJoiner类
  9. 程序员工资待遇,投票!
  10. python可以制作大型游戏_python能做游戏吗-python能开发游戏吗
  11. R语言绘制bivariate polar plots
  12. 为什么编c语言总有一个错误,为什么程序最后总会显示有1个错误
  13. java斗地主socket_纯JAVA写的socket局域网斗地主游戏
  14. 关于IDEA创建的JavaWeb项目无法继承Servlet项目的问题
  15. 《南瓜书pumpkin-book》项目链接
  16. java编写一个学生类和教师类,Java创建一个学生类
  17. Linux快速入门(操作基础)
  18. Win11通过注册表修改文件默认打开方式
  19. Qt基于定时器实现简单动图展示(2例)
  20. 数学建模预测模型实例(一)---大学生体测数据模型

热门文章

  1. 笔试算法题及解答(Python)
  2. 亲历dataguard的一些经验问答题
  3. .Net 中HashTable,HashMap 和 Dictionarykey,value 和ListT和DataTable的比较
  4. python file operations
  5. ios-晋级之路 CocoaPods引用第三方库不import不自动补齐
  6. 分布式检索系统的简单设计
  7. 定义根目录, window格式 转化为linux格式
  8. Git学习笔记03--git reset
  9. Jenkins(二)
  10. (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版