精华内容
下载资源
问答
  • 在编写P-Flash时,我们首先需要搞明白飞思卡尔内部Flash memory的管理机制,这其中就涉及到我们访问Flash是采用逻辑... 关于逻辑地址和物理地址的关系,可以参考以下文章《programing flash memory in freescale ...

      在编写P-Flash时,我们首先需要搞明白飞思卡尔内部Flash memory的管理机制,这其中就涉及到我们访问Flash是采用逻辑地址还是全局地址,逻辑地址是由单片机内部的内存管理机制决定的,而全局地址对应的是物理地址。逻辑地址最终都会映射到物理地址上的某段区间。

      关于逻辑地址和物理地址的关系,可以参考以下文章《programing flash memory in freescale s08/s12/codefire mcus family》  链接:http://www.docin.com/p-1639678197.html

      

     

    转载于:https://www.cnblogs.com/xiaokangkp0602/p/9282930.html

    展开全文
  • 逻辑地址逻辑地址是由一个标识符加上一个指定内相对地址的偏移量。是程序员编程时需要考虑的地址,是一种算法控制下的地址,程序员在使用该地址时无需考虑底层实现,只要在逻辑上合理即可。 程序员编程(逻辑...

    物理地址:顾名思义,物理地址对应的机器内主存的地址,包括RAM和ROM,是机器上的内存本身。
    虚拟地址:在MMU(内存管理单元)的帮助下,会建立物理地址到虚拟地址的映射。一般来说通过虚拟地址映射可以产生比物理地址更大的内存空间。一般来说,在计算机中多采用虚拟地址,而在单片机中采用物理地址。
    逻辑地址:逻辑地址是由一个段标识符加上一个指定段内相对地址的偏移量。是程序员编程时需要考虑的地址,是一种算法控制下的地址,程序员在使用该地址时无需考虑底层实现,只要在逻辑上合理即可。
    程序员编程(逻辑地址)<—算法–>操作系统(虚拟地址)<—内存管理单元–>物理元件(物理地址)

    展开全文
  • 一、逻辑地址转线性地址  机器语言指令中出现内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中内存管理...这里内存地址0x80495b0 就是一个逻辑地址,必须加上隐含DS 数据段的基地址,才能构

    一、逻辑地址转线性地址

        机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。

    我们写个最简单的hello world程序,用gcc编译,再反汇编后会看到以下指令:

    mov    0x80495b0, %eax

    这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,才能构成线性地址。也就是说 0x80495b0 是当前任务的DS数据段内的偏移。

    x86保护模式下,段的信息(段基线性地址、长度、权限等)即段描述符8个字节,段信息无法直接存放在段寄存器中(段寄存器只有2字节)。Intel的设计是段描述符集中存放在GDTLDT中,而段寄存器存放的是段描述符在GDTLDT内的索引值(index)

    Linux中逻辑地址等于线性地址。为什么这么说呢?因为Linux所有的段(用户代码段、用户数据段、内核代码段、内核数据段)的线性地址都是从 0x00000000 开始,长度4G,这样 线性地址=逻辑地址+ 0x00000000,也就是说逻辑地址等于线性地址了。

    这样的情况下Linux只用到了GDT,不论是用户任务还是内核任务,都没有用到LDTGDT的第1213项段描述符是 __KERNEL_CS __KERNEL_DS,第1415项段描述符是 __USER_CS __USER_DS。内核任务使用__KERNEL_CS __KERNEL_DS,所有的用户任务共用__USER_CS __USER_DS,也就是说不需要给每个任务再单独分配段描述符。内核段描述符和用户段描述符虽然起始线性地址和长度都一样,但DPL(描述符特权级)是不一样的。__KERNEL_CS __KERNEL_DS DPL值为0(最高特权),__USER_CS __USER_DSDPL值为3

    gdb调试程序的时候,用info reg 显示当前寄存器的值:

    cs             0x73     115

    ss             0x7b     123

    ds             0x7b     123

    es             0x7b     123

    可以看到ds值为0x7b, 转换成二进制为 00000000 01111011TI字段值为0,表示使用GDTGDT索引值为 01111,即十进制15,对应的就是GDT内的__USER_DS用户数据段描述符。

    从上面可以看到,Linuxx86的分段机制上运行,却通过一个巧妙的方式绕开了分段。

    Linux主要以分页的方式实现内存管理。

    二、线性地址转物理地址

    前面说了Linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家都知道,那就是通过分页机制,具体的说,就是通过页表查找来对应物理地址。

    准确的说分页是CPU提供的一种机制,Linux只是根据这种机制的规则,利用它实现了内存管理。

    在保护模式下,控制寄存器CR0的最高位PG位控制着分页管理机制是否生效,如果PG=1,分页机制生效,需通过页表查找才能把线性地址转换物理地址。如果PG=0,则分页机制无效,线性地址就直接做为物理地址。

    分页的基本原理是把内存划分成大小固定的若干单元,每个单元称为一页(page),每页包含4k字节的地址空间(为简化分析,我们不考虑扩展分页的情况)。这样每一页的起始地址都是4k字节对齐的。为了能转换成物理地址,我们需要给CPU提供当前任务的线性地址转物理地址的查找表,即页表(page table)。注意,为了实现每个任务的平坦的虚拟内存,每个任务都有自己的页目录表和页表

    为了节约页表占用的内存空间,x86将线性地址通过页目录表和页表两级查找转换成物理地址。

    32位的线性地址被分成3个部分:

    最高10 Directory 页目录表偏移量,中间10 Table是页表偏移量,最低12Offset是物理页内的字节偏移量。

    页目录表的大小为4k(刚好是一个页的大小),包含1024项,每个项4字节(32位),项目里存储的内容就是页表的物理地址。如果页目录表中的页表尚未分配,则物理地址填0

    页表的大小也是4k,同样包含1024项,每个项4字节,内容为最终物理页的物理内存起始地址。

    每个活动的任务,必须要先分配给它一个页目录表,并把页目录表的物理地址存入cr3寄存器。页表可以提前分配好,也可以在用到的时候再分配

    还是以 mov    0x80495b0, %eax 中的地址为例分析一下线性地址转物理地址的过程。

    前面说到Linux中逻辑地址等于线性地址,那么我们要转换的线性地址就是0x80495b0。转换的过程是由CPU自动完成的,Linux所要做的就是准备好转换所需的页目录表和页表(假设已经准备好,给页目录表和页表分配物理内存的过程很复杂,后面再分析)。

    内核先将当前任务的页目录表的物理地址填入cr3寄存器。

    线性地址 0x80495b0 转换成二进制后是 0000 1000 0000 0100 1001 0101 1011 0000,最高100000 1000 00的十进制是32CPU查看页目录表第32项,里面存放的是页表的物理地址。线性地址中间1000 0100 1001 的十进制是73,页表的第73项存储的是最终物理页的物理起始地址。物理页基地址加上线性地址中最低12位的偏移量,CPU就找到了线性地址最终对应的物理内存单元。

    我们知道Linux中用户进程线性地址能寻址的范围是 3G,那么是不是需要提前先把这3G虚拟内存的页表都建立好呢?一般情况下,物理内存是远远小于3G的,加上同时有很多进程都在运行,根本无法给每个进程提前建立3G的线性地址页表。Linux利用CPU的一个机制解决了这个问题。进程创建后我们可以给页目录表的表项值都填0CPU在查找页表时,如果表项的内容为0,则会引发一个缺页异常,进程暂停执行,Linux内核这时候可以通过一系列复杂的算法给分配一个物理页,并把物理页的地址填入表项中,进程再恢复执行。当然进程在这个过程中是被蒙蔽的,它自己的感觉还是正常访问到了物理内存。


    转载来自:http://blog.csdn.net/erazy0/article/details/6457626

    展开全文
  • 逻辑地址 逻辑地址是给程序员看的,是内部编程...线性地址是逻辑地址与物理地址的中间层,程序代码产生逻辑地址逻辑地址是selector:offset(CS:IP)的组成,用CS作为选择子去GDT(全局描述符表)中查找得到基址然后

    逻辑地址

    逻辑地址是给程序员看的,是内部编程使用的,由程序产生的与段和偏移地址,是CS:IP的形式,比如在进行C编程时,可以读取指针的值(&操作),这个值就是逻辑地址,它相当于当前进程数据段的地址。在intel-32,实模式下,逻辑地址与物理地址相等。在保护模式下,如果不开启分页机制,逻辑地址 = 线性地址。

    线性地址

    线性地址的概念是用来描述任务的地址空间的。IA-32处理器上,每个任务都有4G的虚拟内存空间,也就是线性地址空间。
    线性地址有两个前提条件:保护模式和页功能开启,只有CPU处于保护模式,而且页功能开启时,段部件产生的地址才是线性地址。
    线性地址是逻辑地址与物理地址的中间层,程序代码产生逻辑地址,逻辑地址是selector:offset(CS:IP)的组成,用CS作为选择子去GDT(全局描述符表)中查找得到段基址然后加上offset(段内偏移地址)就得到了线性地址。这个过程一般称为:段式内存管理。

    页式内存管理

    把线性地址分成四部分,前三部分分别作为索引去全局页目录、程序页目录、页表里查表,最终会得到一个页表Page Table,那里的值是一页物理内存的起始地址,加上线性地址的第四部分(页内偏移)就得到了物理地址。

    物理地址

    物理地址并不是内存条地址,而是CPU分配给内存设备的地址空间,这个地址经过地址分配电路就转换为内存条能够识别的地址,实现与内存条的通信。

    虚拟地址

    虚拟地址就是线性地址,跟逻辑地址没关系。

    示意图

    在这里插入图片描述

    展开全文
  • 每个逻辑地址都由一个(segment)偏移量(offset或displacement)组成,偏移量指明了从开始地方到实际地址之间距离。 线性地址(linear address)(也称虚拟地址 virtual address)。是一个32位无符号整数,...
  • 操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不绝对物理地址相干。 这样一来,逻辑地址可能是连续,然而在物理地址上,这个数组所占用页可能分散开来,物理地址上就是不...
  • 本博文引自我的知乎回答:Linux 线性地址,逻辑地址和虚拟地址的关系? 为了防止歧义,以下术语都用英文。部分术语不做解释了,不然答案就太长了。 以下讲解都是以代码为例 在 Intel 平台下,逻辑地址(logical ...
  • 进程虚拟地址在内核中通过三/四级页表到达物理地址。而内核虚拟地址在NORMAL...内核的逻辑地址 与 用户空间逻辑地址 (逻辑地址有时也被叫虚拟地址) 都是位于 0x00000000~0xFFFFFFFF 这虚拟地址空间 ,其中用户
  • 虚拟地址:  4G虚拟地址空间中的地址...跟逻辑地址类似,他也是个不真实的地址,如果逻辑地址是对应的硬件平台式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。   实际
  • 通常通过如果要外网访问某台服务器或计算机必须要有此服务器IP,IP就相当于每个人身知份证一样,...1.IP地址:IP地址是用来唯一标识互联网上计算机的逻辑地址,让电脑之间可以相互通信. 每台连网计算机都依靠IP地
  • 理解是链接相当于确定了库各目标模块之间相对位置,太早确定就没法随意重定位了,所以链接其实也相当于一种“编译”,编译器确定段的汇编地址做事情是一样逻辑地址到物理地址变换也是一样目的,...
  • 这里写目录标题线性地址逻辑地址和物理地址的区别Linux中的逻辑地址,线性地址和物理地址转换关系程序虚拟地址内存分布分配线性区、分配叶框进程内存空间从编写源代码到程序在内存中运行的全过程解析程序(进程)...
  • 地址空间实现与cpu的体系结构有很大的关系,目前以应用最广的的80X86体系结构来论述这块的技术文档较多。...每个逻辑地址都由一个段和偏移量组成,偏移量指明了从开始的地方到实际地址之间的距离。 线性地址(lin...
  • 2、存储器单元与物理地址的关系是一一对应,在一个逻辑段内,每个单元的对应的段地址是相同的,而偏移地址是不同的。 3、8086/8088存储器地址分段时,每个段起始地址的特征是低四位均为0。 4、在I/O接口中,为每个可...
  • 进程虚拟地址空间

    2021-05-06 15:53:10
    一次内存的分配其实就是分配逻辑地址更改信息,逻辑地址的合法性也是通过这个结构检测的。 2.页表结构 radix tree: 物理地址需要虚拟地址建立映射管理,假设映射关系为 物理地址 = f(虚拟地址)。那么页表就是...
  • 摘要:[目的/意义]从已颁布政策文件中找出我国推进政务大数据发展应用内在逻辑, 为优化未来政策路径提供对策建议。[方法/过程]通过政府门户网站收集189条有效政策文本, 综合运用词频分析软件人工方式提取...
  • 页式管理 从页式管理开始,到之后的段式管理,都与之前分区管理不同...页面:将进程的逻辑地址空间划分成与物理块大小相同若干片。 页表:存放于主存中,记录进程逻辑页与主存中物理块对应关系,实现从...
  • 构建:下载依赖包  1.1优先级  本地仓库>私服>中央仓库  1.2 逻辑  先在本地仓库找,时候有...(中央仓库的地址已经在一个配置文件里面配置好了,除非使用镜像覆盖掉)  1.3配置文件  (1) 本地仓库设置:maven setti
  • 分段有表,分页有页表,来建立逻辑地址(page)与物理地址(frame)映射关系。为了减少页表容量,讨论了一下反向页表。 非连续地址分配好处有:一个程序物理地址空间是非连续,可以减少地址碎片产生;更好...
  • 式存储管理中,将程序的逻辑地址空间内容分为不同的段进行管理,逻辑地址空间与物理地址空间之间映射关系图可以如下所示:每个内部是连续,但是不同的段在物理内存上是不连续段的概念: 表示访问...
  • 页式存储管理方式详解

    千次阅读 2020-05-12 15:34:32
    地址由段名和段内偏移量共同组成 信息共享 信息保护(以信息的逻辑单位为基础) 动态增长:保证使用过程中对内存动态需求 动态链接:运行时动态加载需要目标程序段 基本原理 分段 分段地址的逻辑
  • 18.5.3 通过asyncawait实现基于任务异步模式 538 18.5.4 异步Lambda 541 18.5.5 任务调度器同步上下文 546 18.5.6 async awaitWindows UI 547 18.5.7 await操作符 548 18.6 并行迭代...
  • 基本分段存储管理 ...分段系统的逻辑地址由段号和段内地址(段内偏移量)组成 段号位数决定了每个进程最多可以分多少个段,段内地址位数决定了每个段最大长度是多少 段表:记录各个逻辑段在内存中存放
  • **逻辑地址:**页号(20,页面编号) + 页内地址(也叫页内偏移,12位) 页表:记录了逻辑空间某页面对应在物理地址空间上是哪一页 页表项:页表每一行称为页表项,记录逻辑页号物理页号对应关系
  • 首先简要介绍MBR和主引导扇区的关系。 主引导扇区是硬盘0号柱面,0号磁头的第一个扇区,大小为512字节。(注:硬盘可以用柱面、磁头扇区定位) MBR,占用主引导扇区的前446字节,紧随其后的64字节是分区表DPT...
  • 根据程序自己逻辑关系来划分逻辑地址空间;比如C语言中函数,每一个主函数每一个函数都是一个 每个地址空间连续,间可以不连续 逻辑结构(段号 , 内地址) 表 每个进程对应一张表 与分页...
  • 存储管理-式管理

    2019-11-24 12:23:00
    分区式管理页式管理进程地址空间结构是线性,不同作业或进程之间共享公用子程序数据变得非常困难 页式管理时,一个页面中可能装有两个不同子程序段的指令代码,因此,通过页面共享来达到共享一个逻辑上完整...
  • 逻辑上相邻节点在内存中并不一定相邻,逻辑相邻关系·通过地址部分引用变量来实现 使用链表优缺点 优点:结点之间不要求连续存放,因此在保存大量数据时,不需要分配一块连续存储空间。 用户可以用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 494
精华内容 197
关键字:

逻辑地址和段地址的关系