31 December 2015

注:本文多数内容来自对What Every Programmer Should Know About Memory一文的理解和翻译。但这不是一篇严格的译文,只摘取我读了有心得的部分,并尽量加上自己的理解和自己收集的资料。

###开篇 早期计算机系统的架构要比现在的简单多了,CPU、内存、外存、网卡等几个重要部件一组合就成了鼎鼎大名的计算机。每个部件自身结构相对简单,各部件的工作能力也旗鼓相当,它们按照冯诺依曼体系结构协调工作在一起,十分协调融洽。说是早期,其实计算机技术的发展日新月异,也就是几十年前吧。

计算机系统的几大部件都凝聚了工程师的心血,并有很多优秀的工程师一直工作在优化这些部件上。很快,各个部件的工作能力就出现了差距,其中尤以内存和外存为甚,受限于价格的因素,内存外存的工作能力被CPU远远的落在了后面。这样一来,计算及系统就存在短板效应,CPU空有飞速的计算速度,却不能带动整个计算机系统的工作能力。

外存瓶颈的解决,多是通过软件技术来做缓存。

  1. 操作系统实现了针对外存的缓存,保存经常读写的数据在内存中;
  2. 存储系统也被内置到外存设备中,比如磁盘控制器中,这样即便没有操作系统缓存存在的情况下,也能提升整体性能。

遗憾的是,内存存取瓶颈的解决,要比外存瓶颈的解决难得多,并且几乎所有的解决方案,都需要改动硬件。这些为改善内存瓶颈而对硬件的改动,主要包含以下几种:

  1. 内存的硬件结构设计(体现在速度和并发上);
  2. 内存控制器的设计;
  3. CPU缓存;
  4. 设备直接内存访问(DMA)。

###后续内容预告



blog comments powered by Disqus