CPU读数据的过程:
当系统的CPU需要一个数据的时候(从内存取值存入寄存器或者直接取值),它怎么做呢?它会产生一个该数据的内存地址,通过MMU(内存管理单元,翻译这个地址到实际的地址)之后,实现通过CPU的内部通信,如果在MMU的时候,发现对应的物理页面不存在,则会立即调用陷阱(trap),CPU产生缺页中断,待内存重新读进页面后再查询;而如果MMU得到的结果是存在的,CPU就会看看缓存中是否有对应的set中有相应的tag。如果有的话,就是缓存命中。否则,miss。如果缓存命中的话,则直接可以通过CPU内部的高速数据传输到达CPU进行运算。否则,通过总线到达主存。
CPU是不会直接从硬盘读入数据的。它的来源主要是:内存和缓存。不过,在它的角度,它只知道内存,并不知道缓存的存在。硬盘主要是在缺页中断的时候使用。
说说DRAM:
DRAM是操作系统中主要的一部分,由于速度快的内存造价过于昂贵,所以对内存分为了不同的等级。最快的寄存器,CPU内部,读取无延时,1ns左右,32位的CPU的寄存器大小一般是32*32 bits。其次是高级缓存,L1集成在CPU内部,同样无延时,一般大小是16KB。在Intel结构中,L2也是位于主板上,通过高级缓存总线与CPU相连,一般命中所需时间是两个时钟周期,大约是2ns。再次的是主存(DRAM),寻址、取数据时间约10ns。再次的是磁盘,约需10ms。
DRAM之所以称之为主存,是因为它是速度和容量相妥协的一个产物。目前,一般的主存大小已为8GB或者16GB。但是,如帕金森定律所述,不管主存有多大,程序总能把它填满。所以,计算机科学家发明了两种方法解决主存无法容纳下所有程序需要的烦恼。