首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线性地址和物理地址

线性地址和物理地址是在计算机内存管理中常见的概念。

线性地址是指在进程地址空间中分配给程序的虚拟内存地址,它是一个相对于进程地址空间的地址。在计算机中,每个进程都有自己的地址空间,这些地址空间是相互隔离的,以保证每个进程的运行环境是独立的。线性地址是由操作系统负责管理的,它们是由程序员编写的程序中使用的逻辑地址经过地址转换后得到的。

物理地址是指实际存在于计算机内存中的地址,它是一个绝对的地址。在计算机中,物理内存是由一个连续的地址空间组成的,而进程的虚拟内存则是由多个不连续的地址空间组成的。当进程运行时,操作系统会将进程的虚拟地址转换为物理地址,以便程序能够正确地访问内存中的数据。

线性地址和物理地址之间的转换是由硬件和操作系统共同完成的,这个过程被称为地址转换。在计算机中,硬件会将线性地址转换为物理地址,而操作系统则负责管理虚拟内存和物理内存之间的映射关系。

线性地址和物理地址的区别在于它们的地址空间是否相互隔离。线性地址是相对于进程地址空间的地址,而物理地址是绝对的地址,它们是由操作系统和硬件共同完成的地址转换过程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

物理地址虚拟地址的分布

由于 ZONE_NORMAL 内核线性空间存在直接映射关系,所以内核会将频繁使用的数据如 Kernel 代码、GDT、IDT、PGD、mem_map 数组等放在 ZONE_NORMAL 里。...Linux物理地址虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址空间映射到 1G 的内核线性空间中,这显然不可能。...于是,内核将 0~896M 的物理地址空间一对一映射到自己的线性地址空间中,这样它便可以随时访问 ZONE_DMA ZONE_NORMAL 里的物理页面;此时内核剩下的 128M 线性地址空间不足以完全映射所有的...虽然这样存在效率的问题,但是内核毕竟可以正常的访问所有的物理地址空间了。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2.1K31

物理地址虚拟地址的分布

