精华内容
下载资源
问答
  • 逻辑地址、线性地址、物理地址和虚拟地址 逻辑地址、线性地址、物理地址和虚拟地址
  • 1.物理地址 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。 在实地址模式(因为实模式没有分段或分页机制,Cpu不进行自动地址转换)下,程序员...2.虚拟地址 操作系统都提供了虚拟内存(virtual mem

    1.物理地址

    用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

    在实地址模式(因为实模式没有分段或分页机制,Cpu不进行自动地址转换),程序员操作的就是物理地址,所谓的物理地址就是物理内存上的32位地址,物理地址可以直接定位到物理内存上的位置,无论任何操作,最终都必须要得到物理地址才能在物理内存上进行操作.

    2.虚拟地址
    操作系统都提供了虚拟内存virtual memory管理抽象进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它转换成真正的物理地址

    有了虚拟内存,一个程序就可以使用比真实物理地址大得多的地址空间。所谓的虚拟地址,从广义上讲,不是物理的就是虚拟的,因为不是物理地址的地址是无法在物理内存上定位的,所以他们都可以被称为虚拟地址”,从这个意义上讲,逻辑地址和线性地址都可以被称为虚拟地址而从狭义上讲,虚拟地址指的是没有经过分页机制和分段机制转换的地址,也就是段寄存器和变址寄存器内容的组合,从这个意义上来说,虚拟地址就是类似于CS:SI这样形式的地址.

    3.逻辑地址Logical Address

    逻辑地址就是上层程序员可以操作的地址,和段相关的偏移地址部分也就是变址寄存器中存储的32偏移地址,而其他寄存器上的地址往往对于上层程序员来说是不可更改甚至是不可见的只有在实模式下,逻辑地址才和物理地址一致(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑地址也就是在保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样).应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及.应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作.

    4.线性地址

    对狭义上的虚拟地址通过分段机制以后,可以得到段基址段界限以及段偏移地址(即逻辑地址),段基址与段偏移地址的组合就是线性地址,线性地址可以在虚拟内存上完成定位如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址.若没有启用分页机制,那么线性地址直接就是物理地址.对于程序员来说,他们并不关注MMU如何工作以及其得到的结果,他们只需要关心线性地址或者逻辑地址就可以完成全部工作了.

    5.虚拟内存

    是指计算机呈现出要比实际拥有的内存大得多的内存量.因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序.这使得许多大型项目也能够在具有有限内存资源的系统上实现.

    很多内存管理策略都需要同时将多个进程放在内存中,以便执行这些进程,这些策略都需要在进程执行之前将整个进程放在内存中。而虚拟内存技术允许执行进程不必完全放在内存中,这样我们就可以运行比物理内存大的程序,使得程序员不受内存存储的限制。

        比如说异常处理、错误处理可能不经常执行或者就不执行,这些程序使得我们可以只需要加载需要执行的部分,从而减少了内存使用。

        从而,构造一个大的虚拟内存空间,将其映射到较小的物理内存。这个大的虚拟内存空间存储我们进程的所有信息,而当执行进程时,我们只加载需要执行的部分,。这里就需要采用一定的技术,比如按需调页、页面置换、帧分配等,使得进程的执行可以在虚拟内存和物理内存之间进行协调,完成整个程序的执行。

        优点:虚拟内存可以大于物理内存,一般为物理内存的1.5倍到3倍,从而可以运行比物理内存大的程序,进而使得更多的程序可以同时执行,提高了多道程序的程度,增加了CPU的使用率,并且使得进程之间的独立性得到了更好的体现。

    6.内存的基本管理(页  段  段页)

        1通常将逻辑内存进行分页,将逻辑内存分成很多小的页面,然后通过页表,映射到物理内存,而物理内存则划分为很多成为帧的块,从而和页对应起来,页和帧的对应关系主要是通过页表来保存的,页表中有很多条目,较为详细地保存了这些信息。进程都有自己的内存空间(虚拟内存),上面所说的虚拟内存技术就是指进程的虚拟内存空间存储了所有的进程信息,然后虚拟内存空间分成很多页,这些页并不是在进程执行时全部换入到物理内存,而是按照需要进行换入,这需要一定的算法管理

        虚拟内存(虚拟存储器)是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,

        虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤:

      1CPU访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。
      2)如该组号已在主存内,则转而执行;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
      3)从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
      4)从地址变换表读出与逻辑组号a对应的物理组号a
      5)从物理组号a和组内字节地址b得到物理地址。
      6)根据物理地址从主存中存取必要的信息。
        调度方式有分页式、段式、段页式3种。

    页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点没有外碎片只有内碎片,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点各页不是程序的独立模块不便于实现程序和数据的保护

    段式调度是按程序的逻辑结构划分地址空间,段的长度不等的,并且允许伸长,它的优点是消除了内碎片有外碎片易于实现存储保护,便于程序动态装配;缺点是调入操作复杂

    段页式调度中把物理空间分成页程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。

     

     


    展开全文
  • 虚拟地址物理地址转换
  • 虚拟地址做为程序员应该听说的最多,不管是在linux还是windows下编程,程序所操作地址都是虚拟地址虚拟地址是硬件MMU与软件内存管理结合的产物,方便更高效率的使用RAM。内存管理是篇大文章,这里就不聊细节了,...

    原文地址:https://blog.csdn.net/u014379540/article/details/52502470

    1 虚拟地址

    虚拟地址做为程序员应该听说的最多,不管是在linux还是windows下编程,程序所操作地址都是虚拟地址。

    虚拟地址是硬件MMU与软件内存管理结合的产物,方便更高效率的使用RAM。内存管理是篇大文章,这里就不聊细节了,具体可以看UTLK的内存寻址一章。

     

    逻辑地址 虚拟地址作为软件开发人员在基于系统编程以及裸编下都会操作到。

     

    2 物理地址

    对于嵌入式开发,物理地址是必须明白的,物理地址是指处理器芯片发出,来进行地址空间寻址的地址,它与处理器地址引脚上发出的电信号相对应。

    UTLK上说用于内存芯片级的单元寻址,真实的开发环境中不止这些,因为处理器外部除了RAM还需要别的外设,如nand, spi,serial(当然是指的这些外设的controller)等。

    物理地址是处理器真实发送到其地址总线上的地址,而该地址应该访问到谁(ram controller?nand controller?),这个需要看该设备系统总线的仲裁,也就是总线仲裁,现在常用的总线仲裁有AXI AHBA等。

    这些总线仲裁器来规划处理器的物理地址空间。

    大部分处理器手册会给出其address map,也就是外设控制器(寄存器)在该处理器地址空间上的分布情况。

     

    对于处理器来说,虚拟地址 逻辑地址都是一个输入源,处理器对这些地址进行转换(比如利用MMU),转换为物理地址,真正处理器发出的地址是物理地址。

     

    3 总线地址

    总线地址是最难理解的一个概念。

    所有的地址都可以称为总线地址,因为开发环境下所有的设备都是接在总线上,如AXI总线,APB总线,PCI总线 I2C总线 SPI总线。也就会存在很多种地址空间。

     

    大部分情况下,总线地址=物理地址,为什么呢,物理地址是处理器在该系统总线上发出的地址,因此处理器发出的物理地址完全可以理解为处理器地址空间的总线地址,这肯定是相等的。

    大部分程序操作都是处理器作为主设备,根据指令,来发出地址,读写数据。这时总线地址=物理地址

    有一种情况下不是处理器做主设备,DMA,DMA controller操作RAM是不需要经过处理器的,这是DMA controller是主设备,但是因为DMA controller也是挂接在系统总线上,也就是处理器的地址空间中。

    所以这时DMA controller发出的地址也是物理地址。

    有一种特殊情况下,总线地址与物理地址不同,就是PCI总线。

    因为PCI总线存在地址映射,这是因为PCI控制器内部有桥接电路,桥接电路会将I/O地址映射为不同的物理地址。

    可以想象,PCI控制器挂接在处理器的系统总线上,而另一端的PCI总线上外扩了一些PCI设备。

    假如某个PCI设备具有DMA能力,要去操作RAM,这时该设备看到的RAM的地址就应该是由系统总线映射到PCI总线上的总线地址。

    映射关系由PCI控制器地址窗口来配置,一般是一个偏移量,所以这时映射到PCI总线上的RAM的总线地址就不是RAM在处理器系统地址空间上的物理地址(也可以称为系统总线地址)了。

    因此总线地址  !=  物理地址。

    当然PCI控制器地址窗口可以配置为平映射,这时总线地址就跟物理地址相同了。

     

    这时还会想到一点问题,那像I2C总线 SPI总线会不会也有这样的问题,其实多虑了,PCI总线存在这个问题,是因为PCI总线支持设备做主设备,进行DMA。

    而I2C SPI总线不具有这样的能力,但是他们还是有各自的地址空间,因此我们在操作I2C SPI总线时需要在其数据线上根据协议来发送地址锁定设备的。这个地址就不是处理器地址空间了,而是相应总线的地址空间了。

     

    经过上面的解释,可以看出,任何开发环境都存在很多地址总线(AXI PCI I2C SPI),也就有很多地址空间。

     

    物理地址也是总线地址,只不过是处理器系统总线地址(如AXI AHBA等)罢了。

    展开全文
  • 虚拟地址

    千次阅读 2020-02-06 18:08:59
    虚拟地址 虚拟地址是程序运行在保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址。 那为什么需要虚拟地址呢 我们要说到寻址方式 寻址:根据指令内容确定操作数地址的过程,称为寻址 在16位的cup或者8086...

    虚拟地址

    虚拟地址是程序运行在保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址。

    那为什么需要虚拟地址呢

    我们要说到寻址方式
    寻址:根据指令内容确定操作数地址的过程,称为寻址

    在16位的cup或者8086cpu的时候,他寻址方式的模式为:实模式
    而在32位或者64位,寻址方式的模式为:保护模式

    实模式

    我们先来看一下实模式下程序的运行
    例:

    在这里插入图片描述
    如图,在实模式中,A程序和B程序从磁盘直接加载进内存中运行,我们所看到或者得到的就是物理地址,我们都知道内存是连续的,现在假设A程序是恶意程序,他现在可以通过自己运行时所获取的物理地址加上偏移就可以进入B程序中,可以篡改B程序的指令或者数据,导致B程序崩溃或者出错

    保护模式

    我们继续来看一下保护模式下程序的运行
    例:

    在这里插入图片描述
    在保护模式中,在程序从磁盘加载进内存的中间加了一个中间层,即就是虚拟地址,在程序编译,链接的时候先映射进虚拟地址,在运行的时候会在映射进物理地址

    这样的模式好处在于,在虚拟地址中,如图B程序的虚拟地址,不管通过如何偏移,他都在虚拟地址中,最后映射进物理地址也在B程序内,不会影响到其他的程序,起到了进程隔离,保护了其他的进程

    所以如今的寻址方式的模式大都是以保护模式为主,也就是虚拟地址空间,因为其更能保证进程的安全和跟合理的安排程序运行

    虚拟地址空间

    在32位操作系统中虚拟地址空间大小为4G
    而在虚拟地址里用户空间和内核空间的比例划分为
    Windows是2:2划分的
    Linux是3:1划分的

    linux虚拟地址空间图如下

    在这里插入图片描述

    展开全文
  • 逻辑地址,虚拟地址,物理地址,总线地址  逻辑地址:由段地址和段内偏移组成,类似于 CS:offset  虚拟地址:由逻辑地址计算得来 物理地址:由 CPU 内部的MMU 单元通过页表,计算出物理地址,物理地址是出现在...

            很多人可能写程序这么多年,都分不清以下几个地址的概念,亦或是当进入程序员行列时由于平台的关系有些概念已经渐渐弱化,没有赶上那个必须与硬件亲密接触才能够写好程序的年代,所以平时也不会接触到这些概念,但了解这些概念无疑是对编程生涯是有好处的,下面就简述一下这几个概念的意思。

            逻辑地址,虚拟地址,物理地址,总线地址:

            逻辑地址:由段地址和段内偏移组成,类似于 CS:offset

            虚拟地址:由逻辑地址计算得来

            物理地址:由 CPU 内部的MMU 单元通过页表,计算出物理地址,物理地址是出现在地址

                    总线上的值。

            总线地址:CPU 是个独立的模块,它可以应用到不同的地方,例如主板上,测试板上,面

            包机上,路由器上。它只是提供了一些针脚与外部连接。以 x86 经典架构为例,CPU 的

    输出针脚包括地址总线,数据总线,控制总线等,它们组成 FSB,然后与北桥芯片组相连,与北桥芯片组相连的还有外围设备总线,如果 ram 的 ddr 控制器也连接到北桥的话,ram 也算是这些设备其中之一,当 cpu 产生了一个物理地址,这个信号被北桥芯片接收,北桥芯片会转译成总线地址(所有的外设,包括ram 都会配置在这个空间中,这个过程叫做 IOMMU,与具体架构有关),然后再去判断,配置在这个地址区域的设备,其实是设备的控制器接收到信号去响应了而已。Dma 操作时使用的就是总线地址,如果   在总线上挂载了 ram ,就可以直接操作了。

    展开全文
  • 通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址的区别  物理地址:物理地址就是内存单元的绝对地址,比如你有一个4G的内存条插在电脑上,物理地址0x0000就表示内存条的第一个存储单元,0x0010就表示...
  • 虚拟地址与虚拟内存的理解

    千次阅读 2019-04-16 10:38:00
    在最开始看书的时候,我知道程序在运行时,不是全部加入内存当中的,当然,这个现在依旧正确,在有了虚拟地址空间这个概念以后,我一直认为是在硬盘中划分出一块虚拟内存出来,然后给每个程序4G的硬盘空间,作为这个...
  • 虚拟地址空间

    千次阅读 2018-05-14 13:26:31
    转自:...通过虚拟地址访问内存有以下优势:程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。 程序可以使用一系列虚拟地址来访问大于可用物理内...
  • 物理地址和虚拟地址的区别

    千次阅读 2018-03-08 21:26:07
    转载自:http://blog.csdn.net/qq_21792169/article/details/48104665(一)地址的概念1)物理地址:CPU...在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。...
  • Note:本文是基于80×86微处理器进行原理总结。...线性地址:也称为虚拟地址,也不是一个真实的地址,他是对应了硬件页式内存转换前地址。 物理地址:就是物理内存中的真正地址。 内存控制单元(MMU)
  • 在linux内核书籍中,介绍内存管理的部分,频繁出现三个...比如一块内存,物理地址是0,在 设备端起来是0x80000000,而物理地址0又通常被映射为虚拟地址0xc0000000,从而同一地址就具备了三个身份,但他们在物理上...
  • 1、 名词解释:逻辑地址、虚拟地址、线性地址、物理地址 2、 80386保护模式下虚拟地址是如何经过分段机制转化为线性地址再经过分页机制转化为物理地址的? 3、 什么是虚拟内存管理?80386为操作系统实现虚拟内存管理...
  • 该文档介绍了内存物理地址和内存虚拟地址以及内存相对虚拟地址,可以帮助你学习内存知识
  • 相对虚拟地址(RVA,Relative Virtual Address),RVA只是内存中的一个简单相对于PE文件装入地址的偏移位置,它是一个“相对地址”,或称“偏移量”。例如,假设一个PE文件从地址400000h处装入,并且它的代码节开始...
  • 链接地址,物理地址,虚拟地址这三者地址都有各自的区别,这也是我开发学习过程中,自己琢磨出来领悟的,网上搜索的都讲的很专业化,不太好理解,理解起来感觉有些吃力。所以我想以个人理解的角度,通俗点去讲讲这三...
  • 虚拟地址空间程序实例,包含内核地址空间和用户空间地址空间。虚拟地址空间程序实例,包含内核地址空间和用户空间地址空间。虚拟地址空间程序实例,包含内核地址空间和用户空间地址空间。虚拟地址空间程序实例,包含...
  • 虚拟地址和虚拟内存区别

    千次阅读 2014-06-20 20:48:37
    程序访问存储器所使用的逻辑地址称为虚拟地址虚拟地址 (virtual address): 4G虚拟地址空间中的地址,程序中使用的都是虚拟地址。每一个进程都分配有一个4G的虚拟地址。通过虚拟地址访问内存的形式称为保护模式,...
  • 1.虚拟内存是内存管理的一种方式, 它在磁盘上划分出一块空间由操作系统管理,当物理内存耗尽是充当物理内存来使用。...2.虚拟地址空间:在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中,这...
  • 操作系统虚拟地址计算物理地址

    万次阅读 多人点赞 2018-12-05 18:39:21
    有关计算机操作系统中虚拟地址转换为物理地址的计算 笔者以具体题目加以说明: 在一个分页虚拟存储系统中,用户编程空间为32个页,页长为1 KB,内存空间为16 KB。如果应用程序有10页长,若已知虚页0、1、2、3,已...
  • 物理地址:这里说的物理地址是内存中的内存单元实际地址,不是外部总线连接的...虚拟地址虚拟地址是CPU保护模式下的一个概念,保护模式是80286系列和之后的x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系...
  • 物理地址就是内存上数据的地址,虚拟地址查询GDT/LDT表,可以找出虚拟地址和内存地址的映射关系,最终得到物理地址,这样CPU就可以去物理内存上拿数据了. 可参考:http://book.51cto.com/art/201006/203595.htm ...
  • 进程的虚拟地址在内核中通过三/四级页表到达物理地址。而内核的虚拟地址在NORMAL部分算是逻辑地址只是线性的映射。 这两者有什么关系么?或者说内核态为什么还要有虚拟地址存在? 开场白: 按照以前书上,或...
  • 物理地址与虚拟地址的区别

    千次阅读 2014-10-17 23:43:34
    从最根本的角度来,地址只分为两类:物理地址、虚拟地址。 S3C2410、S3C2440上电之后,是使用物理地址来访问的。数据手册中介绍各种寄存器时,所附带的地址就是物理地址。 虚拟地址是启动内存管理单元(MMU)后...
  • 与其说虚拟地址,倒不如说内核给程序(代码段、数据段)提供了统一的访问模式(抽象出统一的访问模式)基址加偏移量(这也是内存的分层次的断页管理模式)。所以所有程序的编码你可以从假设的“0”基址开始开始编程,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 681,053
精华内容 272,421
关键字:

如何看地址是不是虚拟地址