Cache地址与主存地址对应关系

简介:       一,为什么需要cache          程序的运行大致是这个样纸的:当我们要运行一个程序时,如,我们点击了一个.exe的文件,然后剩下的事情就交给计算机处理了:计算机会先将程序读到内存,然后再通过各种调度读到cup中执行。

     

一,为什么需要cache


         程序的运行大致是这个样纸的:当我们要运行一个程序时,如,我们点击了一个.exe的文件,然后剩下的事情就交给计算机处理了:计算机会先将程序读到内存,然后再通过各种调度读到cup中执行。(注:本图只是个例子)


     

    

       但是对于经常使用的程序或文件,想想如果我们经常按照这个顺序读下来,举个极端点儿的例子,从硬盘读到内存要1000S,从内存读到cache要100s,从cache读到寄存器执行要1s,这是我们就应该想,对于常用的东西,为什么不就放在身边呢?但是考虑到寄存器的容量太小的问题,于是,我们就把常用的东西放到了cache里面。这里的cache起到了一个buffer的作用:暂时不用但以后常用的东西先存起来。


        这样,使用了Cache后,我们在运行程序时如果需要访问存储器,就会先访问Cache,看看在这里面有没有我们要找的信息,如果没有,再到主存中去寻找,如果找不到,再到辅存中去找。


   


   

二,Cache与主存地址的对应方法

    

    CPU访问要读取数据时,发出来的是主存的地址,而有可能我们要访问的内容在Cache中,所以,这时候就要将主存地址转换为Cache的地址,这里,有3中转换方法。      


  1,直接映像

   

     在进行映像的工作时,规定各区中的某一信息块只能映像到Cache中的一个固定的信息块中,即主存中的第0块映像到cache的第0个块框架,第1块映像到cache的第1块,以此类推的映像方式。

 

 2,全相联


   在全相联Cache中,存储的块与块之间,以及存储顺序或保存的存储器地址之间没有直接的关系。程序可以访问很多的子程序、堆栈和段,而它们是位于主存储器的不同部位上。


    这时,我们可以先来看一下cache结构:


  

     因为Cache保存着很多互不相关的数据块,所以,Cache必须对每个块和块自身的地址加以存储(就放在上面的tag里面)。当请求数据时,Cache控制器要把请求地址同所有地址加以比较,进行确认。



3, 组相连


    组相联Cache是介于全相联Cache和直接映像Cache之间的一种结构:通过直接映像决定组号,在一组内再用全相联的方式来决定cache中的块号。






综上,可得出:


    直接映射:一个块可以放到cache中的唯一的位置上

    全相联:一个块可以放到cache中的任意的位置上

    组相联:一个块可以放到cache的受限的组里,该块可以放置到组内的任意一个块里


   计算机内各种地址转换都很有规律:1,分级:比如,河北省——廊坊市——安次区——狼院——**宿舍楼; 2,逐一比较:比如,查找门牌号为515的房间,就从000这个房间挨个比较到找到515为止;3,综合上面1和2:比如,要从中国查找这个515房间,就先利用分级方法确定515大致位置,然后再利用逐个比较的方法找。


 

   小结:

   

在贝尔克的亡灵中,福尔摩斯对柯南说过:


     人生就是一束无色的线里交缠着名为杀人的血红色的线,而解开那线的工作,不就是我们的工作吗?

 

     最近感觉学习东西就像是解开一团线,越理就越清晰吧~


    

    

     



          

目录
相关文章
|
存储 缓存 算法
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
265 0
|
3月前
|
存储 安全 Linux
将文件映射到内存,像数组一样访问
将文件映射到内存,像数组一样访问
34 0
|
3月前
|
程序员 编译器
静态分配和动态分配之间的区别是什么
【9月更文挑战第1天】静态分配和动态分配之间的区别是什么
511 0
|
6月前
|
存储 编译器
指针?地址?内存?
指针?地址?内存?
86 0
|
7月前
mmap匿名映射区
mmap匿名映射区
|
7月前
|
算法
页表、地址重定位、地址保护的名词解释
页表、地址重定位、地址保护的名词解释
90 0
|
7月前
|
索引
虚拟地址与物理内存地址是如何映射的
虚拟地址与物理内存地址是如何映射的
|
Linux 定位技术 虚拟化
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
【OSTEP】多道程序和时分共享 | 虚拟地址空间 | 用户栈vs内核栈 | 进程结构: struct thread | 虚拟vs物理地址空间 | 地址转换方案
50 0
|
存储 安全 API
2.1 PE结构:文件映射进内存
PE结构是`Windows`系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的,在早期DOS操作系统中,是以COM文件的格式存储的,该文件格式限制了只能使用代码段,堆栈寻址也被限制在了64KB的段中,由于PC芯片的快速发展这种文件格式极大的制约了软件的发展。
926 0
|
存储 缓存 索引
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
108 0