存储器空间或者桌面堆_深入理解计算机系统之存储器层次结构

1ac055904d1208b2bfc0a6d44eb0ea5e.png

我的计算机模型是这样的:

6f53264347f53f21a9e9a50253b82b61.png

CPU执行指令,内存犹如一个巨大的字节数组,存储着指令和数据,硬盘保存着各种程序与程序用到的数据。I/O完成输入输出的功能。在本文中我们抛开I/O,谈一谈关于CPU,内存,硬盘的故事。

CPU包含了许多寄存器,用于保存临时使用的数据和指令。这是CPU可以访问到的最快的存储器设备,CPU可以在一个时钟周期内访问到它们。如果程序员理解了寄存器和内存是如何合作完成任务的,也就明白了冯诺依曼计算机的本质。举例来说:

int fun(void)
{
      int a;
      int b;
      int c;
      c=a+b;
      return c;
}

汇编代码

fun:
    pushl %ebp 
    movl %ebp,%esp
    subl $16,%esp
    movl -8(%ebp),%eax
    addl -12(%ebp),%eax
    movl %eax,-4(%ebp)
    leave
    ret

变量a占用-8(%ebp),变量b占用-12(%ebp),变量c占用-4(%ebp)。

movl -8(%ebp),%eax

将变量b的值放入寄存器%eax中。

addl -12(%ebp),%eax

将%eax的值加上变量a的值。

movl %eax,-4(%ebp)

完成c=a+b的功能。

可以看出,程序将内存的值放入寄存器,进行运算,完成计算任务。其中,寄存器与内存亲密接触,完成计算任务。

作为存储设备CPU寄存器之下并不是内存,而是多级高速缓存。最多可以分为三级:L1高速缓存,L2高速缓存,L3高速缓存。它们是基于SRAM技术构成的高速缓存存储器,CPU可以在几个时钟周期中访问它们。L1快于L2,L2快于L3。高速缓存是不可编程的,是CPU设计者用硬件构造出来的。它们按照固定的算法完成缓存内存数据的任务。所以我在计算机抽象模型中忽略了它。它的基本原理是:根据要缓存的数据的地址读出一系列与该地址相同或是临近的的数据缓存起来。当再次访问或访问临近的数据时,缓存命中,CPU直接读取数据。如果读取其他地址,缓存不命中,CPU从下一层存储器中读取并缓存数据,如果下一层也没有就用下下一层,直到读取到数据。

为什么要用高速缓存存储器?因为程序有局部性原理。

局部性通常分为两种不同的形式:时间局部性和空间局部性。在一个具有良好的时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来被多次引用。在一个具有良好的空间局部性的程序中,如果一个存储器位置被应用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。所以如果数据或者指令被缓存高速缓存器,那么程序运行的速度将加快许多倍。

在说道内存,内存由动态RAM构成。内存可以看成是一个巨大的字节数组,根据地址可以访问到内存字节。而内存的每一个位都是由一个电容和一个访问晶体管组成。但它很容易漏电,使得DRAM单元在10-100毫秒时间内失去电荷。所以存储器必须周期性的通过读出然后重新刷新存储器的每个位。DRAM芯片包装在存储器模块中,他是插到主板的扩展槽中的。常见的包装包括168个引脚的双列直插存储器模块,它以64位为块传送数据到存储器控制器和从存储器控制器传出数据。还包括72个引脚的单列直插式存储器模块,它以32位为块传送数据,增强型DRM有:快页模型DRAM,扩展数据输出DRAM,同步DRAM,双倍速率同步DRAM,视频RAM。

内存之下是硬盘。如果程序需要的数据是存储在CPU寄存器的,那么1个周期便能访问到它们。如果存储在高速缓存中,需要1-30个周期。如果存储在主存中需要50-300个周期。而如果存储在磁盘中,需要大约几千万个周期。是的,磁盘就是这么慢。所以linux内核中构建了一层高速缓存器。使用内存来缓存磁盘的内容。内核以4KB为一个块,使用散列表的方式根据磁盘的块号散列在内存中。

磁盘由盘片构成,每个盘片由两面或称为表面,表面覆盖着磁性记录材料。磁盘通常包含一个或者多个这样的盘片,并封装在一个密封的容器内。

磁盘表面由一组称为磁道的同心圆组成。每个磁盘被划分为一组扇区。所有盘片表面上到主轴中心的距离相等的磁道称为柱面。

固态硬盘是一种基于闪存的存储技术,在某些情况下是传统旋转磁盘的极有吸引力的替代品。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值