对于容量为 8KB 的存储器直接寻址,寻址所需最小地址位数是多少啊

996之外所写原创笔记,原投稿雷锋网AI科技评论。本人工作饱满,价值观A,HRG和leader就不要请喝茶了,请吃饭还是可以的,拒绝点鱿鱼。Google 团队最新提出 MnasNet,使用强化学习的思路,提出一种资源约束的终端 CNN 模型的自动神经结构搜索方法。

2018 年 6 月 28 日,由电子自动化设计顶级会议 DAC' 2018 主办的「低功耗目标检测系统设计挑战赛」于加州旧金山于落下帷幕。来自中科院计算所的 ICT-CAS 团队和来自清华大学的 TGIIF 团队在全球 114 支参赛队伍中脱颖而出,分获 GPU 组和 FPGA 组的冠军。…

机器之能原创,撰文:微胖。 「我们只做前装市场。」最近,深鉴科技 CEO 姚颂在接受机器之能采访时说道。国内人工智能芯片创业公司深鉴科技今天宣布,其自主研发的 ADAS 系统——DPhiAuto,目前已与日本大型车企和来自欧洲的 Tier 1 签署合同,即将实现量产…

2017 年,AI 芯片是半导体产业的亮点,而它受到的关注又远远超出半导体的圈子。这一年,从科技巨头到初创公司,新老角色轮番登场,为我们上演了精彩好…

已认证的官方帐号 人工智能

最近硬件业界有些热闹:IBM研发出能效超GPU 100倍的新型存储器,英特尔预计2020年发布第一批独立GPU,清华的Thinker芯片论文入选ISCA-18。从学术界到产业界,芯片研究者的探索从未停止,进展也在切实发生。英特尔中国研究院院长宋继强博士,清华大学教授、…