由于 ZONE_NORMAL 内核线性空间存在直接映射关系,所以内核会将频繁使用的数据如 Kernel 代码、GDT、IDT、PGD、mem_map 数组等放在 ZONE_NORMAL 里。...Linux物理地址虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址空间映射到 1G 的内核线性空间中,这显然不可能。...于是,内核将 0~896M 的物理地址空间一对一映射到自己的线性地址空间中,这样它便可以随时访问 ZONE_DMA ZONE_NORMAL 里的物理页面;此时内核剩下的 128M 线性地址空间不足以完全映射所有的...虽然这样存在效率的问题,但是内核毕竟可以正常的访问所有的物理地址空间了。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2.1K111
  • WCF后续之旅(15): 逻辑地址物理地址

    在WCF中,每个终结点都包含两个不同的地址——逻辑地址物理地址。逻辑地址就是终结点Address属性表示的地址。...至于物理地址,对于消息发送放来讲,就是消息被真正发送的目的地址;而对于消息的接收放来讲,就是监听器真正监听的地址。 一、服务端的物理地址 在默认的情况下,终结点的逻辑地址物理地址是同一个URI。...换句话说,终结的逻辑地址是必须的,如何物理地址没有指定的,默认使用逻辑地址作为物理地址。...上面我们介绍了基于消息接收端终结点物理地址的指定,现在我们来介绍对于消息发送端的终结点,物理地址如何指定。...Message拦截、转发工具[上篇] WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具[下篇] WCF后续之旅(14):TCP端口共享 WCF后续之旅(15): 逻辑地址物理地址

    801110

    IP地址物理地址有什么区别

    网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写), 它存储的是传输数据时真正赖以标识发出数据的电脑接收数据的主机的地址。...就是你的电脑的身份证啦~这个地址是由网卡决定的,但是可以在注册表里面改动系统读取的网卡物理地址。...MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。...(早期的2字节的却不用申请)    一:IP地址Mac地址有什么联系区别   对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址。...另外IP地址Mac地址是有区别的,虽然他们在局域网中是一一对应的关系。

    1.5K10

    你真的懂物理地址逻辑地址吗?

    好了,回归这题,本篇文章主要给大家讲述一下物理地址逻辑地址的概念,以及它们之间的联系与区别。ps:本文以Intel8086处理器为例讲述。...以上过程中的[0001]就是我们所要说的物理地址,它是一个绝对的固定的地址。 ? 那假如我们指令中的地址用的是物理地址(绝对地址),会产生怎样的问题呢?...如果我们将[0001]当成物理地址的话,那么mov ax,[0001]这句指令读取到的将会是错误的内容。...因为,我们想要读取的数据是[0003][0004]所拼接而成的数据,而该条指令读取的却是[0001][0002]的内容,[0001][0002]中所存放的内容未知,因此,如果我们把[0001]当作物理地址时...由此,便诞生了我们将要说的逻辑地址的概念,物理地址它是固定不变的,而逻辑地址会随着程序加载到内存中的位置而变化。好,我们接下来看一下什么是逻辑地址。 ?

    5.2K41

    通过linux0.11源码理解进程的虚拟地址线性地址物理地址

    进程的地址有三种,分别是虚拟地址(逻辑地址)、线性地址物理地址。在分析之前先讲一下进程执行的时候,地址的解析过程。...然后根据cs的值选择idt表格中的一项,从而得到代码段的基地址限长,用基地址加上ip指向的偏移得到一个线性地址,这个线性地址分为三个部分,分别是页目录索引,页表索引,物理地址偏移。...然后到页目录吧页表中找到物理地址地址,再加线性地址中的偏移部分,得到物理地址。下面我们看看这些内容是怎么设置的,使得执行的时候能正确找到我们想要的地址去执行代码。我们从fork函数开始。...用线性地址的首地址加上ip 中的偏移,得到线性地址,然后再通过页目录页表得到物理 地址物理地址还没有分配则进行缺页异常等处理。...然后计算进程的代码和数据的线性地址地址限长,写到ldt的描述符中。接着复制页表,但是不分配物理地址。最后把tss结构ldt结构挂载到GDT中。fork函数就完成了。

    1.5K60

    物理地址读写驱动

    正文 没有用MmMapIoSpace,用了映射的方式对物理地址数据进行读写,之前测试MmMapIoSpace在win10较高版本用不了,貌似是不支持了。...用法效果如下,加载驱动后,Read.exe用来读取物理地址的数据,限制为0x100字节大小,当然可以通过修改驱动代码来读取任意字节,我这里只是给了个demo;Write.exe则是对指定的物理地址进行写操作...注 不是驱动大佬,可能驱动代码写的并不是很好,如果有什么意见或者驱动存在了蓝屏的问题,欢迎指出指导 /* function 读取物理地址,大小为FF argv MapAddress:物理地址映射出来的地址...; //存放物理地址 SIZE_T size = 0x2000; //映射大小 //打开内核对象 status = GetPhysicalHandle(); if (status < 0)...; //存放物理地址 SIZE_T size = 0x2000; //映射大小 //打开内核对象 status = GetPhysicalHandle(); if (status < 0)

    2.5K40

    操作系统中逻辑地址物理地址的区别

    本文是关于操作系统中逻辑地址物理地址之间的区别。计算机操作系统中的内存使用两种不同类型的地址物理地址是内存的实际地址,如RAM,虚拟地址只是缓存RAM之间的逻辑地址映射。...在对地址以及为什么需要它们进行了快速讨论之后,我们现在将区分逻辑地址物理地址。 1、逻辑地址简介 当我们谈论逻辑地址时,我们指的是CPU分配给每个进程的地址。...2.1、地址映射 现在让我们讨论硬件如何在逻辑地址物理地址之间执行映射。在CPU内存管理单元(MMU)的硬件中安装有助于地址的映射。下图很好的解释了。...图1.2:逻辑地址物理地址的映射 这个内存管理单元对逻辑地址上的物理地址执行所有必需的映射。由MMU执行的非常基本的映射是由一种称为界限基址的方案执行的。这是执行映射可以使用的最简单的方法。...下面给出了逻辑地址物理地址的一般比较。

    2.8K30

    物理地址介绍「建议收藏」

    物理地址介绍 在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。...计算:(此类计算可直接使用计算器进行计算,总的来说就是进制之间的转换) 所以,如果现在一个4M flash可用地址区间 0x0—–>0x400000。...下图为一个1M flash(0x0—>0x100000)分区实例,至于下图起始地址0x8000000是有关地址映射的问题了。...补充: 关于rom ram RAM:随机存储器,与cpu直接交换数据的内部存储器,也叫内存,他可以随时读写,速度快,通常作为操作系统或其他正在运行的程序的临时数据存储媒介,其断电时不能保存数据(掉电数据丢失

    85520

    【操作系统复习】物理地址虚拟地址

    【操作系统复习】 物理地址虚拟地址 物理地址虚拟地址的区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存的实现(可以在页式或段式内存管理的基础上实现...虚拟地址转换为物理地址的过程 快表是存储在哪里的 物理地址虚拟地址的区别 操作系统有物理地址、逻辑地址线性地址(也叫虚拟地址)三种地址 物理地址 在存储器里以字节为单位存储信息,为正确地存放或取得信息...逻辑地址由两个16位的地址分量构成,一个为段基值,另一个为偏移量。两个分量均为无符号数编码。 线性地址 线性地址(Linear Address)是逻辑地址物理地址变换之间的中间层。...Linux 线性地址,逻辑地址虚拟地址的关系?...叫法不同而已 编译器产生的地址 逻辑(虚拟)地址经过分段转化为线性地址 线性地址经过分页转为物理地址 地址转换流程 按照逻辑地址中的页号查快表 若该页已存在快表中,则由页架号单元号形成绝对地址

    2.1K20

    80386的分段机制、分页机制物理地址的形成

    1、逻辑地址线性地址物理地址 ? 所谓描述符(Descriptor),就是描述段的属性的一个8 字节存储单元。 2、用户段描述符(Descriptor) ? ?...(3)将段描述符中的32 位段基地址放在ESI、EDI 等中的32 位有效地址相加,就形成了32 位物理地址。 ?...每个段的基地址为0,因此,逻辑地址线性地址映射保持不变,也就是说,偏移量就是线性地址,我们以后所提到的逻辑地址(或虚拟地址线性地址指的也就是同一地址。...分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K 字节作为一个单位进行映射,并且每个页面都对齐4K 字节的边界,因此,线性地址的低12 位经过分页机制直接地作为物理地址的低...当访问一个操作单元时,如何由分段结构确定的32 位线性地址通过分页操作转化成32位物理地址呢?

    1K30

    「linux」物理地址,虚拟地址,内存管理,逻辑地址之间的关系

    物理地址属于比较好理解的,物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定了内存中有多少个内存单元,物理地址的大小由地址总线的位宽决定!...虚拟地址: 虚拟地址是CPU保护模式下的一个概念,保护模式是80286系列之后的x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系统内核会进入一种CPU保护模式,也叫虚拟内存管理,在这之后的程序在运行时都处于虚拟内存当中...内存碎片,内存碎片分为两种,一种是内部碎片外部碎片!...逻辑地址: 逻辑地址由两部份组成,段标识符段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。...GDTR中存放的是GDT在内存中的基地址其表长界限。)

    3.2K00

    「linux」物理地址,虚拟地址,内存管理,逻辑地址之间的关系2

    线性地址线性地址是逻辑地址物理地址之间的一个中间层变换,程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址,逻辑地址是如何知道自己的段基的址?...如果启用了分页机制,那么MMU内存管理单元会在内存映射表里寻找与线性地址对应的物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。...1.虚拟地址是CPU保护模式下的一个概念,保护模式是80286系列之后的x86兼容CPU操作模式,在进入虚拟模式之前CPU以及Bootloader,操作系统内核均运行在实模式下,直接对物理地址进行操作...7.内存中有一个叫MMU(内存管理单元)的电子元件负责从操作系统已经初始化好的内存映射表里查询与虚拟地址对应的物理地址并转换, 8.逻辑地址由两部份组成,段标识符段内偏移量。...线性地址是逻辑地址物理地址之间的一个中间层变换,程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址

    1.9K00

    80386的分段机制、分页机制物理地址的形成

    1、逻辑地址线性地址物理地址 ? 所谓描述符(Descriptor),就是描述段的属性的一个8 字节存储单元。 2、用户段描述符(Descriptor) ? ?...(3)将段描述符中的32 位段基地址放在ESI、EDI 等中的32 位有效地址相加,就形成了32 位物理地址。 ?...每个段的基地址为0,因此,逻辑地址线性地址映射保持不变,也就是说,偏移量就是线性地址,我们以后所提到的逻辑地址(或虚拟地址线性地址指的也就是同一地址。...分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K 字节作为一个单位进行映射,并且每个页面都对齐4K 字节的边界,因此,线性地址的低12 位经过分页机制直接地作为物理地址的低...当访问一个操作单元时,如何由分段结构确定的32 位线性地址通过分页操作转化成32位物理地址呢?

    1.3K50

    程序优化之”变量名长短”,内存逻辑地址,物理地址

    原文博客 地址 程序如何确认内存地址 我们都知道,所有内存数据都是储存在我们硬件内存条上面的,那么它的空间是固定的,并且某个位置被占用的时候,应该是不能被其他程序使用的,否则将会内存冲突。...(一个空教室,小明已经坐了一个位置,其他同学不能坐在他大腿上了诶) 物理内存地址 上面这个概念就是物理内存地址,描述说明在硬件中实际的储存位置(好比 二排三列) 逻辑内存地址 那么我们的程序在编译完成之后...,怎么确定它在运行时到底使用哪一块内存地址呢?...使用的是相对的逻辑内存地址。 比如我们有以下一份PHP代码 <?...php $a = 1; $b = 3; 那么编译后的程序可能如下(用文字描述) Location = 向系统申请内存地址,并返回物理内存地址 申请一块内存,储存代码$a的值,对应的物理内存地址为 ·Location

    63410

    用户态进程如何得到虚拟地址对应的物理地址

    一般我们不需要从用户态得到进程虚拟地址对应的物理地址,因为一般来说用户进程是完全不关心物理地址的。 少数应用场景下,用户可能会关心,比如在用户态做DMA的场景(如DPDK之类的)。...从用户态得到虚拟地址对应的物理地址,我们不可能去walk进程的page table,也没有权限。不过还好内核给我们提供了一个接口,叫pagemap,而且,这个接口与硬件的体系架构无关。...下面我们忽略swap的影响(假设关闭了swap或者page一直是pin的状态),从DPDK抄一段虚拟地址转换为物理地址的代码: #define phys_addr_t uint64_t #define...+ ((unsigned long)virtaddr % page_size); page & 0x7fffffffffffffULL取得了页帧号(PFN),乘以页的size得到这页起始的物理地址...,之后加上virtaddr % page_size的页内偏移,得到最终的物理地址

    3.8K21
    领券