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

一,为什么需要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大致位置,然后再利用逐个比较的方法找。

  小结:

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

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

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

时间: 2024-10-06 15:12:43

Cache地址与主存地址对应关系的相关文章

IP地址理解_IP地址=网络地址+主机地址,但是具体前面多少是网络地址看题目说明

题目:   属于网络112.10.200.0/21的地址是() 112.10.206.0 112.10.217.0 112.10.224.0 112.10.198.0 分析解答: 总结: 首先,明白后面那个21是什么意思,21表示这个IP的前21位表示的是网络地址,那剩下的11位表示主机地址.IP地址共32位=4个字节*8位/字节: 其次,就是理解一个点隔开的就是一个字节,那么前面21位到哪了呢. 将200写成二进制=128+64+8=11001000,因此前面21位,截取200的前5位,剩余的

u-boot中链接地址和加载地址的相关知识

以zc702开发板的u-boot为例 链接地址(运行地址):链接地址是在程序编译链接阶段就确定好的地址. u-boot的链接脚本由CONFIG_SYS_LDSCRIPT宏定义来指定,如在zynq_common.h当中有如下代码: #define CONFIG_SYS_LDSCRIPT "arch/arm/cpu/armv7/zynq/u-boot.lds" 在该链接脚本中指定了u-boot中各部分的链接顺序.同时zynq_common.h中的CONFIG_SYS_TEXT_BASE则指

iphone开发之获取网卡的MAC地址和IP地址

本文转载至 http://blog.csdn.net/arthurchenjs/article/details/6358489 这是获取网卡的硬件地址的代码,如果无法编译通过,记得把下面的这几个头文件加上把. #include <sys/socket.h> // Per msqr#include <sys/sysctl.h>#include <net/if.h>#include <net/if_dl.h> #pragma mark MAC addy// Re

如果重新设计网络,有没有可能合并IP地址跟MAC地址?

前阵子看网络基础相关的书籍,冒过一个疑问,为什么要有MAC地址跟IP地址?两者可否合二为一? 现在的逻辑是这样子:在数据传输过程中,路由器查看这个数据包的IP地址,跟路由表中记录的“IP集合:下一跳的mac地址”做对照,确定了要往那边扔:网卡在接收数据的时候,也会看看这个数据包中记录的目标MAC地址是不是自己,只接收自己的. MAC地址是数据链路层使用到的,IP地址是网络层使用到的.MAC地址是硬件的物理属性,在网卡上固定不变,IP地址是逻辑属性. 所以,因为网络分层的设计,很自然的就想到要使用

IP地址与MAC地址

众所周知,每一块网卡在出厂时都烧录了世界唯一的MAC地址,使用该地址可以在网络中识别不同的计算机.同时,互联网中也使用IP地址来定位客户端,这是因为IP地址比MAC地址定位更方便,而且也更加便于记忆.  1.1 IP地址在大多数的局域网中,IP地址是计算机之间通信的唯一依据.当网络中计算机数量比较多时,想要准确记忆每一台计算机的IP地址,显然是一件不太可能的事情.如果网络规模相当大,而且划分了VLAN,那么网络管理员更无法准确记忆用户IP地址了. IP信息查看--ipconfigipconfig

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ---------------------------------------------------------------------------------------------------------------- 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一

C/C++学习笔记---高地址、低地址、大段字节序、小段字节序

字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端.大端两种字节顺序. 小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处: 大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处. 高.低字节 一般PC是低字节序,如果按平时书写习惯,从左到右是高位到地位的顺序,则例如0X12345678,在内存中的情况是 高地址 12 34 56 78 低地址 高地址:内存地址可以对应十六进制的数值,值大的为高地址,否则为低地址: 3. 总结    整数类型内部

修改pc机的mac地址 以及 mac地址的组成

在"开始"菜单的"运行"中输入regedit,打开注册表编辑器,展开注册表到:HKEY_LOCAL_ MACHINE/System/CurrentControl Set/Control/Class/子键,在子键下的0000,0001,0002等分支中查找DriverDesc(如果你有一块以上的网卡,就有0001,0002......在这里保存了有关你的网卡的信息,其中的DriverDesc内容就是网卡的信息描述,比如我的网卡是Intel 21041 based Et

mac地址和ip地址要同时存在么?

刚再整理笔记的时候,突然想到了一个问题,网络中为什么要同时存在mac地址和ip地址呢?那现在就来随便扯扯吧. 这个问题其实是可以分成两个问题的:Q1:如果只有mac地址,没有ip地址可以么? 众所周知,根据mac可以唯一确定一个主机,那么按照这个的逻辑,mac就相当于人们的身份证号,是可以唯一标识的.那为什么还有有ip呢?我觉得可能是这样的. 1.mac地址是不分层次的,如果网络过于庞大的话,不分层次的管理是不切实际且十分繁琐的.(这个是管理层面的,类似于手机号于人的关系) 2.只有mac地址的