计算机系统一般都采用多级存储器结构,如寄存器、主存、磁盘、光盘、磁带等。这种多级存储器 的特点是从外存储器到CPU中的寄存器逐级向上,存储容量逐级减小,而存取速度逐级提高。由于上下两级存储器的速度可以相差l—2个数量级或者更高,因 此,上一级和下一级存储器的数据交换常常成为系统瓶颈,大大降低了系统的性能。为了解决这个问题,通常采用的办法是在两级存储器之间增加一个高速缓冲存储

    所谓Cache是一个速度等于或者接近上一级存储器访问速度的小容量存储器,其中保存了下级存储器中部分当前所需的数据,因此CPU可以直接从 Cache中取得所需的数据,而不必访问下一级存储器。由于Cache的速度与上一级存储器相当,因此保证了系统效率不会降低。Cache的设计依据是程 序存取局部性原理,通常程序存取的一批数据总是存放在存储器相邻的单元中,只要把这一批数据同时调入cache中,即可保证近期内需要的数据都能在 Caclle中访问成功。为了实现上述目标,在设计Cache时必须做到以下两点:  

    2.访问Cache与访问下级存储器的方式不变、容量不减。因此对于编程人员来说,Cache是完全透明的,也就是说,他们感觉不到Cache的存在。  

  由于Cache的容量比下级存储器小l-2个数量级、要做到上述两点,则必须考虑以下问题:  

    1.如何组织Cache,使得下级存储器的每个部分都能够在需要时调入Cache  

    2.采用何种替换策略、使得访问cache的命中率最高;  

    3.采用什么方法使得Cache和下级存储器的数据具有—致性,即修改Cache后保证下级存储器的内容也随之修改(或者相反)。  

    通过上面的介绍,我们知道Cache也是一种存储器,其工作速度很高,如Ll和L2   Cache就是为了解决PU和DRAM主存之间的速度匹配而设置的。因此主存Cache也可以看作是高速CPU和低速DRAM之间的接口。或者说,把 Cache看成一个适配器来解决CPU和DRAM之间的速度匹配问题。CPU、Cache和DRAM三者之间的关系可用图2所示的工作原理图来表示。  

    当CPU要从存储器中读取一个数据字时,它首先在Cache中查找。如果找到了,则立即从Cache中读取并送到CPU中;如果在Cache中找不 到,则用一个存储器读周期的时间从主存个读出这个数据字送到CPU、并且把包含这个数据字的整个内存数据块都从主存送到Cache中。之所以要把包含被读 数据字的整个内存数据块都从主存送到Cache中是因为对存储器的访问具有局部性,也就是说连续读取的数据宇一般在内存中都是连续存放的;调入一个数据块 后,将使得以后若干次的访存都可以通过访问Cache来完成。如果调度算法得当,Cache的命中率可以很高。这样,从用户的角度看来,整个存储器 (Cache+DRAM)就变成了既有Cache这样高的速度,又有DRAM这样的大容量的存储系统了。这对于解决存储器这个瓶颈是十分有效的。  

    ·Cache虽然也是一类存储器.但是不能由用户直接访问。  

    ·Cache的容量不大,其中存放的只是主存储器中某一部分内容的拷贝,称为存储器映象。  

    ·为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法更换。  

    ·Cache中的内容应该与主存中对应的部分保持一致。也就是说,如果主存中的内容在调入Cache之后发生了改变,那么它在Cache中的拷贝也应该随之改变。反过来,如果CPU修改了Cache中的内容,也应该修改主存中的相应内容。  

    现代的Cache系统常常采用分级组织的方法,在CPU中集成了一级Cache(L1),也称为片内Cache;在主板上配置二级 Cache(L2)。CPU中的片内Cache虽然容量较小,但是能够以CPU相同的工作频率工作,因此速度极快。一般情况下在L1未命中时,才在L2中 查找。从赛扬处理器开始,甚至已经把L2集成到CPU内部了(K6-3处理器也内置了二级缓存,而这时相应的Socket   7主板上的二级缓存就成为“三级”缓存了)。  

    所谓存储器映像问题就是如何组织Cache.使得下级存储器的每个部分都能够在需要时调入Cache,并且确定调入的内容放在Cache中的什么地方,以便于准确迅速地查找。存储器映像的方法主要有全相联映像法、直接映象法和组相联映象法。   MMU管理

    全相联映像法的基本思想是把一个主存块的地址(块号)和块的内容都拷贝到Cache行中;由于块地址也保存在Cache中,因此可以拷贝到Cache中的任意位置。此法的优点是灵活,但是查找比较困难,而且硬件的实现较为困难。  

    直接映像法的基本思想是一个主存块只能拷贝到Cache中固定的行内。该按硬件成本低,但是由于一个Cache行要对应多个主存块,在使用中当这些主存块需要同时调入Cache时将发生冲突、增加调入调出的开销。  

    组相联映像法是上述两种方法的折衷方案。其基本思想是把Cache分为m个组,每个组分为n行。主存块分配时对组是固定的、而在组内的位置可以任意。这样就综合了两者的优点,这是目前最常用的方法。

    由于Cache的容量总是远小于下一级存储器的容量,因此Cache中只能是下级存储器的部分映像。为了使下级存储器的内容都能在需要时拷贝到 Cache中,必须随时替换Cache内容:即把当前不需要的内容调出Cache,腾出空间,调入当前需要的内存块。在这种调入调出方法中,最重要的是替 换的策略,即在需要时选择Cache中的哪些行调出,再调入所需的内存块。这种替换策略通常称为调度算法,它是由硬件实现的。如果算法选择不当,将大大增 加调入调出的频度。例如把一个当前不需要但是很快就将使用的行调出,必然会降低系统的效率。  

    常用算法有最不经常使用算法、最近最少使用算法。  

    最不经常使用算法(LFU算法)的思想是把最近一段时间内被访问次数最少的行调出。因此需要对每一个行设置一个计数器,对该行的访问次数计数、在需要 时比较各个计数器的值,淘汰计数次数最少的数据行。这种算法的问题是明显的、那些在程序前期被频繁访问而在后期不再使用的行,可能会在相当长的时间内不被 淘沈而那些刚刚调入并将继续反复使用的行则可能因为其计数器中的值较小而频道淘汰。这将严重影响系统的效率。  

