在计算机系统中,CPU只负责执行指令,它执行的指令是从内存中取出来的,而内存中的内容又是从硬盘中读取出来的。最古老的计算机简单说起来就是这样的,随着技术的不断发展,得益于一些新技术的实施,计算机的性能不断提高,这些新技术,有得着眼于减小内存的访问延迟,有的用于提高内存的吞吐量,而有一些则是采用了更快的内存技术,类似于这样的技术不胜枚举,每一方面都值得深究,都能花上一个月的时间去好好学习。最近学习了相关的知识,在这里做个记录,如果有误,还请指教。
以intel X86服务器架构中的memory系统来说,CPU发出的指令在访问数据的时候,最完整的情况包括如下几点:
- 分段机制。保护模式下,CPU希望访问的数据都是如下格式: ds:0xabcd,这里的ds还可能是其他的段选择子,而后面的0xabcd则是表示偏移量,可以是立即数,也可以是某个寄存器。这种格式的地址称作逻辑地址,特点是有段选择子。这里首先需要把“段基址:偏移量”这种格式的逻辑地址转换成线性地址。
- 分页机制。通过第一步的线性地址的转换,地址中已经没有段选择子了,这时候需要把线性地址转换成物理地址。
- SAD(system address decode)。在服务器中,经常会有多个CPU,少则2个,多则8个,每个CPU中都有memory controller,后面接的DIMM。希望访问的数据到底在哪根DIMM中呢?这根DIMM是在哪个CPU后面呢?从大到小一步一步来找,