What every programmer should know about memory,Part 1
这篇文章 What every programmer should know about memory, Part 1 是出自lwn.net 作者 Ulrich Drepper 总线结构 常见的商用计算机结构: 北桥南桥结构: CPU通过FSB连接到北桥, 北桥包含内存控制器,通过不同内存控制器链接不同的RAM,如DRAM,SDRAM, Rambus,南桥主要连接I/O设备,支持不同总线接口如:PCI,SATA,USB。 特点: cpu到cpu之间数据要过北桥 所有设备与RAM需要通过北桥 RAM仅一个端口 通过南桥链接设备与cpu通讯需要经过北桥 瓶颈; 北桥处理能力成为瓶颈。 设备与内存: 北桥与内存 早些年设备间通讯需要通过cpu, 为了减少CPU压力,出现DMA,虽然减少cpu压力,但是占用北桥带宽。 为了增强北桥内存访问能力,有些系统支持北桥连接外部更多的内存控制器: 北桥连接外部内存控制器南北桥结构 特点: 增强北桥处理能力 瓶颈: 内部带宽 北桥成为中心关键节点,内存控制器接入越多 另外一种解决方法是将外部控制器集成到CPU中( NUMA) 将内存控制器集成到cpu中,不同cpu连接不同内存, 没有北桥瓶颈,但当访问链接到其他CPU的内存时使得访问变得复杂。 NUMA - Non-Uniform Memory Architecture RAM类型 Static RAM 需要多个晶体管,文章中提到有6个或4个的。 单元状态稳定,不需要刷新周期。 断电后数据丢失 Dynamic RAM 需要一个晶体管和一个电容 需要刷新不断刷新 DRAM 访问 如果要访问一个4G地址, 4GB的RAM需要2^32个地址线, 使用二进制编码,N 个地址线可以完成 2_N_ 个地址,使用N个地址线,除了电路设计复杂之外需要大量的芯片,DRAM设计时使用矩阵方式,将一维的操作转化为二维操作。使用行地址选择器和列地址选择器方式。简化了电路的设计。仅需要很少地址线,为了能区分行或列需要额外的一些lines。 总结: 处于成本考虑内存大多使用DRAM 需要单独选择存储单元才能使用 由于性价比考虑选择DRAM地址线设计使用矩阵方式。 在读取或写入操作的可用之前由于电器特性需要一段时间 ...