存储器结构、cache、DMA架构分析--【原创】
2014-12-04 02:37
260 查看
存储器的层次结构
![](http://images.cnitblog.com/blog/698434/201412/040232587172188.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(1).png)
高速缓冲存储器 cache
![](http://images.cnitblog.com/blog/698434/201412/040233570303874.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(2).png)
读cache操作
![](http://images.cnitblog.com/blog/698434/201412/040234289512622.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(3).png)
cache如果包含数据就直接从cache中读出来,因为cache速度要比内存快
如果没有包含的话,就从内存中找,找到后就放到cache中去,以后再读的话就直接从cache读了,下次访问很多次的时候就会快很多,相当于提高了命中率,cpu的访问速度就大大提高了
cache能大大提高cpu的访问速率
cache的设计
不能太大,也不能太小
太大的话,因为程序在查看数据的时候需要把cache走一遍,如果cache太大,
那么走一遍的时间就太长,就不能达到提升速率的效果
如果太小的话,存放在内存的块数就少了,命中率降低,访问内存的次数就增加了,cpu性能同样降低了
块大小
Cache与memory的的数据交换单位
由小变大时, 由局部性原理,命中增加
变得更大时, 新近取得数据被用到的可能性,小于那些必须被移出Cache的数据再次用到的可能性,命中率大大降低
DMA
大量移动数据
cpu性能快,外设的速度比较慢,cpu就要一直等待外设
因此诞生了DMA
以前没有DMA,就把数据从内存经过cpu到外设
有了DMA的话,cpu把指令告诉DMA,把内存从某个地址开始,多大的数据写给外设,这样的话DMA就去做了,cpu就不用做了,DMA就把内存中取出数据,然后再到外设,这种机制就是DMA机制,cpu就解放了,做更重要的事,因此这种内存拷贝、数据大量移动拷贝的时候就用DMA来解放cpu,记住cpu只在开始于结束时参与
开始时:
![](http://images.cnitblog.com/blog/698434/201412/040235049362194.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(4).png)
结束时:
中断处理例程
![](http://images.cnitblog.com/blog/698434/201412/040235410142738.png)
欢迎交流
新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
chinaUnix: http://blog.chinaunix.net/uid/30049997.html 知乎:http://www.zhihu.com/people/zhang-bing-hua
![](http://images.cnitblog.com/blog/698434/201412/040232587172188.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(1).png)
高速缓冲存储器 cache
![](http://images.cnitblog.com/blog/698434/201412/040233570303874.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(2).png)
读cache操作
![](http://images.cnitblog.com/blog/698434/201412/040234289512622.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(3).png)
cache如果包含数据就直接从cache中读出来,因为cache速度要比内存快
如果没有包含的话,就从内存中找,找到后就放到cache中去,以后再读的话就直接从cache读了,下次访问很多次的时候就会快很多,相当于提高了命中率,cpu的访问速度就大大提高了
cache能大大提高cpu的访问速率
cache的设计
不能太大,也不能太小
太大的话,因为程序在查看数据的时候需要把cache走一遍,如果cache太大,
那么走一遍的时间就太长,就不能达到提升速率的效果
如果太小的话,存放在内存的块数就少了,命中率降低,访问内存的次数就增加了,cpu性能同样降低了
块大小
Cache与memory的的数据交换单位
由小变大时, 由局部性原理,命中增加
变得更大时, 新近取得数据被用到的可能性,小于那些必须被移出Cache的数据再次用到的可能性,命中率大大降低
DMA
大量移动数据
cpu性能快,外设的速度比较慢,cpu就要一直等待外设
因此诞生了DMA
以前没有DMA,就把数据从内存经过cpu到外设
有了DMA的话,cpu把指令告诉DMA,把内存从某个地址开始,多大的数据写给外设,这样的话DMA就去做了,cpu就不用做了,DMA就把内存中取出数据,然后再到外设,这种机制就是DMA机制,cpu就解放了,做更重要的事,因此这种内存拷贝、数据大量移动拷贝的时候就用DMA来解放cpu,记住cpu只在开始于结束时参与
开始时:
![](http://images.cnitblog.com/blog/698434/201412/040235049362194.png)
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(4).png)
结束时:
中断处理例程
![](http://images.cnitblog.com/blog/698434/201412/040235410142738.png)
欢迎交流
新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
chinaUnix: http://blog.chinaunix.net/uid/30049997.html 知乎:http://www.zhihu.com/people/zhang-bing-hua
![](file:///I:/Users/ZHANGB~1/AppData/Local/Temp/enhtmlclip/Image(5).png)
相关文章推荐
- 基于gridview的三层结构的代码演示 (二 ) 三层架构的实例演示 (原创,如需转载请联系作者)
- 大型网站架构:Flickr网站体系结构分析(转)
- 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写
- App工程结构搭建:几种常见Android代码架构分析
- F2FS文件系统架构与原理分析(四)——F2FS的目录结构与目录哈希
- Linux中数据结构的分析——原创 转载请通知
- 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
- 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写
- 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写
- App工程结构搭建:几种常见Android代码架构分析
- 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 分类: 浅谈PCI 2013-07-22 16:27 329人阅读 评论(0) 收藏
- [原创]龙之谷服务器构架结构设计实现分析
- 【原创】artTemplate1.4.0源码分析之artTemplate结构图
- 基于gridview的三层结构的代码演示 (一) 三层架构的实例演示(原创 如需转载请联系作者)
- 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写 分类: 浅谈PCI 2013-07-22 16:27 411人阅读 评论(0) 收藏
- ARMCE原创——Windows embedded CE 中断结构分析
- live555 livemedia库结构分析[原创]
- android audio 架构分析(2) AudioPolicyService 的结构
- 分析WordPress主题结构是如何架构的?
- [android]App工程结构搭建:几种常见Android代码架构分析