精华内容
下载资源
问答
  • 2021-07-25 01:52:33

    所谓的内存地址,指的就是在计算机系统中或移动智能设备如智能手机中运行内存的位置,在计算机界,我们通常以十六进制的方式表示这个特殊的内存地址,并称之为内存地址编号。在汇编语言中,内存地址编号经常会被使用。学习啦小编就在这里给大家详细介绍内存地址。

    内存地址的作用

    既然内存被赋予了内存地址的概念,并使用编号对其进行表示,那么内存地址的作用必然是非常大的。计算机科学中,我们将在8086模式下对某一个寄存器进行向左移动大约4位的操作,内容被送到内存总线的位置,而地址与ADDR相加同时得到相关的引导,我们就能够一个关于内存单元的物理地址,程序中的这个地址也被称为逻辑地址。相反,若计算机设备处在80386的保护模式下,相关的内存内容则不会被送至内存的总线位置,而是被送到了内存管理单元,英文简称为MMU,它能够完成内存工作的地址转换,配合计算机完成内存应当完成的操作和工作。

    652-151103111Z93O.png

    三种不同的地址区分

    说到内存的地址管理知识,我们就不得不提一提关于内存地址的三种不同形式,它们分别是逻辑地址、线性地址和物理地址,当然这是在80386的模式下。

    物理地址:顾名思义,物理地址就是实际中内存的地址和位置,它是最直观的表示方式,物理地址也是一个32位的无符号整数。物理地址和逻辑地址是计算机科学中最重要的地址表示方式,也是汇编语言中经常涉及到的概念。

    逻辑地址:最底层最原始的机器语言会经常使用逻辑地址完成工作。它独特的寻址方式在目前主流的各个处理器中表现的非常详细具体,Windows程序员能够使用这种寻址方式将程序进行拆分。而逻辑地址的组成元素则是段和偏移量。

    线性地址:线性地址比较特殊,它不同于其他内存地址,而是使用无符号的整数构成的,位数为32位。线性地址最多能够表达容量达到4GB的内存空间。当然,为了减少表示的难度和字符长度,在进行对线性地址的表示的时候,我们也一般采用的是十六进制表示方式。

    内存地址的相关概念现在都已经说得差不多了,熟悉计算机编程语言的人应该都知道,汇编语言的表示方式和书写格式就是根据寄存器偏移和内存地址的表示进行书写进而实现对计算机的命令和控制的,汇编语言非常直观的体现了计算机内存地址的重要作用。

    更多相关内容
  • 2 3 高速缓冲存储器(Cache) 内存地址格式 全相联 直接相联 组相连

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    2.3 高速缓冲存储器(Cache)

      2.3.1 高速缓冲存储器的功能、结构与工作原理

      高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换; 二是按一定原则对Cache的内容进行替换。
      Cache的结构和工作原理如图2.3.1所示。

      主要由三大部分组成:
      Cache存储体:存放由主存调入的指令与数据块。
      地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
      替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。

      2.3.2 地址映象与转换

      地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。下面介绍三种地址映象的方式。

      1.全相联方式

      地址映象规则:主存的任意一块可以映象到Cache中的任意一块
      (1) 主存与缓存分成相同大小的数据块。
      (2) 主存的某一数据块可以装入缓存的任意一块空间中。
      全相联方式的对应关系如图2.3.2所示。如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。

      图2.3.3示出了目录表的格式及地址变换规则。 目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位)。由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。

      举例:某机主存容量为1M,Cache的容量为32KB, 每块的大小为16个字(或字节)。 划出主、缓存的地址格式、 目录表格式及其容量。
      
      容量:与缓冲块数量相同即211=2048(或32K/16=2048)。  优点:命中率比较高,Cache存储空间利用率高。
      缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。

      2.直接相联方式

      地址映象规则: 主存储器中一块只能映象到Cache的一个特定的块中。
      (1) 主存与缓存分成相同大小的数据块。
      (2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。
      (3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。
      图2.3.4示出了直接相联映象规则。 可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。

      图2.3.5示出了主、 缓冲地址格式、目录表的格式及地址变换规则。主、缓存块号及块内地址两个字段完全相同。目录表存放在高速小容量存储器中,其中包括二部分:数据块在主存的区号和有效位。目录表的容量与缓存的块数相同。

      地址变换过程:用主存地址中的块号B去访问目录存储器, 把读出来的区号与主存地址中的区号E进行比较, 比较结果相等,有效位为1,则Cache命中,可以直接用块号及块内地址组成的缓冲地址到缓存中取数;比较结果不相等,有效位为1, 可以进行替换,如果有效位为0,可以直接调入所需块。
      优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
      缺点:替换操作频繁,命中率比较低。
      举例:上例中,主存容量为1M, Cache的容量为32KB,每块的大小为16个字(或字节)。划出主、缓存的地址格式、目录表格式及其容量。
      
      容量:与缓冲块数量相同即211=2048(或32K/16=2048)。

      3.组相联映象方式

      组相联的映象规则:
      (1) 主存和Cache按同样大小划分成块。
      (2) 主存和Cache按同样大小划分成组。
      (3) 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。
      (4) 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。
      图2.3.6示出了组相联的映象关系, 图中缓存共分Cg个组,每组包含有Gb块; 主存是缓存的Me倍,所以共分有Me个区, 每个区有Cg组,每组有Gb块。那么, 主存地址格式中应包含4个字段:区号、区内组号、组内块号和块内地址。 而缓存中包含3个字段:组号、组内块号、块内地址。主存地址与缓存地址的转换有两部分,组地址是按直接映象方式,按地址进行访问,而块地址是采用全相联方式,按内容访问。组相联的地址转换部件也是采用相关存储器实现,见图2.3.7。
      相关存储器中每个单元包含有: 主存地址中的区号E与组内块号B,两者结合在一起,其对应的字段是缓存块地址b。相关存储器的容量,应与缓存的块数相同。当进行数据访问时,先根据组号,在目录表中找到该组所包含的各块的目录,然后将被访数据的主存区号与组内块号,与本组内各块的目录同时进行比较。如果比较相等,而且有效位为“1”则命中。

       可将其对应的缓存块地址b送到缓存地址寄存器的块地址字段,与组号及块内地址组装即形成缓存地址。如果比较不相等,说明没命中,所访问的数据块尚没有进入缓存,则进行组内替换;如果有效位为0,则说明缓存的该块尚未利用, 或是原来数据作废,可重新调入新块。
      优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。
      缺点:实现难度和造价要比直接映象方式高。

      2.3.3 替换策略

      根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。

      1.随机法(RAND法)

      随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。

      2.先进先出法(FIFO法)

      先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,例如Solar-16/65机Cache采用组相联方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其它各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。

      3.最近最少使用法(LRU法)

      LRU法是依据各块使用的情况, 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。
      实现LRU策略的方法有多种。 下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。
      计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是:
      (1) 被调入或者被替换的块, 其计数器清“0”,而其它的计数器则加“1”。
      (2) 当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值, 则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为0。
      (3) 需要替换时,则选择计数值最大的块被替换。
      例如IBM 370/65机的Cache用组相联方式,每组4块,每一块设置一个2位的计数器,其工作状态如表2.3.1。

    表2.3.1 计数器法实现LRU策略

    主存块地址
    块4
    块2
    块3
    块5
     
    块号
    计数器
    块号
    计数器
    块号
    计数器
    块号
    计数器
    Cache块0
    1
    10
    1
    11
    1
    11
    5
    00
    Cache块1
    3
    01
    3
    10
    3
    00
    3
    01
    Cache块2
    4
    00
    4
    01
    4
    10
    4
    11
    Cache块3
    XX
    2
    00
    2
    01
    2
    10
    操作
    起始状态
    调入
    命中
    替换

      寄存器栈法:设置一个寄存器栈, 其容量为Cache中替换时参与选择的块数。如在组相联方式中,则是同组内的块数。堆栈由栈顶到栈底依次记录主存数据存入缓存的块号, 现以一组内4块为例说明其工作情况,如表2.3.2所示,表中1~4为缓存中的一组的4个块号。

    表2.3.2 寄存器栈法实现

    缓存操作
    初始状态
    调入2
    命中块4
    替换块1
    寄存器0
    3
    2
    4
    1
    寄存器1
    4
    3
    2
    4
    寄存器2
    1
    4
    3
    2
    寄存器3
    1
    1
    3

      (1) 当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈,位于栈顶。其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。
      (2) 当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。
      比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。
      假设Cache的每组中有4块, 替换时,是比较4块中那一块是最久没使用的,4块之间两两相比可以有6种比较关系。如果每两块之间的对比关系用一个RS触发器,则需要6个触发器(T12,T13,T14,T23,T24,T34), 设T12=0表示块1比块2最久没使用,T12=1表示块2比块1最久没有被使用。 在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。 按此原理,由6个触发器组成的一组编码状态可以指出应被替换的块。例如,块1被替换的条件是:T12=0,T13=0,T14=0;块2被替换的条件是:T12=1,T23=0,T24=0等等。

      2.3.4 Cache的一致性问题

      Cache的内容是主存内容的一部分, 是主存的副本,内容应该与主存一致。由于:
      (1) CPU写Cache,没有立即写主存;
      (2) I/O处理机或I/O设备写主存。
      从而造成Cache与主存内容的不一致,如图2.3.8所示。

      对Cache进行写操作时引起的不一致的解决方法:

      1.全写法亦称写直达法(WT法-Write through)

      方法:在对Cache进行写操作的同时,也对主存该内容进行写入。
      优点:可靠性较高,操作过程比较简单。
      缺点:写操作速度得不到改善,与写主存的速度相同。

      2.写回法(WB法-Write back)

      方法:在CPU执行写操作时,只写入Cache,不写入主存。
      优点:速度较高。
      缺点:可靠性较差,控制操作比较复杂。

      2.3.5 Cache性能分析

      1.Cache系统的加速比

      存储系统采用Cache技术的主要目的是提高存储器的访问速度,加速比是其重要的性能参数。Cache存储系统的加速比SP(Speedup)为:

      其中:Tm为主存储器的访问周期,Tc为Cache的访问周期,T则为Cache存储系统的等效访问周期,H为命中率。
      可以看出,加速比的大小与两个因素有关:命中率H及Cache与主存访问周期的比值Tc/Tm,命中率越高加速比越大。图2.3.9示出了加速比与命中率的关系。

      2.Cache的命中率

      影响Cache命中率的因素很多,如Cache的容量,块的大小,映象方式,替换策略以及程序执行中地址流的分布情况等等。一般地说,Cache容量越大则命中率越高, 当容量达到一定程度后,容量的增加命中率的改善并不大;Cache块容量加大, 命中率也明显增加,但增加到一定值之后反而出现命中率下降的现象;直接映象法命中率比较低,全相联方式命中率比较高,在组相联方式中,组数分得越多,则命中率下降。

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block var foo = 'bar'; 

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    gantt
            dateFormat  YYYY-MM-DD
            title Adding GANTT diagram functionality to mermaid
            section 现有任务
            已完成               :done,    des1, 2014-01-06,2014-01-08
            进行中               :active,  des2, 2014-01-09, 3d
            计划一               :         des3, after des2, 5d
            计划二               :         des4, after des3, 5d
    
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 2.3 高速缓冲存储器(Cache) 2.3.1 高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储...为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换; 二是按

    2.3 高速缓冲存储器(Cache)

      2.3.1 高速缓冲存储器的功能、结构与工作原理

      高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:一是主存地址与缓存地址的映象及转换; 二是按一定原则对Cache的内容进行替换。
      Cache的结构和工作原理如图2.3.1所示。

      主要由三大部分组成:
      Cache存储体:存放由主存调入的指令与数据块。
      地址转换部件:建立目录表以实现主存地址到缓存地址的转换。
      替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件。

      2.3.2 地址映象与转换

      地址映象是指某一数据在内存中的地址与在缓冲中的地址,两者之间的对应关系。下面介绍三种地址映象的方式。

      1.全相联方式

      地址映象规则:主存的任意一块可以映象到Cache中的任意一块
      (1) 主存与缓存分成相同大小的数据块。
      (2) 主存的某一数据块可以装入缓存的任意一块空间中。
      全相联方式的对应关系如图2.3.2所示。如果Cache的块数为Cb,主存的块数为Mb,则映象关系共有Cb×Mb种。

      图2.3.3示出了目录表的格式及地址变换规则。 目录表存放在相关(联)存储器中,其中包括三部分:数据块在主存的块地址、存入缓存后的块地址、及有效位(也称装入位)。由于是全相联方式,因此,目录表的容量应当与缓存的块数相同。

      举例:某机主存容量为1M,Cache的容量为32KB, 每块的大小为16个字(或字节)。 划出主、缓存的地址格式、 目录表格式及其容量。
      
      容量:与缓冲块数量相同即211=2048(或32K/16=2048)。  优点:命中率比较高,Cache存储空间利用率高。
      缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而应用少。

      2.直接相联方式

      地址映象规则: 主存储器中一块只能映象到Cache的一个特定的块中。
      (1) 主存与缓存分成相同大小的数据块。
      (2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。
      (3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。
      图2.3.4示出了直接相联映象规则。 可见,主存中各区内相同块号的数据块都可以分别调入缓存中块号相同的地址中,但同时只能有一个区的块存入缓存。由于主、缓存块号相同,因此,目录登记时,只记录调入块的区号即可。

      图2.3.5示出了主、 缓冲地址格式、目录表的格式及地址变换规则。主、缓存块号及块内地址两个字段完全相同。目录表存放在高速小容量存储器中,其中包括二部分:数据块在主存的区号和有效位。目录表的容量与缓存的块数相同。

      地址变换过程:用主存地址中的块号B去访问目录存储器, 把读出来的区号与主存地址中的区号E进行比较, 比较结果相等,有效位为1,则Cache命中,可以直接用块号及块内地址组成的缓冲地址到缓存中取数;比较结果不相等,有效位为1, 可以进行替换,如果有效位为0,可以直接调入所需块。
      优点:地址映象方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。
      缺点:替换操作频繁,命中率比较低。
      举例:上例中,主存容量为1M, Cache的容量为32KB,每块的大小为16个字(或字节)。划出主、缓存的地址格式、目录表格式及其容量。
      
      容量:与缓冲块数量相同即211=2048(或32K/16=2048)。

      3.组相联映象方式

      组相联的映象规则:
      (1) 主存和Cache按同样大小划分成块。
      (2) 主存和Cache按同样大小划分成组。
      (3) 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。
      (4) 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。
      图2.3.6示出了组相联的映象关系, 图中缓存共分Cg个组,每组包含有Gb块; 主存是缓存的Me倍,所以共分有Me个区, 每个区有Cg组,每组有Gb块。那么, 主存地址格式中应包含4个字段:区号、区内组号、组内块号和块内地址。 而缓存中包含3个字段:组号、组内块号、块内地址。主存地址与缓存地址的转换有两部分,组地址是按直接映象方式,按地址进行访问,而块地址是采用全相联方式,按内容访问。组相联的地址转换部件也是采用相关存储器实现,见图2.3.7。
      相关存储器中每个单元包含有: 主存地址中的区号E与组内块号B,两者结合在一起,其对应的字段是缓存块地址b。相关存储器的容量,应与缓存的块数相同。当进行数据访问时,先根据组号,在目录表中找到该组所包含的各块的目录,然后将被访数据的主存区号与组内块号,与本组内各块的目录同时进行比较。如果比较相等,而且有效位为“1”则命中。

       可将其对应的缓存块地址b送到缓存地址寄存器的块地址字段,与组号及块内地址组装即形成缓存地址。如果比较不相等,说明没命中,所访问的数据块尚没有进入缓存,则进行组内替换;如果有效位为0,则说明缓存的该块尚未利用, 或是原来数据作废,可重新调入新块。
      优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。
      缺点:实现难度和造价要比直接映象方式高。

      2.3.3 替换策略

      根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。

      1.随机法(RAND法)

      随机法是随机地确定替换的存储块。设置一个随机数产生器,依据所产生的随机数,确定替换块。这种方法简单、易于实现,但命中率比较低。

      2.先进先出法(FIFO法)

      先进先出法是选择那个最先调入的那个块进行替换。当最先调入并被多次命中的块,很可能被优先替换,因而不符合局部性规律。这种方法的命中率比随机法好些,但还不满足要求。先进先出方法易于实现,例如Solar-16/65机Cache采用组相联方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其它各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。

      3.最近最少使用法(LRU法)

      LRU法是依据各块使用的情况, 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。
      实现LRU策略的方法有多种。 下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。
      计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是:
      (1) 被调入或者被替换的块, 其计数器清“0”,而其它的计数器则加“1”。
      (2) 当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值, 则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清为0。
      (3) 需要替换时,则选择计数值最大的块被替换。
      例如IBM 370/65机的Cache用组相联方式,每组4块,每一块设置一个2位的计数器,其工作状态如表2.3.1。

    表2.3.1 计数器法实现LRU策略

    主存块地址
    块4
    块2
    块3
    块5
     
    块号
    计数器
    块号
    计数器
    块号
    计数器
    块号
    计数器
    Cache块0
    1
    10
    1
    11
    1
    11
    5
    00
    Cache块1
    3
    01
    3
    10
    3
    00
    3
    01
    Cache块2
    4
    00
    4
    01
    4
    10
    4
    11
    Cache块3
    XX
    2
    00
    2
    01
    2
    10
    操作
    起始状态
    调入
    命中
    替换

      寄存器栈法:设置一个寄存器栈, 其容量为Cache中替换时参与选择的块数。如在组相联方式中,则是同组内的块数。堆栈由栈顶到栈底依次记录主存数据存入缓存的块号, 现以一组内4块为例说明其工作情况,如表2.3.2所示,表中1~4为缓存中的一组的4个块号。

    表2.3.2 寄存器栈法实现

    缓存操作
    初始状态
    调入2
    命中块4
    替换块1
    寄存器0
    3
    2
    4
    1
    寄存器1
    4
    3
    2
    4
    寄存器2
    1
    4
    3
    2
    寄存器3
    1
    1
    3

      (1) 当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈,位于栈顶。其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。
      (2) 当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。
      比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。
      假设Cache的每组中有4块, 替换时,是比较4块中那一块是最久没使用的,4块之间两两相比可以有6种比较关系。如果每两块之间的对比关系用一个RS触发器,则需要6个触发器(T12,T13,T14,T23,T24,T34), 设T12=0表示块1比块2最久没使用,T12=1表示块2比块1最久没有被使用。 在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。 按此原理,由6个触发器组成的一组编码状态可以指出应被替换的块。例如,块1被替换的条件是:T12=0,T13=0,T14=0;块2被替换的条件是:T12=1,T23=0,T24=0等等。

      2.3.4 Cache的一致性问题

      Cache的内容是主存内容的一部分, 是主存的副本,内容应该与主存一致。由于:
      (1) CPU写Cache,没有立即写主存;
      (2) I/O处理机或I/O设备写主存。
      从而造成Cache与主存内容的不一致,如图2.3.8所示。

      对Cache进行写操作时引起的不一致的解决方法:

      1.全写法亦称写直达法(WT法-Write through)

      方法:在对Cache进行写操作的同时,也对主存该内容进行写入。
      优点:可靠性较高,操作过程比较简单。
      缺点:写操作速度得不到改善,与写主存的速度相同。

      2.写回法(WB法-Write back)

      方法:在CPU执行写操作时,只写入Cache,不写入主存。
      优点:速度较高。
      缺点:可靠性较差,控制操作比较复杂。

      2.3.5 Cache性能分析

      1.Cache系统的加速比

      存储系统采用Cache技术的主要目的是提高存储器的访问速度,加速比是其重要的性能参数。Cache存储系统的加速比SP(Speedup)为:

      其中:Tm为主存储器的访问周期,Tc为Cache的访问周期,T则为Cache存储系统的等效访问周期,H为命中率。
      可以看出,加速比的大小与两个因素有关:命中率H及Cache与主存访问周期的比值Tc/Tm,命中率越高加速比越大。图2.3.9示出了加速比与命中率的关系。

      2.Cache的命中率

      影响Cache命中率的因素很多,如Cache的容量,块的大小,映象方式,替换策略以及程序执行中地址流的分布情况等等。一般地说,Cache容量越大则命中率越高, 当容量达到一定程度后,容量的增加命中率的改善并不大;Cache块容量加大, 命中率也明显增加,但增加到一定值之后反而出现命中率下降的现象;直接映象法命中率比较低,全相联方式命中率比较高,在组相联方式中,组数分得越多,则命中率下降。

    展开全文
  • 内存地址的概念和理解

    万次阅读 多人点赞 2019-05-29 09:07:24
    1.内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一...

    1.内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一个又是用8位16进制表示呢?

    首先,必须要知道内存地址只是一个编号,代表一个内存空间。那么这个空间是多大呢?原来在计算机中存储器的容量是以字节为基本单位的。也就是说一个内存地址代表一个字节(8bit)的存储空间。
    例如经常说32位的操作系统最多支持4GB的内存空间,也就是说CPU只能寻址2的32次方(4GB),注意这里的4GB是以Byte为单位的,不是bit。也就是说有4G=41024M(Byte)=410241024Kb(Byte)=4102410241024Byte(8bit),即2的32次方个8bit单位。

    所以说用4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit的存储空间而已:
    在这里插入图片描述
    在这里插入图片描述
    至于说为什么会出现一种是用4位十六进制表示内存地址,另一种用8位十六进制表示内存地址,那是根据不同的硬件环境来的。个人理解:有些CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址就够用了。有些CPU只能寻址32位(32根地址线),所以用8位十六进制。

    另外记住, 210 = 1024

             1G  = 1024 M
    
             1M  =  1024 KB
    
             1KB = 1024 B(Byte)
    
             1Byte = 8 bit
    

    2.理解内存。

    程序和数据平常存储在硬盘等存储器上,不管你开机或关机了,它们都是存在的,不会丢失。硬盘可以存储的东西很多,但其传输数据的速度较慢。所以需要运行程序或打开数据时,这些数据必须从硬盘等存储器上先传到另一种容量小但速度快得多的存储器,之后才送入CPU进行执行处理。这中间的存储器就是内存。

    无论何种存储器,软盘、硬盘、光盘或者内存,都有地址。因为它们要存储数据,所以就必须按一定的单位的数据分配一个地址。有了地址,程序才能找到这些数据。这很好理解,想想你们家为什么要有门牌号即可。

    学习编程,必须对内存的地址有一个透彻的理解。我们编程中的每一行代码,代码中用到的每个数据,都需要在内存上有其映射地址。当然,我们并不需要掌握内存是如何进行编址,那是计算机系中的另外一门课:操作系统的事了。

    内存地址:
    计算机把所有的信息都给数字化了,所以它知道自已把一个数据,一条命令记到了内存中的哪个(些)位置。
    看下面的例子:
    如果让计算机在内存里记住“丁小明”这个名字,可以示意为:
    在这里插入图片描述
    在第一行中,每一格表示一段内存,而格子里的内容是这段内容记下的数据;第二行中每一格内数字就是对应的内存的地址。
    可能有人会啄磨:为什么一个“丁”字(“小”“明”两字也一样)占用两个内存地址呢?这是因为汉字在一个地址(位置)里呆不下,必须放在连续的两个地址空间内。那么,什么东西可以放在单独的一个内存地址里呢?像英文的里字母,比如’A’, 像阿拉伯数字:比如’1’,可以,而且就是放在一个内存地址里。假设有一字符串“ABC”,被记在内存里,可示意为(这次我们假设从内存地址2000H处记起):
    在这里插入图片描述
    现在我们提几个问题:

    计算机记住”丁”字的内存地址是多少? 答案是:1000H。请见上图

    我们一直在说,在计算机中,所有信息都被数字化为2进制的0、1,所以,“丁小明”这个名字被也应该是一串:0001 0010 0111 0101……,可是在中图所画出的,计算机内存里记的,仍是“丁小明”三个字啊。

    下面是解释,我们只举一个字”丁”讲解。我们假设在那一串里的 0001 0010 0111 0101 对应的是 “丁” 字,那么有:
    在这里插入图片描述
    让我们把字母’A’对应的图也画出来:
    在这里插入图片描述
    在上面的两个图中:

    第一行分别是“丁”和“A”,它是给人看的。

    第二行则是一串的的0和1,这才是计算机内存中实际存储的数据。

    第三行是内存的地址。并不是每个0和1所占的位置都被编上地址。而是每8个才拥有一个地址。

    关于第三行,你可以这样理解,门牌号是一个家庭分配一个,每家每户内还有客厅卧室,这些就没有地址了。

    可见:

    ‘丁’的确是由一串0、1组成的。更确切地,从图上可以看出‘丁’是由16位0和1组成。这16数都存放在2个内存地址里。

    ‘A’也一样,它是由8位0、1组成的。占1个内存地址。

    总结:内存地址是内存当中存储数据的一个标识,并不是数据本身,通过内存地址可以找到内存当中存储的数据。

    什么是偏移量?
    汇编语言中的定义为:

    把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量”。 亦: 存储单元的实际地址与其所在段的段地址之间的距离。本质其实就是“实际地址与其所在段的段地址之间的距离”

    更通俗一点讲,内存中存储数据的方式是:一个存储数据的“实际地址”=段首地址+偏移量,

    你也可以这样理解:就像我们现实中的“家庭地址”=“小区地址”+“门牌号”

    上面的“偏移量”就好比“门牌号”

    其实就相当于C++的指针一样啦,指出确切的地址而已……

    首先有一个地方是起点,然后距离这个起点有多远,这个距离就是偏移量。
    最小的距离是一个字节。。

    展开全文
  • Java内存机制和内存地址

    千次阅读 2021-02-12 20:49:43
    在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。 引用变量就相当于是为数组或对象起的一个...
  • 主存与cache的地址映射 地址映射方式有全相联映射方式,直接映射方式,组相联映射方式三种。 全相联映射方式: 主存块数2s块 块大小2w个字 主存地址长度 s+w 位 将主存的一个...​ CPU给定一个内存地址访问cache时,
  • 关于内存和内存地址的详解

    千次阅读 2018-10-24 22:48:46
    内存地址用4位16进制和8位16进制表示的区别。例如经常可以看到某些书籍上写的内存地址0x0001,在另外一些书籍上写的内存地址又变成了0x00000001。都是表示的编号为1的内存地址,为什么一个是4位16进制表示,另外一个...
  • Cache与主存的三种地址映射详细解读

    万次阅读 多人点赞 2021-02-02 17:36:04
    3、Cache的地址格式 在三种主存的地址格式中,其实也蕴含了 Cache 的地址格式,我们知道,Cache中一行的大小和主存中一块的大小是一样的,所以Cache和主存的字地址位数相等。 ①采用全相联映射时,Cache 也有块地址...
  • gdb 如何调试内存地址

    千次阅读 2017-07-20 09:18:40
    样例代码 int age= 20; int *p_age = &age; NSLog(@"p_age = %p", ... //输出指针变量p_age指向值20所在内存地址 NSLog(@"&p_age = %p", &p_age); //输出指针变量p_age本身的地址 2017-07-19 15:54:07.048 Test07
  • 首先必须得明白,在计算机中,任何文件、图片、视频等都是以二进制格式储存在储存介质中的一串编码,对于二进制数的每一位称作1bit(比特)。这里必须得再说一下,byte(字节)和bit(比特)不是同一个东西,1byte=...
  • 内存地址的计算方法

    千次阅读 2017-10-25 16:00:00
    内存是按字节编址的,所以单位是字节哈,1字节可是等于8位的。因为计算的范围一般比较小,所以就记住两个就够了。记住几个常用的2的10次方为1024即1KB 2的20次方=(2的10次方)的平方,即1MB就行了 如果要求更大的,...
  • Linux内存管理(二):ARMv8 地址转换

    千次阅读 2020-08-30 23:05:13
    arm64 地址转换
  • 容易理解的计算机组成原理中主存与Cache的3种映射方式(直接映射,全相联映射,组相联映射) 一....故cache可看做是一种介质,而这种介质是主存的替代品,而cpu只认主存的单元地址,所以我们需要把主
  • 相机内存格式化了怎么恢复

    千次阅读 2018-01-18 17:01:19
    相机也是我们日常生活中常用数码设备,我们经常会使用相机拍摄和保存一些重要或者有意义的照片,但是意外无处不在,如果不小心将内存格式化了怎么办?里面的照片还能恢复吗? 遇到内存卡被格式化的情况,不要慌张...
  • )中,指出了GDB中查看指定内存地址内容的指令: examine命令(简写是x)。 x命令的 语法 如下所示: x/ <n/f/u> 其中,n、f、u是可选的参数。addr表示待查看的内存地址。 n 是一个正整数...
  • IPv4协议及其地址格式

    万次阅读 2018-08-13 00:38:05
    IPv4地址 基本格式 子网掩码 地址的分类 A类IPv4地址 B类IPv4地址 C类IPv4地址 单播地址的类别特征 D类IPv4地址 永久组播地址 公用组播地址 临时组播地址 本地管理组播地址 E类IPv4地址 因特网协议(IP) IPv4...
  • 内存地址计算问题

    千次阅读 2017-06-05 11:51:19
    1.内存地址从A4000H到CBFFFH共有几个存储单元是怎么计算的?:CBFFF-A4000+1=28000(十六进制) CBFFF-A4000+1=CC000-A4000=(CC-A4)*16^3=(CC-A4)*2^12=(2*16+8)*2^12=40*2^12=160*2^10 (B)=160 (KB)2.若内存按字节...
  • 因为输出格式“%d”的原因?这是由于 printf("%d",&amp;a);输出地址为有符号的10进制,printf("%p“,&amp;a);输出地址为16进制;d代表整数格式,输出为有符号的10进制;p代表是指针格式,...
  • 整理参考资料:文档1 、 文档2 ... 可以直接把物理地址理解成插在机器上那根内存条本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后 把这个数组叫做物理地址   虚拟内存(virtual memory) ...
  • 逻辑地址、虚拟地址、物理地址以及内存管理

    万次阅读 多人点赞 2016-10-11 21:47:33
    本文涉及的硬件平台是X86,如果是其它平台,...——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的
  • 通过C程序,输出变量在内存中存储的每个字节的内容极其地址。 %p 十六进制,大写,高位零显示 %x 十六进制,小写,高位0不显示 代码 通过指针访问内存 #include<stdio.h> #include<stdlib.h> typedef ...
  • pmap命令用于显示一个或多个进程的内存状态,报告进程的地址空间和内存状态信息。 一般使用 pmap pid 一般参数选项如下 -x extended显示扩展格式 -d device显示设备格式 -q quiet不显示header/footer行 -V ...
  • Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的 我们先来看一张...
  • 物理地址和虚拟地址的区别

    千次阅读 2019-10-30 21:23:35
    (一)地址的概念 ...很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、 BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址, 这个物理地址被放到CPU...
  • java输出对象类总是为内存地址

    千次阅读 2016-05-24 10:17:06
    如下所示,输出对象类列表总是为内存地址[com.yc.entity.ServiceOrder@845b9bfd, com.yc.entity.ServiceOrder@845b9bfd]解决在对象类中添加toString()方法,可以自动生成,鼠标右键Source->Generate toString() ...
  • 指令格式之操作码地址

    万次阅读 多人点赞 2020-04-14 06:24:21
    指令格式之操作码地址码 一、指令格式 指令:操作码字段 地址码字段 指令字(简称指令):表示一条指令的机器字。 指令格式:是指令自用二进制代码表示的结构形式,由操作码字段和地址码字段组成。 操作码字段:表征...
  • 内存、寄存器、GPIO地址、存储器之间的关系1、如上图,0x0000 0000表示第一个地址字节,代码使用这个16进制时,指针会指向这个物理地址,对4字节的GPIO控制单元来说,这4个字节的物理地址就叫寄存器,当我们把IO口...
  • gdb查看内存地址和栈中的值

    万次阅读 2016-05-17 15:50:31
    gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> help x 来查看使用方式 x/ (n,f,u为可选参数)n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u...

空空如也

空空如也

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

内存地址的格式