计算机五大组件,已经介绍完了输入输出设备。从前面几篇中我们了解到,计算任务实际上就是控制单元控制执行单元根据输入和存储器中内容计算得到输出结果,控制单元和执行单元比较复杂,运算时也需要使用到存储器,所以本篇先展开存储器相关知识。
1. RAM原理
如果你还能记得,第一篇电学知识中我们提到过S-R触发器(Flip Flop,简称FF)。
总的来讲,触发器的工作状态依赖于两个开关S和R,闭合一个断开另一个,总会得到两个相反的输出Q和Q',而如果两个开关都断开,那么就保持住Q和Q’最后处于什么状态。完整触发器真值表如下:
通过使用S-R触发器或其类似实现版本,可以实现1个bit的存储。而通过组合使用S-R触发器,就可以达到多个bit的存储,也就是RAM的由来,而其组成部分中的每个触发器则被称为存储单元。
内存单元的主要职责是保存存储在其中的数据直到下一次设置或重置操作的出现,现今广泛使用的RAM主要有静态RAM(Static RAM)和动态RAM(Dynamic RAM)两种。
1.1 SRAM
SRAM直接使用6个晶体管内存单元的状态来存储1 bit数据,造价相比DRAM更贵,但同时带来的好处是比DRAM拥有更快的存取速度和更低的能耗。通常用于CPU内部的Cache中。
1.2 DRAM
与SRAM的全晶体管内存单元不同的是,DRAM搭配一个晶体管和一个电容器来保存1 bit数据。其中电容器负责存储,晶体管负责控制存取操作。
同样的,第一篇中捎带提到电容器原理,从中我们知道电容器由于会对空气放电的因素,内部电势差会逐渐衰减。也就是说,存储其中的1 bit值,如果放任不管,不知道哪次去读取时,就会从1变成0了,这就无法实现存储的功能。为了随时都能够争取获取其中保存的值,就必须经常对电容就行充电,也称刷新。
根据能量守恒定律,充电需要额外供电,因此DRAM功耗肯定是要比SRAM大的。同时,由于需要经常刷新DRAM,存取速率也自然比不上SRAM。那还造DRAM干嘛?因为DRAM电路简单许多,可以拥有非常高的密度,单位体积的容量较高因此成本较低。总的来说就是因为便宜且速率可接受。这没什么不好,权衡利弊,够用就行。
2. RAM在哪里
前面讲的都是原理,具体到计算机组件应用之前,先放一张CPU使用到的存储器层级图,稍后将依次展开。
从图中我们可以看出,RAM属于临时存储区,它和CPU之间至少还间隔着几层Cache,RAM下方是永久性存储区域。永久性存储区域之前提到过如光盘、硬盘等,但这个Cache又是什么?
2.1 Cache
前面提到过Cache使用的是高大上的SRAM,拥有速度快、功耗低的特点。快自然是件好事,我们也知道囊中羞涩,无法给CPU配上几个GB的SRAM作为RAM使用,只能退而求其次,换上速度一般但容量客观的DRAM。不过有句话说得好,好钢用在刀刃上,假如说配个小容量如KB、MB级别的SRAM能够提高系统性能,还是值得尝试的。
随着硬件的发展,CPU频率早已达到GHz级别,而同期的DRAM还在以MHz作为单位,先不去追究为什么DRAM无法提升至GHz级别,就说使用时,这种量级的频率差异确实拖慢了整个计算机的性能。
之前略微提到,CPU工作时是有指令周期的,指令只是操作方法,要想操作有意义,毕竟还是要有操作对象才行的。操作对象来自哪里?无论是输入设备也好,光盘、硬盘也罢,终究是要加载到RAM中,排好了地址,才能加载。如果因为从内存中加载拖慢了CPU的运行,那么这么肆意地浪费CPU资源就太过奢侈了,毕竟CPU也不便宜啊。
但办法终归还是有的,于是乎在CPU和DRAM之间,插入了小存储的SRAM,毕竟CPU每个指令周期操作的对象也有限,无需特别大的空间。这样一来,CPU对接SRAM,速率得到了大大提升。不过现在还没完,快是快了,但我想更快,又不舍得花太多的钱,只好分配下预算,买一些顶级SRAM,再买一些稍慢一点的,再买一些慢的DRAM。反正CPU不和低一级的SRAM直接对接,也不会影响太大。
于是就有了多个Level的Cache,费劲心机,无非就是想在预算有限的条件下达到更快。
2.2 内存(RAM)
内存也称为主存,使用的是DRAM内存单元。由于前面介绍了SRAM和DRAM的主要区别等相关知识,这里就不再赘述。只要有一个概念,就是到RAM为止,都是掉电就丢失数据的。也就是说,RAM只在计算机运行过程中保存数据,运行完毕断电后,不负责保存任何信息。
然而为了实现计算机自动化执行任务,就必须先将任务存储在计算机内部而不是每次都需要输入设备输入,因此对于永久性存储设备的需求十分强烈。
2.3 永久性存储器
如前面CPU存储器层级图所示,永久性存储器主要分为如下几种。
2.3.1 ROM
首先讲ROM,ROM全称Read Only Memory,显而易见是一种只读存储器,其内容在出厂前就已经固化进去,后续只能读取而不能再次写入。虽然后面出现别的可擦写ROM如(EPROM),但终归写入的条件如紫外线要求较高。
ROM存储在一个非易失性芯片上,即使掉电后其中内容依旧可以保存。比较广泛的使用场景是计算机BIOS,关于BIOS的部分在后续讲解操作系统时会详细讲述。
2.3.2 Network Storage
所谓网络存储,就是通过网络接口进行存取。比如通常网吧会使用无盘计算机以节约成本,这时候启动系统的任务就交给了网线而不是磁盘。再比如,不考虑缓存文件的情况下,在线查看邮箱,并不会因为本机掉电而使得邮箱内邮件丢失。
虽然从本机看起来,不需要依赖存储磁盘,但终归网络另一端提供服务的计算机仍然需要磁盘来获取源数据,因此不管鸡生蛋还是蛋生鸡,至少能确定,必须有鸡才行,而在这里,鸡就是磁盘存储。
2.3.3 Hard Drive
终于到了永久性存储中的重头戏,硬盘存储。硬盘也称为磁盘,还是要来那么一句,如果你看了第一章的电学知识的话,那么你应该能理解为什么要通过磁来实现存储。
硬盘之所以成为磁盘是因为它通过改变盘片上磁性的分布来实现存储,读取时再根据盘片磁性分布转换成电信号,并进一步成为二进制值。这其中的原理无非是电磁感应,电生磁、磁生电。
讲到硬盘,总有关于柱面、扇区、磁头的内容,本篇也不能免俗。
如图所示,磁道是两个同心圆间区域,该区域等分成扇区,每个扇区字节数为512B。所有盘片上的同一磁道构成柱面,由于磁头为机械装置,如频繁寻址则开销较大,因此写入数据时,就以柱面为单位,尽量减少机械装置的移动频率。
到这一步,似乎所有正儿八经点的资料都能给出,但有一点,由于盘片是一张圆盘,也就是说,越往外的磁道在盘片转动单位时间内走过的路程越多,也就是说相对靠内的磁道,其寻址速度更快。因此通常将操作系统安装在靠外柱面可以适量提升其响应速度,对应到Windows也就是C盘位置通常最靠外,其他盘符依次往内。
由于磁头是机械装置,既降低了存取速度,又降低了稳定性,如果存取过程中由于震动盘片被磁头划伤,那数据就可能出现错误。假如出现错误的数据正好是操作系统,那么就只有自认倒霉了。
2.3.4 固态硬盘SSD
正是因为磁盘存在速度、稳定性等因素,和Cache一样,我们又制造出一种新的硬盘,成为固态硬盘。
对比下就可以发现,SSD使用的是集成电路而非机械装置来存取,所以可以达到更高的存取频率,也不用再为可能出现的震动操心。比较显著的缺点就是目前成本仍然较高、同时存在写入次数有限的问题。为了保证数据的安全性,通常SSD内部会使用多个内存单元来存储一个bit,即以冗余来换稳定。
3. 总结
写到这里,关于计算机五大组件之一的内存部分就基本介绍完毕。还是那句话,内存的存在是实现了计算机自动执行任务的关键。下一篇中,将去啃啃包含了控制单元和执行单元的真正的硬骨头CPU。