另一种较常用的算法是最近最少使用算法(LRU算法)。LRU算法的思想是将最近一段时间内 最少被访问过的行淘汰出局。因此也需要为每行设置一个计数器、但是计数方法与LFU算法不同。LRU算法是把命中行的计数器清零、其它各行计数器加1。当 需要替换时淘汰行计数器计数值最大的数据行出局。  

    此外还有一些算法,鉴于篇幅不再赘述。  

    由于Cache中的内容只是主存中相应单元的“拷贝”。因此必须保持这两处的数据绝对一致,否则就会产生错误。造成Cache和相应主存单元数据不一 致的原因来自两个方面。一是CPU读人Cache数据作了修改后再写入Cache,而主存中相应单元的内容并未随之变化二是在有多个设备对主存访问的情况 下造成的。如多处理器或有DMA的系统,它们直接访问主存储器,修改了其中的内容,而cache中的相应数据却末随之修改。  

    对于CPU修改了Cache的数据,如何使主存中相应单元的数据也随之修改的问题。通常有三种不同的处理方式。  

    一种方式称为“直写式(write—through)”,其原理是在CPU向Cache写入的同时,也把数据写入主存储器,以保证Cache和主存中 相应单元数据的一致性。直写式系统简单可靠,但由于CPU每次更新Cache时都要对主存储器写入,习此速度受到了影响。  

    第二种方式称为“缓冲直写式(Posted   Write)”,其原理是CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓冲器中暂存,这样CPU就不必等待主存写入造成的 延时而直接进入下一周期的操作在适当的时候再把缓冲器中的内容写入主存中(例如在CPU读Cache的同时;把缓冲器的内容写入主存)。这种方式在一定程 序上提高了速度,但由于缓冲器的容量有限,只能锁存——次写入的数据,如果发生连续的写操作则CPU仍需要等待。上述的直写式或缓冲直写式不仅速度低,而 且在很多时候向主存写入是不必要的。例如CPU可能多次对同一个Cache单元更新内容,实际上只需把最后更新结果写入主存即可,而不必更新一次 Cache,就向主存写入一次。

         根据这种思想提出了第三种方式,称为“回写式(Write—back)”。有的资料中也称为“写回”。这种方式的原理是CPU修改了Cache的内容后并 不立即修改主存中相应的单元,而在被修改的Cache单元的内容将从Cache中淘汰时(如更换页面)才把它写入主存储器的相应单元中。回写式系统速度 快,避免了不必要的冗余写操作,但结构上比较复杂。当前的微机普遍采回写式系统。  

    2.多处理器或DMA直接访问主存储器后的处理  

    多处理器或DMA直接访问主存储器造成主存和cache中的数据不一致发生在以下情形:当主存中某单元内容调入Cache后,又由其它处理器或DMA更新了主存储器该单元的内容。为了避免这种情况下的数据不一致,通常采用以下三种处理办法。  

    一种办法称为“总线监视”,即由cache控制器随时监视系统的地址总线,若有其它部件向主存中写入了内容,则把Cache中相应单元的内容置为无效,CPU必须重新从主存中读人该单元的内容  

  第二种方式称为“主存监视”、由Cache控制器监视所有主存储器的读写操作所有对主存的访问都必须通过Cache来完成。这样,凡对主存的写入也就对Cache中的相应单元进行拷贝从而保证了两者数据的一致性。  

