精华内容
下载资源
问答
  • 地址映射

    千次阅读 2017-08-28 13:30:02
    1. 相关概念 2. 地址映射图解

    1.     相关概念

            a.    地址映射:为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址的过程。

            b.    总线:总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为

            数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

                           

            c.     cpu位数:cpu算数逻辑单元ALU一次处理数据的宽度。

            d.     8086 与 80386 的寄存器种类汇总表 

                 

           30386寄存器详解 https://linux.cn/thread/9685/1/1/

    2.     地址映射图解

    3.     相关问题

             a.   虚拟内存是什么?80386引入虚拟内存有什么好处?虚拟地址空间构成图

                   虚拟内存是计算机系统内存管理的一种技术。

                   好处:(1)   提升读写安全性  (2)  是的每个进程都有自己的独立地址空间  (3)   解决因地址不连续带来的不便。 (4)   更大程度的利用内存,增强CPU利用率。

                   虚拟地址空间结构图:

         

             b.   缺页异常的原因是什么

                  (1)   访问的线性地址不在虚拟空间中,

                  (2)   访问的线性地址在虚拟空间,但没有访问权限,

                  (3)   有访问权限,但没有建立映射关系

                  (4)   有映射关系,但页面不在内存中,

                  (5)   页面在内存中,却没有访问权限,

                  (6)   异常发生在“内核动态映射空间”,即进程在进入内核后,访问一个通过vmalloc()获得的线性地址而发生的异常。需要将内核页目录表、页表中对应的映射关系

                  拷贝到进程的页目录表和页表中,来解决。

             c.   交换分区,页置换算法

                  交换分区:在物理内存使用完之后,将磁盘空间(SWAP分区)虚拟成内存来使用。它是一段连续的磁盘空间,并且对用户不可见。

                     详述http://blog.csdn.net/wangsifu2009/article/details/6757352

                        http://www.cnblogs.com/kkkkkk/p/5524208.html

              

    
    
    展开全文
  • Linux地址映射

    千次阅读 2019-09-04 17:10:46
    一、地址映射 .class文件→ jvm → linux ...在程序还没有运行之前,实际上程序的指令和数据的地址都已经分配好了,但是这个指令或者数据的地址是实际的物理地址吗? 答: 不是! 程序的指令和数据所...

    一、地址映射

    .class文件→ jvm → linux

    用【javap -c 字节码名】 可以打印出jvm的指令,最终转成linux系统平台的汇编指令来执行

    c/c++,java,python,php,go语言都是指令(text)和数据(data)

    • 在程序还没有运行之前,实际上程序的指令和数据的地址都已经分配好了,但是这个指令或者数据的地址是实际的物理地址吗?
      答: 不是! 程序的指令和数据所分配的地址不会是物理地址,他们都是虚拟地址(IBM)
      程序指令和数据分配的地址 = 虚拟地址 = 虚拟地址空间上的地址
      在这里插入图片描述

    二、映射过程

    • 代码运行前,编译生成的指令和数据,地址已经分配好了,(编译的时候,函数和数据的地址是一定要分配的,否则汇编指令没法生成无法形成函数的调用关系和数据的运算关系),但是在程序没运行之前又不知道将来会在哪一块物理内存上运行,所以此时给指令或者数据分配的地址都是虚拟地址——(虚拟地址空间上的地址,linux系统会给每一个进程都分配一个虚拟地址空间,各个进程所能使用的虚拟地址范围都是一样的)

    • 当执行当前进程的时候,CPU开始执行当前进程的指令,或者做全局数据的初始化,或者在执行指令过程中,要访问数据都得去内存上取指令或者数据!!!那么不可能直接从发指令和数据的虚拟地址来定位他们在物理内存上的位置,此时要用虚拟地址——物理地址的地址映射

    • 由MMU和Linux系统共同完成地址映射,Linux系统负责提供该进程映射所需要的页目录和页表内容,MMU负责具体的映射计算过程,MMU会先把虚拟地址分成10位(pdindex),10位(ptindex),12位(offset)三份。第一个10位表示页目录的下标,第二个10位表示页表的下标,第三个12位表示在物理页面上的偏移量。

    • PD(pdindex) → PT的地址
      PT(ptindex) →一个物理页面的起始地址
      一个物理页面的起始地址+offset = 指令或者数据最终所在的物理内存的位置。
      页目录里存放的是2^ 10 个页表的下标,页表里存放的是2^10 个物理页面的下标,通过发来的指令或者数据一一映射到对应的物理页面,再加上低12位的偏移量表示最终所在的物理内存的位置。

      linux32位操作系统:2^10 * 2^10 * 2^12 = 1024 1024 4096 = 4G

    • 程序启动,任何的物理内存都没有分配,进程只有一个页目录,开始进行地址映射的时候,会不断产生缺页异常,转入缺页异常处理程序,发现导致地址映射失败的原因(是页目录项中没有分配页表,还是页表项中没有分配物理页面…) 然后进行相应的资源分配,重启地址映射过程,最终映射成功。

    展开全文
  • Cache地址映射

    万次阅读 多人点赞 2018-09-01 15:17:35
    理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMUCPU中结构如图1所示,图1展现的是Cortex A9 Processor内部...

      理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部结构,采用的指令和数据总线分开的哈佛结构。CPU访问内部存储和外部存储,以及各种外设空间在硬件层面上看都是物理地址(硬件总线),然后为了满足多进程脆弱的软件系统提出了虚拟地址,虚拟地址是针对应用程序所提出的概念,MMU负责虚拟地址到物理地址的映射工作,从虚拟地址到物理地址的转换过程可知:页表存储在内存中,使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读/写数据;使用两级页表时,每次读/写数据需要访问三次内存,访问两次页表(一级页表和二级页表)获得物理地址,第三次才是真正的读/写数据,由于这种机制速率很慢,才提出TLB Cache用于存储近期用到的页表条目(段/大页/小页/极小页描述符。TLB Cache是一个内存管理单元用于改进虚拟地址到物理地址转换速度的高速缓存,位于MMU中,本文章不深入分析MMU和TLB。Cache映射是硬件层面物理块与物理块之间建立的联系。

                                                                                                                         图 1

    Cache的容量一般都很小,即使是最大的三级CacheL3)也只有20MB30MB。而当今内存的容量都是以GB作为单位CPU对存储器的访问,通常是一次读写一个字单元。当CPU访Cache不命中时,需将存储在主存中的字单元连同其后若干个字一同调入Cache中,之所以这样做write-back策略才会有这种机制),是为了使其后的访存能在Cache中命中。因此,主存和Cache之间一次交换的数据单位应该是一个数据块(以前文章中提到的cache line,一般大小为64 Byte)。数据块的大小是固定的,由若干个字组成,且主存和Cache的数据块大小是相同的。

    从Cache-主存模型来看,一方面既要使CPU的访存速度接近于访Cache的速度,另一方面为用户程序提供的运行空间应保持为主存容量大小的存储空间。在采Cache-主存层次的系统中,Cache对用户程序而言是透明的,也就是说,用户程序可以不需要知道Cache的存在。因此,CPU每次访存时,依然和未使用Cache的情况一样,给出的是一个主存地址。但在Cache-主存层次中,CPU首先访问的是Cache,并不是主存。为此,需要一种机制将CPU的访主存地址转换成访Cache地址。而主存地址与Cache地址之间的转换是与主存块与Cache块之间的映射关系紧密联系的如何把内存中的内容存放到Cache中去这就需要一个映射算法和一个分块机制。

    分块机制就是说,Cache和内存以块为单位进行数据交换,块的大小通常以在内存的一个存储周期中能够访问到的数据长度为限。当今主流块的大小都是64字节,因此一个Cache line就是指 64 个字节大小的数据块。Cache容量模型如图 2所示,图中展现了data cache: 32-KB, 8-way set associative(每个组里有8行),64-byte line size的cache容量模型。

                                                                                                                                图 2

    映射算法是指把内存地址空间映射到Cache地址空间具体来说,就是把存放在内存中的内容按照某种规则装入到 Cache 中,并建立内存地址与 Cache 地址之间的对应关系。当处理器需要访问这个数据块内容时,则需要把内存地址转换成 Cache 地址,从而在Cache 中找到该数据块,最终返回给处理器。Cache 和内存之间的映射关系可以分为三类:全关联型Cachefull associative cache),直接关联型 Cachedirect mapped cache),组关联型 CacheN-ways associative cache)。

    全相联映射是指主存中任一块都可以映射到Cache中任一块的方式,也就是说,当主存中的一块需调入Cache时,可根据当时Cache的块占用或分配情况,选择一个块给主存块存储,所选的Cache块可以是Cache中的任意一块。例如,设Cache共有m块,主存共有n块,当主存的某一块j需调进Cache中时,它可以存入Cache的块0、块1、…、块i、… 或块m的任意一块上,如图3所示,区别在于cache和主存块的对应关系不一样。

                                                                                                               图3

     

    Cache中,需要建立一个目录表,目录表的每个表项都有三部分组成:内存地址、Cache块号和一个有效位。当处理器需要访问某个内存地址时,首先通过该目录表查询是否该内容缓存在Cache,具体过程如图4所示。当一个主存块调入Cache中时,会同时在一个存储主存块号和Cache块号映射表的相联存储器中进行登记。CPU访存时,主存的块地址A在Cache的相联存储器目录表中进行查询,如果找到等值的内存块地址,检查有效位是否有效,只有有效的情况下,才能通过Cache块号在Cache中找到缓存的内存,并且加上块内地址 B,找到相应数据,这时则称为Cache命中,处理器拿到数据返回;否则称为不命中,处理器则需要在内存中读取相应的数据。使用全关联型 Cache,块的冲突最小,Cache的利用率也高,但是需要一个访问速度很快的相联存储器。随着Cache容量的增加,其电路设计变得十分复杂,因此只有容量很小的Cache才会设计成全关联型

                                                                                                                                图 4

    直接关联型Cache是指主存中的一块内存只能映射到Cache的一个特定的块中Cache的目录表只有两部分组成:区号和有效位。其查找过程如图5所示。首先,内存地址被分成三部分:区号A、块号B和块内地址C,在这里区号A和区号B其实是全关联型中主存地址A。根据区号A在目录表中找到完全相等的区号,并且在有效位有效的情况下,说明该数据在Cache中,然后通过内存地址的块号B获得在Cache中的块地址,加上块内地址C,最终找到数据。如果在目录表中找不到相等的区号,或者有效位无效的情况下,则说明该内容不在Cache中,需要到内存中读取。直接相联映射方式的优点 是比较电路最简单,但缺点是Cache块冲突率较高,从而降低了Cache的利用率。

                                                                                                                          图 5

    以上两种方式各有优缺点,而且非常有趣的是,它们的优缺点正好相反,所以组关联型映射就出现了,组关联型映射是目前用的最多的映射方式。组关联型Cache内存被分为很多组,一个组的大小为多个Cache line的大小,一个组映射到对应的多个连续的Cache line,也就是一个Cache组,并且该组内的任意一块可以映射到对应Cache组的任意一个。可以看出,在组外,其采用直接关联型 Cache 的映射方式,而在组内,则采用全关联型Cache 的映射方式

    假设有一个4路组关联型Cache,其大小为1M,一个Cache line的大小为64B,那么总共有16KCache line,但是在4路组关联的情况下,我们并不是简简单单拥有16KCache line,而是拥有了4K 个组,每个组有4Cache line。一个内存单元可以缓存到它所对应的组中的任意一个Cache line中去。图 64路组关联型 Cache 为例介绍其在Cache中的查找过程。目录表由三部分组成,分别是“区号+块号”、Cache块号和有效位。当收到一个内存地址时,该地址被分成四部分:区号A、组号B、块号C和块内地址D。首先,根据组号 B 按地址查找到一组目录表项,在4 路组关联中,则有四个表项,每个表项都有可能存放该内存块;然后,根据区号A和块号C在该组表项中进行关联查找(即并行查找,为了提高效率),如果匹配且有效位有效,则表明该数据块缓存在 Cache 中,得到Cache块号,加上块内地址D,可以得到该内存地址在Cache中映射的地址,得到数据;如果没有找到匹配项或者有效位无效,则表示该内存块不在Cache中,需要处理器到内存中读取。

                                                                                                                                图 6

     

                                                                       本文出自Herok,欢迎关注公众号:herok,定期推送技术干货!!

    展开全文
  • Cache 地址映射

    千次阅读 2014-03-24 19:56:05
    信息按这种映射关系装入Cache后,CPU执行程序时,会将程序中的主存地址变换成Cache地址,这个变换过程叫做地址变换。 Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容

    Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在信息按这种映射关系装入Cache后,CPU执行程序时,会将程序中的主存地址变换成Cache地址,这个变换过程叫做地址变换。

    Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容量为l MB,被分为2048块,每块512B;Cache容量为8KB,被分为16块,每块也是512B。下面以此为例介绍三种基本的地址映射方法。

    1. 直接映射

    直接映射的Cache组织如图3-14所示。主存中的一个块只能映射到Cache的某一特定块中去。例如,主存的第0块、第16块、……、第2032块,只能映射到Cache的第0块;而主存的第1块、第17块、……、第2033块,只能映射到Cache的第1块……。

    327.gif

    直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。但是这种方式不够灵活,Cache的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使Cache效率下降,因此只适合大容量Cache采用。例如,如果一个程序需要重复引用主存中第0块与第16块,最好将主存第0块与第16块同时复制到Cache中,但由于它们都只能复制到Cache的第0块中去,即使Cache中别的存储空间空着也不能占用,因此这两个块会不断地交替装入Cache中,导致命中率降低。

    2. 全相联映射

    图3-15 是全相联映射的Cache组织,主存中任何一块都可以映射到Cache中的任何一块位置上。

    328.gif

    全相联映射方式比较灵活,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。但是,由于Cache比较电路的设计和实现比较困难,这种方式只适合于小容量Cache采用。

    3. 组相联映射

    组相联映射实际上是直接映射和全相联映射的折中方案,其组织结构如图3-16所示。主存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同,组间采用直接映射,组内采用全相联映射。也就是说,将Cache分成u组,每组v块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。例如,主存分为256组,每组8块,Cache分为8组,每组2块。

    329.gif

    主存中的各块与Cache的组号之间有固定的映射关系,但可自由映射到对应Cache组中的任何一块。例如,主存中的第0块、第8块……均映射于Cache的第0组,但可映射到Cache第0组中的第0块或第1块;主存的第1块、第9块……均映射于Cache的第1组,但可映射到Cache第1组中的第2块或第3块。

    常采用的组相联结构Cache,每组内有2、4、8、16块,称为2路、4路、8路、16路组相联Cache。组相联结构Cache是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用。

    展开全文
  • 1.x86体系32位linux内核/操作系统下:每一个进程运行的时候,系统会为其分配一个以上构造的4G的虚拟地址空间:3G为用户空间(私有)1G为内核空间(共享)代码段:存放程序的执行代码,大小运行前已经确定,也...
  • 404.17 - 动态内容通过通配符 MIME 映射映射到静态文件处理程序 微软的提示,是做三项更改,但是我改了之后都没有用。最后下面找了一个解决方案:http://www.myexception.cn/asp-dotnet/296145.html ...
  • linux内核地址映射

    千次阅读 2017-04-03 16:47:59
    Linux 操作系统和驱动程序运行内核空间,应用程序运行用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不...
  • 8086 系统地址映射

    千次阅读 2020-07-02 13:36:21
    8086 系统地址映射 8086 有 20 根地址线,支持 1 MB 的存储区域 低 640 KB 供 DOS 及应用程序使用,高 64 KB 供 BIOS 使用,其余保留 中断向量表(0000H~03FFH) 每个中断向量 4 个字节,一共 256 个,共占 1 KB ...
  • 程序里的映射是什么意思?

    万次阅读 多人点赞 2016-10-08 16:27:54
    映射就是给一个对象(可以是变量、物体、等等)起一个唯一的别名。 例如java中的Map就是一个表达映射的类。...这个例子就是把编号9527映射到唐伯虎上,只需要告诉程序你要找编号9527,程序就能找到唐伯虎。这就是映射
  • 将内网地址映射为外网地址
  • 主存到Cache直接映射、全相联映射和组相联映射

    万次阅读 多人点赞 2016-11-29 14:30:46
    ---- Cache的容量很小,它保存的内容只是主存内容...---- 信息按这种映射关系装入Cache后,CPU执行程序时,会将程序中的主存地址变换成Cache地址,这个变换过程叫做地址变换。Cache的地址映射方式有直接映射、全相...
  • cache与主存的地址映射

    千次阅读 多人点赞 2016-05-04 08:59:39
     首先,地址映像是把主存的地址空间用某种方法映像到cache,即就是把主存的程序按照一定的方法装进cache中,并且会建立主存与cache的地址对应关系。  通常有5种方法来映射,包括全相联映射,直接映射,组相联映射...
  • Cache与主存的地址映射

    千次阅读 2019-03-05 21:07:07
    在程序的执行过程中,Cache与主存的地址映射是由硬件自动完成的。
  • elasticsearch的字符串动态映射

    千次阅读 2019-04-07 00:09:13
    使用elasticsearch的动态映射能力时,字符串内容映射有些要注意的地方
  • Servlet映射地址配置

    千次阅读 2014-03-15 12:58:33
    Servlet映射地址不是随便 怎么写都可以,必须要遵从一定的规则,这个规则Servlet的规范中有详细的说明。按照Servlet规范的要求,Servlet映射地址形式只能有 四种,即:   第一种、以“/”开头,以“/*”结束...
  • 计算机技术源于西方,而西方乃至当今世界最通用的语言是英语,所以很多专业名词也都是英语词汇,而中国人想要跟上时代学习...被翻译成存储器映射、内存映射地址映射等等),造成大家看这些资料、教材的时候不知
  • STM32核心Cortex的地址映射说明

    千次阅读 2018-06-09 11:36:34
    来源:意法半导体STM32/STM8技术社区 (http://www.stmcu.org)一、Cortex-M3支持最大4GB的存储空间,其地址映射关系如下图二、存储器映射实例:256KB Flash 48KB SRAMIROM1为片上程序存储器,即片上集成的Flash存储器...
  • 地址映射原理和实现

    千次阅读 2011-11-29 00:10:05
    简介 为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射 地址映射原理及实现 1、 地址映射结构  Tornado\target\h\vmLib.h...
  • ARM芯片主要使用了Linux的两种地址映射方式,I/O静态映射(通过iotable_init函数)和ioremap动态映射。实际上这两种方式都是把寄存器的物理地址映射到内核的高端地址空间。我的GT2440开发板启动后内核的地址空间如下...
  • 虚拟地址到物理地址映射

    千次阅读 2018-03-07 19:17:54
    CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit, 内存管理单元),或者有MMU但没有启用,CPU核取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址...
  • Cache – 主存的地址映射及相关计算问题

    万次阅读 多人点赞 2016-12-29 11:12:30
    对于Cache,即高速缓存,是用来解决主存与CPU速度不匹配问 题,Cache的出现使得CPU可以不直接访问主存而直接与...由于程序访问的局部性原理可以很容易设想只要将 CPU近期要用到的程序和数据提前从主存送到Cache,那么就
  • Linux动态链接(3)so文件映射地址

    千次阅读 2016-08-03 21:22:13
    so文件一般在程序刚启动的时候由动态连接器映射入可执行程序地址空间,也可以通过dl库中的dlopen来映射入可执行程序地址空间中,它的底层实现都是通过mmap来实现,这个没有什么好说的。通常来说,我们自己使用的...
  • 主存cache的地址映射

    千次阅读 热门讨论 2015-10-18 21:23:26
    Cache不命中时,需将存储主存中的字单元连同其后若干个字一同调入Cache中,之所以这样做,是为了使其后的访存能Cache中命中。因此,主存和Cache之间一次交换的数据单位应该是一个数据块。数据块的大小是固定的...
  • 浅析逻辑地址与物理地址映射关系

    千次阅读 2018-01-23 17:06:03
    逻辑地址具有地址变换功能的计算机中,访问指令给出的操作数。 物理地址:用于内存芯片级单元寻址,与CPU连接的地址总线相对应。 线性地址:逻辑地址和物理地址转换的中间层,即硬件平台页式转换前的地址。 ...
  • HPS_FPGA之间的地址映射学习

    千次阅读 2018-05-03 17:45:13
    software:映射外设物理地址到到应用程序可以操作的虚拟地址,应用程序通过得到的虚拟地址入口控制外设。 为什么要进行地址映射? 内存映射就是讲内核空间的一部分区域映射到用户空间,用户对这段内存空间的修改...
  • linux物理地址的静态映射

    千次阅读 2014-07-09 16:40:44
    早先看linux驱动相关书籍的时候,隐约记得物理地址动态映射和静态映射,当时写驱动都是想着自己动手写,所以一上手看着动态映射好用,就自己的驱动上使用动态映射,将寄存器地址映射到内存上,即调用ioremap函数...
  • 动态PDO数据映射解析

    千次阅读 2019-11-17 19:40:00
    动态PDO数据映射解析 CoE应用层是基于CANOpen的EtherCAT总线通信模式,而 CAN open通讯协议中 , 设备之间的通讯是通过交换通讯对象即 COB 来实现的 ,同时通讯子协议DS301中定义了四类通讯对象: PDO (Process ...
  • 64位Linux下的地址映射

    千次阅读 2018-06-02 17:57:54
    IA32-e模式下地址映射之前写过,32位Linux虚拟地址映射,讨论了CPU 80386下的虚拟地址映射。看过博主的《Linux内核x86_64 CPU中地址映射》,对32位和64位下地址映射的区别做了一些总结。-----------------------...
  • 虚拟地址空间映射到物理地址空间

    千次阅读 2018-09-07 09:06:45
    虚拟地址空间映射到物理地址空间参考如下  当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势:  程序可以使用一系列...
  • 端口映射动态域名服务

    千次阅读 2015-08-31 11:46:14
    端口映射是NAT的一种,将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。 2.动态端口映射分类 动态端口映射:内网...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 923,416
精华内容 369,366
关键字:

动态地址映射是在程序