精华内容
下载资源
问答
  • 高速缓存

    2018-04-29 15:34:20
    一、配置网络、安装高速缓存服务及配置服务1.配置网络重启网络 systemctl restart network2.服务端安装高速缓存服务 yum install bind -y 3.开启服务并设置开机自启 正常开启后会生成文件 /etc/rndc.key 4....

    一、配置网络、安装高速缓存服务及配置服务

    1.配置网络

    重启网络  systemctl  restart  network

    2.服务端安装高速缓存服务  yum install  bind  -y

     

    3.开启服务并设置开机自启

           

    正常开启后会生成文件     /etc/rndc.key

       

    4.关闭防火墙

    5.客户端修改dns配置文件      vim /etc/resolv.conf

      

    5.服务端只允许53接口回环使用(lo)时

    修改配置文件   /etc/named.conf


    客户端不能访问:


    6.当服务端53接口共享,但只允许本地用户访问时


    服务端拒绝客户端访问:


    7.当服务端53接口共享,允许所有人访问


    客户端不能解析域名


    8.配置服务器


    客户端访问,dns 服务器第一次访问时,查询时间会比较长;第二次访问时时间大大缩短,是因为服务器已经将信息缓存(高速缓存)


    二、本地正向解析

    1.修改named服务配置文件   /etc/named.conf


    2.修改配置文件   /etc/named.rfc1912.zones

     

    3.新建文件    ##在/var/named目录下

     cp   -p   named.localhost     westos.com.zone


    4.修改文件   vim   westos.com.zone


    #### 重启服务     systemctl   restart   named

    5.修改本地dns解析地址  /etc/resolv.conf


    6.本机测试:  dig  we.westos.com


    三、本地反向解析

    1.修改named服务配置文件 (同正向解析)

    2.修改配置文件   /etc/named.rfc1912.zones


    3.新建文件    ##在/var/named目录下 

      cp   -p   named.loopback    westos.com.ptr



    4.修改配置文件   vim   westos.com.ptr



    5.修改本地dns解析地址   /etc/resolv.conf (同正向解析)

    6.本地测试   dig -x 172.25.254.156


    四、平衡轮询式域名解析

    1.环境设置  

    开启高速缓存服务     关闭防火墙

    2.修改配置文件   westos.com.zone        其他配置文件不变

    地址:/var/named    


    #### 重启服务     systemctl   restart   named

    3.本地解析时,域名解析出现轮询式  dig  hello.westos.com

    首次访问:


    再次访问:


    五、辅助主机解析

    辅助主机配置

    1.辅助主机配置yum源,安装bind,打开named服务

     

    2.设置配置文件   vim /etc/named.conf


    3.设置配置文件   vim /etc/named.rfc1912.zones


    4.查看slaves 文件权限


    5.重启服务   systemctl restart named

    辅助主机重启named服务后,会同步westos.com.zone文件


    6.辅助主机修改DNS配置文件    ##指向本地


    主机配置

    1.设置配置文件  vim /etc/named.conf 

     

    2.设置配置文件   vim /etc/named.rfc1912.zones

     

            allow-transfer {172.25.254.120;};       ##允许120主机同步

            also-notify {172.25.254.120;};          ##当文件变更时,通知120主机

    3. 设置配置文件   vim westos.com.zone

     

           2018042801   ; serial        ##最后一次修改时间

                         1D      ; refresh         ##自动更新时间1d

                        1H       ; retry              ##再次刷新时间1h

                        1W       ; expire          ##到期时间

                         H )       ; minimum       ##最低限度

    4.重启服务   systemctl restart named

    测试辅助主机是否建立好:

    1.在辅助主机重启后,执行 dig  hello.westos.com


        ###和主机 dig  hello.westos.com 得到结果相同

    2.主机修改数据后,辅助主机执行 dig  hello.westos.com



    ### 以上结果说明辅助主机已搭建好

    六、双向域名解析

    1.本地主机

    (1)新建文件  ##在目录  /var/named

           cp  -p  westos.com.zone   westos.com.inter


              修改 westos.com.inter   IP地址

        

    (2)新建配置文件

         cp   -p   /etc/named.rfc1912.zones  /etc/named.rfc1912.inter


        修改/etc/named.rfc1912.inter中的zone

     

    (3)修改主配置文件   ##/etc/named.conf

     注释原来的zone


    新增本地(local)域名解析和其他主机(any)域名解析


    2.修改其他主机   dns域名解析指向  /etc/resolv.conf


    3.重启本地主机named后实验

    (1)本机实验 dig hello.westos.com


    (2)其他主机实验 dig hello.westos.com


    七、远程更新

    1.还原配置文件,更改内核防火墙设置    selinux状态不能为Enforcing

         

    去掉zone 的注释


    注释本地(local)域名解析和其他主机(any)域名解析


    2.重启服务后,在其他主机测试是否恢复

    如上图,证明已恢复

    3.更改配置文件    vim /etc/named.rfc1912.zones


    4.查看文件属性      ls -ld  /var/named/

    5.更改文件属性


    6.备份  westos.com.zone

        cp   -p   westos.com.zone   /mnt


    7.systemctl   restart   named  重启服务

    8.在指定主机上测试

    ###删除  hello.westos.com


    ###添加 hello.westos.com



    9.本地主机再次重启后会生成westos.com.zone.jnl文件:


    且westos.com.zone被改变


    八、远程加密更新

    1.还原配置文件



    2.生成加密钥匙  ##实验环境为 /mnt (dnssec-keygen --help)

       dnssec-keygen   -a   HMAC-MD5  -b  128  -n  HOST  westos

      -a  ##加密方式      -b  ##密码大小bits  -n  ##nametype,域名解析


    3.编辑密钥文件

    cp  -p   /etc/rndc.key   /etc/westos.key



    4.修改配置文件  /etc/named.rfc1912.zones


    5.修改主配置文件  /etc/named.conf

        include   "/etc/westos.key";               ##新增密钥文件


    6.把密钥文件传送给远程主机   ##实验环境为/mnt 

       scp   Kwestos.+157+02231*   root@172.25.254.208:/mnt


    7.本地主机重启后,远程主机可以更新dns


    九、动态域名解析      ### 花生壳 ###

    1.还原配置文件,本机主机(服务端)安装dhcp



    2.修改dhcp配置文件  /etc/dhcp/dhcpd.conf


    修改文件  vim   /etc/dhcp/dhcpd.conf

      ddns-update-style  interim;                 ##dns的更新工作方式

    ad-hoc  ##反向解析,但是不能删除     interim  ##正向解析       none  ##不能更新

    删除26、27行及35行之后,修改以下配置:


    key westos{

             algorithm hmac-md5;               ##key的加密方式

             secret wLb7wlj95YfZFUK8nZ1Oqw==;  ##key的密码

    zone westos.com. {

             primary 127.0.0.1;       ##主机内部回环接口

             key westos;                  ##读取的加密文件为westos

    3.重启dhcpd服务、named服务,远程主机可dig本机

    4.远程主机访问dns

    (1)修改远程主机的网络配置(dhcp),及主机名(name.westos.com)

              ###  建议:格式化虚拟机,修改主机名

         

           

    (2)dig   li.westos.com

           

    展开全文
  • 高速缓存

    2020-08-28 10:47:26
    高速缓存是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保存在RAM中,以便对那些数据的进一步访问不用再访问磁盘而能尽快的到满足。 因为对同一磁盘数据的反复访问频繁发生,所以磁盘高速缓存对系统...

    页高速缓存是一种软件机制

    页高速缓存是一种软件机制,它允许系统把通常存放在磁盘上的一些数据保存在RAM中,以便对那些数据的进一步访问不用再访问磁盘而能尽快的到满足。

    页缓存和硬件cache的原理基本相同,将容量大而低速设备中的部分数据存放到容量小而快速的设备中,这样速度快的设备将作为低速设备的缓存,当访问低速设备中的数据时,可以直接从缓存中获取数据而不需再访问低速设备,从而节省了整体的访问时间。

    页缓存以页为大小进行数据缓存,它将磁盘中最常用和最重要的数据存放到部分物理内存中,使得系统访问块设备时可以直接从主存中获取块设备数据,而不需从磁盘中获取数据。

    因为对同一磁盘数据的反复访问频繁发生,所以磁盘高速缓存对系统性能至关重要。

    页高速缓存:一种对完整的数据页进行操作的磁盘高速缓存

    页高速缓存(page cache),是linux内核所使用的主要磁盘高速缓存。在绝大多数情况下,内核在读写磁盘时都引用页高速缓存。新页被追加到页高速缓存以满足用户态进程的读请求

    如果页不在高速缓存中,新页就被追加到高速缓存中,然后用从磁盘读出的数据填充它。如果内存有足够的空闲空间,就让该页在高速缓存中长期保留,使其他进程再使用该页时不再访问磁盘

    同样在把一页数据写到块设备之前,内核首先检查对应的页是否已经在高速缓存中;不在就还是添加新项,并用要写到磁盘的数据填充该项,IO数据的传送并不是马上开始,而是要延迟几秒才对磁盘更新,从而使进程有机会对要写入的数据做进一步修改(换句话说就是内核执行延时的写操作)。

    写操作与读操作时类似,直接在页缓存中修改数据,但是页缓存中修改的数据(该页此时被称为Dirty Page)并不是马上就被写入磁盘,而是延迟几秒钟,以防止进程对该页缓存中的数据再次修改

    几乎所有的文件读和写都依赖于页高速缓存,只有在O_DIRECT标志被置位而进程打开的情况下才会出现例外;此时,IO数据的传送绕过了页高速缓存而使用了进程用户态地址空间的缓冲区(直接IO传送);少数数据库应用软件为了能采用自己的磁盘高速缓存算法而使用了O_DIRECT。

    直接IO传送:

    考虑高性能数据库服务器;他们大多实现了自己的高速缓存机制,以充分挖掘对数据库独特的查询机制。对于这些类型的程序,内核页高速缓存毫无帮助,相反由于下面原因它是有害的

    • 很多页框浪费在复制已在RAM中的磁盘数据上(在用户级磁盘高速缓存中)
    • 处理页高速缓存和预读多于指令降低了read()和write()的系统调用执行效率,也降低了与文件内存映射相关的分页操作。
    • read() write()的系统调用不是在磁盘和用户存储器之间直接传输数据。而是分两次传送:磁盘和内核缓冲区之间和内核缓冲区与用户存储器之间。

    因此必须通过中断和DMA处理快硬件设备,而且这只能在内核态完成,因此最终需要某种内核支持来实现自缓存的应用程序。

    linux提供了绕过页高速缓存的简单方法:直接IO传送,在每次直接IO传送中,内核对磁盘控制器进行编程,以便在自缓存的应用程序的用户态地址空间中的页与磁盘之间直接传输数据。(还有很多具体细节后面写)

    内核缓冲区:除了在进程中设计缓冲区,内核也有自己的缓冲区。

    当一个用户进程要从磁盘读取数据时,内核一般不直接读磁盘,而是将内核缓冲区中的数据复制到进程缓冲区中。(这里是在RAM上的东西)

    但若是内核缓冲区中没有数据,内核会把对数据块的请求,加入到请求队列,然后把进程挂起,为其它进程提供服务。

    等到数据已经读取到内核缓冲区时,把内核缓冲区中的数据读取到用户进程中,才会通知进程,当然不同的io模型,在调度和使用内核缓冲区的方式上有所不同。

    你可以认为,read是把数据从内核缓冲区复制到进程缓冲区。write是把进程缓冲区复制到内核缓冲区。

    当然,write并不一定导致内核的写动作,比如os可能会把内核缓冲区的数据积累到一定量后,再一次写入。这也就是为什么断电有时会导致数据丢失。

    所以说内核缓冲区,是为了在OS级别,提高磁盘IO效率,优化磁盘写操作。

    用户进程缓冲区

    前面提到,用户进程通过系统调用访问系统资源的时候,需要切换到内核态,而这对应一些特殊的堆栈和内存环境,必须在系统调用前建立好。而在系统调用结束后,cpu会从核心模式切回到用户模式,而堆栈又必须恢复成用户进程的上下文。而这种切换就会有大量的耗时。

    你看一些程序在读取文件时,会先申请一块内存数组,称为buffer,然后每次调用read,读取设定字节长度的数据,写入buffer。(用较小的次数填满buffer)。之后的程序都是从buffer中获取数据,当buffer使用完后,在进行下一次调用,填充buffer。

    所以说:用户缓冲区的目的是为了减少系统调用次数,从而降低操作系统在用户态与核心态切换所耗费的时间

    CPU缓存(Cache Memory)

    是位于CPU与内存之间的临时存储器,因为cpu的计算速度要比内存的读写速度快很多,而把这些可能会被重复访问到的数据存储于cpu缓存中,就会提高读取速度。可以说缓存是cpu和内存之间的临时存储器。

    缓存的应为是cache,缓冲区的英文是buffer

    回过头来继续页高速缓存:

    页高速缓存的信息单位显然不是一个完整的数据页,一个页包含的磁盘块在物理上不一定是相邻的,所以不能用设备号和块号来识别它,取而代之的是所有者和所有者数据中的索引(通常是一个索引节点在相应文件中的偏移量)来识别页高速缓存中的页。

    //这里基础不能忘掉:通常将虚拟地址空间以512Byte ~ 8K,作为一个单位,称为页(win为页4k),并从0开始依次对每一个页编号。这个大小通常被称为页面 ,记住虚拟的叫页物理的叫框,操作系统通过维护一张表,这张表上记录了每一对页和框的映射关系叫页表。

    页缓存的设计需求

    页缓存至少需要满足以下两种需求。首先,它必须可以快速定位含有给定数据的特定页。其次,由于页高速缓存中的数据来源不同,比如普通文件、块设备等,内核必须根据不同的数据来源来选择对页缓存的适当操作

    内核通过抽象出address_space数据结构来满足上述两种设计需求。

    address_space对象

    页高速缓存的核心数据结构是adress_space对象,它是一个嵌入在页所有者的索引节点对象中的数据结构。高速缓存中的许多页可能属于同一所有者,从而可能被链接到同一个address_space对象,(这里区别硬链接是多个文件相同索引指令ln,它只是一个索引对应多个页的数据),该对象还在所有者的页和对这些页的操作之间建立起链接关系。

    每个页描述符都包括把页链接到页高速缓存的两个字段mapping和indexmapping字段指向拥有页的索引节点的address_space对象,index字段表示在所有者的地址空间中以页的大小为单位的偏移量,也就是在所有者的磁盘影像中页的数据的位置,在页高速缓存查找页是使用这两个字段。

    页高速缓存可包含同一磁盘数据的多个副本。
    因此,两个不同 address_space 对象所引用的两个不同的页中出现了相同的磁盘数据。

    address_space 的一些字段:

    • host:如果页高速缓存中页的所有者是一个文件,address_space 对象就嵌入在 VFS 索引节点对象的 i_data 字段中。
      索引节点的 i_mapping 字段总是指向索引节点的数据页所拥有的 address_space 对象。
      address_space 对象的 host 字段指向其所有者的索引节点对象。
    • backing_dev_info:指向 backing_dev_info 描述符,是对所有者的数据所在块设备进行描述的数据结构。
      backing_dev_info 结构通常嵌入在块设备的请求队列描述符中。
    • private_list:普通链表的首部,文件系统在实现其特定功能时可随意使用。
      如,Ext2 文件系统利用该链表收集与索引节点相关的“间接”块的脏缓冲区。
      当刷新操作把索引节点强行写入磁盘时,内核页同时刷新该链表中的所有缓冲区。
    • a_ops:指向一个类型为 address_space_operations 的表,表中定义了对所有者的页进行处理的各种方法。
      最重要的方法是 readpage、writepage、prepare_write 和 commit_write。
    struct inode {
    
        …..
    
        struct address_space * i_mapping;
    
        struct address_space  i_data;
    
        ….
    
    }
    
    
    struct address_space {
    
        struct list_head clean_pages;
    
        struct list_head dirty_pages;
    
        struct list_head locked_pages;
    
        unsigned long nrpages;
    
    
        …...
    
        struct address_space_operations * a_ops; // 属主页上的操作的方法
    
        strcut indoe * host; //point to host node
    
    struct vm_area_struct * i_mmap; // 指向私有的内存映射区域
    
        struct vm_area_struct * i_mmap_shared;  // 指向公有的内存映射区域
    
        …….
    
        int gfp_mask; // 属主页的内存分配器标志
    
    }

    address_space结构是页高速缓存机制中的核心数据结构,该结构并不是对某一个页高速缓存进行描述,而是以页高速缓存的所有者(owner)为单位,对其所拥有的缓存进行抽象描述。页高速缓存中每个页包含的数据肯定属于某个文件,该文件对应的inode对象就称为页高速缓存的所有者。

    页缓存与文件系统和内存管理都有联系。每个inode结构中都嵌套一个address_space结构,即inode字段中的i_data;同时inode中还有i_maping字段指向所嵌套address_spaces结构。而address_space结构通过host字段反指向页高速缓存的所有者。页缓存的本质就是一个物理页框,因此每个页描述符中通过mmaping和index两个字段与高速缓存进行关联。mmaping指向页缓存所有者中的address_space对象。index表示以页大小为单位的偏移量,该偏移量表示页框内数据在磁盘文件中的偏移量。

    address_space结构中的i_mmap字段指向一个radix优先搜索树。该树将一个文件所有者中的所有页缓存组织在一起,这样可以快速搜索到指定的页缓存。内核中关于radix树有一套标准的使用方法,它不与特定的数据联系(与内核双联表类似),这样使得使用范围更加灵活。具体操作如下:

    radix_tree_lookup():在radix树中对指定节点进行查找;

    radix_tree_insert():在radix树中插入新节点;

    radix_tree_delete():在radix树中删除指定节点;

    此外,该结构中的a_ops字段指向address_space_operations结构,该结构是一个钩子函数集,它表明了对所有者的页进行操作的标准方法。比如writepage钩子函数表示将页中的数据写入到磁盘中,readpage表示从磁盘文件中读数据到页中。通常,这些钩子函数将页缓存的所有者(inode)和访问物理设备的低级驱动程序关联起来。该函数集使得内核在上层使用统一的接口与页缓存进行交互,而底层则根据页缓存中数据的来源具体实现。

    通过上面的描述,可以看到address_space结构中的优先搜索树和钩子函数集解决了页高速缓存的两个主要设计需求。

    内核对页缓存的操作函数

    内核对页缓存的基本操作包含了在一个页缓存所形成的radix树中查找,增加和删除一个页缓存。基于radix的基本操作函数,页高速缓存的处理函数如下:

    page_cache_alloc():分配一个新的页缓存;

    find_get_page():在页高速缓存中查找指定页;

    add_to_page_cache():把一个新页添加到页高速缓存;

    remove_from_page_cache():将指定页从页高速缓存中移除;

    read_cache_page():确保指定页在页高速缓存中包含最新的数据;

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 高速缓存存储器

    2020-12-23 11:03:48
    高速缓存存储器随机访问存储器DRAMSRAMSRAM高速缓存存储器结构直接映射高速缓存组相连高速缓存全相连高速缓存例题 随机访问存储器 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的。静态RAM...

    随机访问存储器

    随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多。
    DRAM用来作为主存以及图形系统的帧缓冲区。在这里我们略讲。
    SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。

    DRAM

    DRAM将每个位存储为对一个电容的充电。
    电路设计者将DRAM组织成二维阵列,优点是可以降低芯片上的引脚(每个引脚携带一个1位的信号 )数量,缺点是必须分成两步发送地址(第一步行地址、第二步列地址 ),这增加了访问时间。

    其中相关知识点:

    1. 传统DRAM的数据传输方法(超单元、引脚)
    2. (多个)DRAM芯片封装在内存模块中,多个内存模块连接到内存控制器,能够聚合成主存
    3. 增强的DRAM(快页模式、扩展数据输出DRAM、同步DRAM、双倍数据速率同步DRAM、视频RAM等)

    关于DRAM,这里不再做详细展开 。

    SRAM

    早期计算机系统的存储器层次结构只有三层:CPU寄存器、DRAM主存储器和磁盘存储。不过由于CPU和主存之间逐渐增大的差距,我们在他们之间插入了一个小的SRAM高速缓存存储器,称为L1高速缓存。之后又在L1与主存之间插入了更大的高速缓存,称为L2高速缓存。有些现代系统还包括有一个更大的,L3高速缓存。

    为方便讨论,我们假设CPU和主存之间只存在L1高速缓存

    SRAM高速缓存存储器

    结构

    在这里插入图片描述
    一般而言,高速缓存的结构可以用元组(S,E,B,m)来描述,如上图所示。

    1. 一个高速缓存拥有S=2s个数
    2. 每个组(S)有E个高速缓存
    3. 每个行有1个数据,1个有效位,t个标记位;
    4. 这个数据块大小B=b字节。

    所以高速缓存的大小C,是指所有块大小的总和:C=S×E×B
    有效位是指明该行是否包含有意义的信息,1是有,0是没有。

    其中,每行含有m个地址位(不包括有效位);
    被划分成t个标记位、s个组索引位、b个块偏移位;

    1. s组索引位用来寻找这个字被放在哪个组中,是一个无符号整数;
    2. t标记位用来寻找这个字被放在该组的哪一行中;
    3. b偏移位给出了在B个字节的数据块中的字偏移。

    缓存命中与缓存不命中

    缓存命中的两个条件:

    1. 设置了有效位(有效位为1)
    2. 高速缓存行中的标记与传送地址中的标记相匹配

    其中任意条件不满足,就将其称为缓存不命中
    如果缓存不命中,那么它需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
    一般而言,如果组中都有高速缓存行了,那么必须驱逐一个现存的。这一过程称为行替换

    抽取请求字的三步骤

    根据每个组的高速缓存行数E,高速缓存被分为不同的类。

    1. 直接映射高速缓存:E=1(每个组只有一行)
    2. 组相连高速缓存:1<E<C/B
    3. 全相连高速缓存:E=C/B、S=1(只有一个组,包含所有高速缓存行)

    所有类别的高速缓存确定一个请求(传送地址)是否命中,然后抽取出被请求的字的过程,都分为三步:1)组选择;2)行匹配;3)字抽取

    组选择

    在这一步中,高速缓存从传送地址中间抽出s个组索引位,用来寻找匹配组(注意:由于全相连高速缓存只有一个组,地址中没有组索引位
    在这里插入图片描述

    行匹配

    在上一步中我们已经选择了某个组i,这一步就是要确定是否有传送地址的一个副本存储在这个组包含的一个高速缓存行中。

    1. 直接映射高速缓存一组只有一行,这里搜素很容易,但也容易出现抖动(高速缓存反复地加载和驱逐相同的高速缓存块的组);
    2. 组相连高速缓存必须检查多个行的标记位和有效位,以确定所请求的字是否在集合中。这里一个重要思想就是:组中的任何一行都可以包含任何映射到这个组的内存块。也就是说,高速缓存必须搜索组中的每一行,寻找有效行;
    3. 全相连高速缓存同组相连一样,只是规模更大,因此它只适合做小的高速缓存。

    当有效位被设置后,我们只需要寻找是否有相匹配的标记位就可以了。
    在这里插入图片描述

    字选择

    一旦命中,我们知道传送地址就在这个块中的某个地方。最后一步就是要用b块偏移来确定所需要的字在块中是从哪里开始的。我们可以把块看成一个字节的数组,而字节偏移是到这个数组的一个索引。
    到了这一步,三种类别的步骤都是一样的。
    在这里插入图片描述

    展开全文
  • 一、通用的高速缓存存储器组织结构 首先让我们了解一下基本结构、 考虑一个计算机系统,其中每个存储器地址有m位,形成M=2^m个不同的地址。 ·高速缓存被组织成一个有S=2^s个高速缓存组的数组。(即一共有S个...

    一、通用的高速缓存存储器组织结构

               首先让我们了解一下基本结构、

               考虑一个计算机系统,其中每个存储器地址有m位,形成M=2^m个不同的地址。

                ·高速缓存被组织成一个有S=2^s个高速缓存组的数组。(即一共有S个组)

                ·每个组包含E个高速缓存行。(即一组里有E行)

               ·每一行是包括一个B=2^b字节的数据块(block)(又称偏移位),一个有效位(valid bit)指明这个行是否包含有意义的信息(即判断是否命中),还有t=m-(b+s)个标记为(tag bit),他们唯一地标识存储在这个高速缓存行中的块。

     

               对于任意一个地址来说,我们可以把地址拆分成以下形式

     

        · 高速缓存的大小(或容量)C指的是所有块的大小的和,标记位和有效位不包括在此内,C=S\times E\times B

         几个比较重要的公式

     

     

    m=\log _{2}(M) 内存地址的最大数量
    s=\log_{2}(S) 组索引位
    b=\log_{2}(B) 块偏移量
    t=m-(b+s) 标记位数量
    C=S\times E\times B 容量

        我们可以做一个简单的练习

         

    高速缓存   m      C      B     E     S      t      s           b
           1   32    1024      4     1 1024÷4÷1=256 32-8-2=22      8           2
           2   32    1024      8     4     32   24      5          3

    二、直接映射高速缓存

            每个组只有一行(E=1)的高速缓存成为直接映射高速缓存

            我们来简单看一下,一个值怎样判断他的t、s、b位

     

    接下来我们来做一个练习

                    假设 M=16Bytes, S=4 , E=1, B=2 ,将以下数值读入高速缓存时是一种什么情况?

        首先,由以上条件可以知道 m=4,s=2, b=1 , 可以得知地址address of word为

               

        然后将0,1,7,8,0转换为二进制 

      1、 “0”,s为00,所以要把它放进第0组。可是我们发现,此时高速缓存中第0组为空,所以此时并没有命中。再看b=0,说明偏移量为0,因为B=2,所以我们可以放两个字节进去,即M[0-1]

    .2、接着我们看“1”,s为00,所以我们要把他放进第0组,此时第0组已经存有值,并且tag相吻合,可以直接读到M[1],此时命中

    3、“7” ,s为11,所以我们要把他放进第3组,此时第3组为空,所以没有命中。因B=2,放两个字节,即M[6-7]

    4、“8” ,s为00,所以我们要把它放进第0组,可这是可以发现,“8”的t,即表示为时1,与0组标识为不相符,所以也没有命中。

     

    接下来,我们就要把第0组原有的值踢走,换进新的值。

     

    5、“0”,s为00,所以我们要把他放进第0组,与上一组一样,二者的标识为并不相符,所以我们继续踢走原有的值,放入新的值

     二、组相联高速缓存

               直接映射E=1,而组相联告诉缓存放宽了这个限制,E可以>1,我们通常称之为E路组相联高速缓存

      假设 M=16Bytes, S=2 , E=2, B=2 ,将以下数值读入高速缓存时是一种什么情况?

    1、“0”,s为0,所以我们将他们放在第0组,优先考虑放入第一行,偏移量为0,即放入M[0-1],没有命中

    2、“1”,s为0,所以放到第0组,这是我们发现二者标志位相吻合,所以命中

    3、“7“,s为1,所以我们放到第1组,偏移量为1,没有命中。可以放入的值可以稍稍计算,偏移为可以取0或1.当b=0时,放入的值为0110,即6;当b=1时,值为0111,即7,所以放入的是M[6-7]。之后的同理

    4、”8“,s为0,所以放到第0组,第一行标志位位00,所以不吻合,我们将其放入第二行,没有命中。

    5、”0“,s为0,所以放到第0组,第一行标识位与t相吻合,所以命中

     

     

     

     

     

     

     

     

    展开全文
  • 阐述了基于ADSP-21065L的并行多通道数据采集板上高速采样缓存的设计与电路结构,给出了采用FPGA实现通道复用和采样数据预处理,从而构造16MB的SDRAM海量缓存以将高速缓存中的多批次采样数据经AD-21065L倒入SDRAM存储...
  • 磁盘高速缓存、内存高速缓存、硬件高速缓存、每cpu页框高速缓存、页高速缓存、目录项高速缓存、索引节点高速缓存、转换后援缓冲器(TLB)、哈佛结构的高速缓存、写缓冲器、高速缓存一致性、L1和L2等高速缓存在驱动的...
  • Linux高速缓存

    2019-09-16 06:37:01
    不管在硬件设计还是软件设计中,高速缓存是获得高性能的常用手段。Linux使用了多种和内存管理相关的高速缓存。 1.缓冲区高速缓存: 缓冲区高速缓存中包含了由块设备使用的数据缓冲区。这些缓冲区中包含了从设备中...
  • 阐述了基于ADSP-21065L的并行多通道数据采集板上高速采样缓存的设计与电路结构,给出了采用FPGA实现通道复用和采样数据预处理,从而构造16MB的SDRAM海量缓存以将高速缓存中的多批次采样数据经AD-21065L倒入SDRAM存储...
  • 处理器高速缓存

    2018-06-30 14:15:53
    高速缓存单元 ,它插在分页单元和主内存之间,由硬件高速缓存内存(hardware cache memory)和一个高速缓存控制器(cache controller).{1.硬件高速缓存内存 -- 存放内存中真正的行;2.高速缓存控制器存放一个表项数组...
  • 展开全部计算机硬盘的高速缓存:1.高速缓存的概念。缓存(Cache memory)是硬盘控制器上的一块内存e5a48de588b662616964757a686964616f31333337383934芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲...
  • DNS高速缓存

    2019-08-11 01:27:02
    dns高速缓存 1: DNS概念: DNS(Domain Name System域名系统) 是互联网上存储域名和ip映射关系的一个分布式数据库,它负责把域名转换成ip地址,或ip地址转换为域名。DNS运行于TCP/UDP的53端口上。 2. 高速缓存DNS...
  • 计算机高速缓存

    2020-01-18 17:22:09
    高速缓存的工作原理 高速缓存的替换策略 高速缓存的工作原理 字:存放在一个存储单元中的二进制代码组合 字块:存储在连续的存储单元中而被看作是一个单元的一组字 一个字有32位 一个字块共B个字 ...
  • 高速缓存存储器的组织结构 高速缓存存储器 (Cache Memory) Cache memory is a fast memory which is smaller in size, it is used as the intermediate memory between the CPU and Main Memory which objective is ...
  • 默认情况下,在为高速缓存配置查找转换时,PowerCenter 将创建静态查找高速缓存。PowerCenter 将在处理第一个查找请求时创建高速缓存。它将根据查找条件为传递给转换的每行查询高速缓存。PowerCenter 处理转换时不会...
  • 缓存命中率是指,在查找前台缓存时,因为前台缓存是高速缓存,内存小,所以存在着找不到的情况!找不到某个项目的话,就要到后台查找,查找到并返回给用户,并在前台缓存中留一份!!! 这个系统探究的就是,高速...
  • 高速缓存学习笔记

    2020-01-09 15:56:24
    这里写自定义目录标题高速缓存系统概述存储器层次结构高速缓存基本原理高速缓存的设计高速缓存的存取物理地址还是虚拟地址写策略数据同步问题 高速缓存系统概述 高速缓存存储系统(cache memory system)是高速...
  • C#高速缓存测试源码

    2018-09-26 11:59:50
    三种高速缓存测试代码,c#源码
  • 使用SQL Server高速缓存依赖性的步骤。
  • 高速缓存DNS

    2018-11-28 14:38:08
    几台主机处于同一网段,就可以设置其中一台为高速缓存DNS,从114.114.114.114获取信息,缓存到本地,其他主机从它那获取信息,这样就可以加快速度,不用从114.114.114.114上面获取,可以直接从本地获取。属于非权威...
  • 计算机的高速缓存

    2019-08-10 15:27:11
    计算机高速缓存的原理,计算机高速缓存的策略
  • CPU高速缓存

    2019-02-19 19:22:41
    CPU一级缓存,就是指CPU的第一层级的高速缓存,主要当担的工作是缓存指令和缓存数据。一级缓存的容量与结构对CPU性能影响十分大,但是由于它的结构比较复杂,又考虑到成本等因素,一般来说,CPU的一级缓存较小,通常...
  • 这篇文章我尽量说明高速缓存的是啥,和高速缓存至关重要的作用。(纯爱好,发现错误赶快联系我) 如果单单去观察一个HelloWord和程序是如何在计算机从执行的,就会发现系统花了大量的时间吧信息从一个地方加载到另一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,749
精华内容 5,499
关键字:

高速缓存