内容。其它总线设备也只能把数据直接写入该区域中。由于该区域不与Cache发生关系,也就不存在数据不一致的问题。不可Cache区方式是微机中最主要 的方式,不少BIOS设置程序允许用户设置不可Cache区的首地址和尺寸、以及可Cache区的地址范围。  

    Cache在微机系统中获得了广泛应用。除了CPU中的cache外,硬盘、光盘甚至主存中部可找到它的踪影。  

    从486CPU开始,在CPU芯片内集成了Cache,称为片内Cache。此时由于受到工艺上的限制,片内Cache的容量很小,只有8KB。片内 Cache的最大优点是,CPU对它的访问是在芯片内部进行的,不需要通过总线传送数据因此速度很快;但是由于其容量很小,而处理器的时钟频率又很高,一 旦出现片内cache末命中的情况,性能将明显化。因此在处理器芯片之外的主板上再加Cache,称为二级Cache(L2Cache),或称为板载 Cache。  

    在实际使用中,进入Cache的内容既可以是指令也可以是数据,而CPU对于这两者的处理是不完全相同的。为了使系统效率达到最佳状态,从Pentium处理器开始把片内Cache容量增加到16KB。其中指令CBche和数据Cache各占8KB。  

    Intel公司在1995年末推出了Pentium   Pro(P6),为了进一步改善系统性能,P6采用了双穴封装,即除了CPU外,还把256/5l2KB的二级Cache也封装在同一个陶瓷片内。这 样,L2也能以处理器的时钟高速运行,大大地提高了系统效率。  

    由于P6采用的方式成本很高,在InteI随后推出的Pentium   II中,把L2又从CPU陶瓷封装中分立出来,和CPU共同安装在一块称为SEC的卡盒内,而Pentium   II处理器则采用了双独立总线结构,其中一条总线联接L2高速缓存,另一条负责主存。由于Pentium   II的L2只能以CPU时钟的一半工作。因此比Pentium

    为了匹配硬盘和主存在数据传送速度上的矛盾,微机系统中毫无例外地采用了硬盘高速缓存,或称为硬盘Cache。硬盘高速缓存分为两种:硬件高速缓存和 软件高速缓存。软件高速缓存是利用软件工具(如Smart   Drive)在系统主存中开辟的一块区域作为数据传送缓冲区,硬件高速缓存则是在磁盘控制器中安装的一块RAM,通过RAM缓冲区读写数据可以得到更高的 访问速度。早期硬盘中的cache很小,只有数十KB到数百KB,目前新型硬盘的高速缓存均达到2MB。在选购硬盘时除了注意容量、带宽、转速等参数外, 还应该考虑Cache的容量,越大越好。当Cache容量大时,能够保证较稳定的突发数据传送;而如果Cache容量较小,在读写大型图形或视频文件时, 由于连续传送的数据量很大,缓冲区则不能表示出其优越性,使得数据传送不再能处于突发传送方式,而处于持续传送方式,降低了数据带宽。  

    以CD—ROM驱动器为例,其中配置的Cache通常为128KB或者256KB,高档CD—ROM驱动器中的Cache容量可达512KB甚至更 高。在CD   ROM中配置Cache的目的仍然是作为光盘的高速缓存,以便减少读盘的次数,这对于改善CD   RoM的性能是很有好处的。  

    主存通常是采用DRAM(动态随机存取存储器)器件制作的,而Cache一般采用速度更高的SRAM(静态随机存取存储器)制作。一种新型的增强 DRAM)采用了在DRAM芯片上集成一个小容量SRAM的办法,我们可以把这一小片SRAM称为主存中的Cache。这个Cache在突发式读写时非常 有利,使DRAM芯片的性能得到了明显的提高。

 一些指令的作用:

/ARM920T手册P38,寄存器C1,控制寄存器,使能各个寄存器

//上面程序中的MMU_SET(),就是关于页表的函数MMU要完成虚拟存储空间到物理存储空间的映射。把虚拟地址空间分成一个个固定大小的块,每一块称为一页。把物理内存的地址空间也分成同样大小的页。MMU就要是要实现两者之间的转换。

而页表(Translate table )(ARM920T page 40 register 2,TTB)是实现上述的功能的重要手段 C2,他是位于内存中的一个表。  表的每一行对应于虚拟存储空间的一个页,内容有:该虚拟内存页对应的物理内存页的地址、该页的方位权限和该页的缓冲特性。一般我们把这个表中的这样的一 行,称为一条地址变换条目(entry).

***查找先在cache中找地址变换条目,没有找到再到内存找,并保存 到TLB中

TLB:针对程序运行时候只是一部分运行的特性,采用了一个容量更小的存取器件,称快表(TLB)。C8

地址条目锁存(locked down):mmu可以利用这个提高cpu速度,读取页表中的地址条目。 C10

详细的MMU部分还有寄存器的参考:请自行参阅《ARM结构和编程》的page 188 --220和《ARM技术参考手册》的page 40 寄存器

我要回帖

更多关于 存储器直接寻址 的文章

 

随机推荐