存储和服务器的三大件
从底层原理实现角度来看,存储和服务器的物理硬件本质都是三大件:CPU、内存和I/O的组合运用。
从电脑的角度看,服务器也是电脑,只是比普通的电脑更复杂更先进而已。服务器的诞生,是为了处理企业级的应用,使工作协同性变得更高。所以服务器和家用的电脑相比,最重要的一点就是要稳定、安全、少出错。服务器上面运行的应用程序、数据库对于企业来说是非常重要的,所以服务器级别的内存、硬盘、网卡、CPU等等的性能和稳定性,理论上来说会比普通电脑要高出一些。所以服务器CPU、内存、硬盘、网卡等配件均进行了技术升级,使之更加安全稳定。但是其针对CPU、内存及I/O设备的组合运用并无区别。在高端的服务器中,由于支持多路CPU、内存及I/O设备,因此其组合运用方式会更加复杂。
在系统总线组合阶段,通过系统总线将CPU芯片、内存和I/O设备连接起来,实现相互间的通讯和协同工作,实现了最原始的组合运用,也实现了最基础的计算功能。
服务器或者电脑从最开始的架构设计之初,针对CPU、内存及I/O设备的组合运用是最粗暴简单的,其通过一条系统总线将CPU、内存及I/O设备连接起来,CPU、内存及I/O设备的通讯必须通过系统总线进行传输和同步,由于设备之间的差异性,在这个简单的数字系统中,为了确保内部所有硬件单元能够协同快速工作,CPU架构工程师们就设计了一套时钟信号与系统同步进行操作,由CPU来决定其他设备工作在什么频率上,保证所有的设备都在同步的模式下面工作。在这样的模式下,所有的设备都会被限定在一个被所有设备所能承受的通用时钟频率上面,即产生所谓的"互锁"效应,木桶原理告诉我们,这种情况下系统的整体性能会被最低频率的设备拉低。
下图显示了最开始的计算机系统的基本框图。它由CPU,内存(RAM)和许多I/O设备组成。所有这些都通过系统总线连接。CPU执行存储在内存中的指令。这些指令可以从内存或I/O设备中读取数据,并可以操作这些数据,以及将结果数据写入内存或I/O设备中。
这种体系结构的计算机第一次怎么启动,因为内存中并不存在启动代码。为了解决系统总线直连计算机的启动问题,最开始的解决方案是使用一个前面板(The front panel)来控制计算机的启动过程,之后才采用ROM方式来控制计算机的启动。
前面板架构设计图:
前面板的设计原理是,通过在一个金属面板上添加带有指示灯、拨动开关和按钮的设备,这些设备通过导线和总线相连接,然后使用一行灯来表示一个或多个硬件寄存器的内容,并允许在机器停止时直接读取内容。在计算机第一次启动时,通过前面板进行启动引导,通常需要执行一系列复杂的操作。首先操作员需要将具有包含一系列短引导指令的程序指令使用前面板的切换开关手动输入其中。第一步需要设置“地址”信息,并通过设置地址的开关将二进制形式的地址表示信息数据输入进去,前面板上会存在专门的二进制数字按钮,比如DEC PDP-8或MITS Altair 8800的二进制数字在前面板上分组为三个,每组灯或开关代表0到7之间的单个八进制数字。接下来,操作员将设置地址的“值”,通过“值”的开关然后输入用于该地址的值。然后操作员将设置引导程序的起始地址,并启动“RUN”开关开始执行程序。引导程序通常从打孔的纸带读取和加载程序,并最终将计算机运行起来。
前面板可以控制内存控制器、CPU寄存器合其他I/O设备的寄存器地址,用户可以设置要检查或更改的寄存器地址,将新数据写入寄存器位置,并且可复位、启动和停止CPU。大多数前面板提供了一种读取和写入单个CPU寄存器的方法,在通过前面板输入指令的情况下,CPU会一次一个指令地逐步执行程序。
下图展示了System/360 Model 91的前面板实物图(图片来自维基百科)
在20世纪50年代后期,计算机是一台相当庞大且昂贵的机器。它的成本在当时远远高于豪华轿车甚至是房子,而且一个面积庞大满是开关和灯的前面板也相对地增加了计算机的成本。当计算机通电时,CPU尚未运行,操作员可以使用前面板在没有CPU帮助的情况下读取和写入内存的内容。当合适的程序存储到内存中,操作员将前面板开关设置到RUN位置时,CPU就会开始运行。1975年之前制造的大多数计算机都有这样的前面板。
每次计算机上电时,操作员都必须将引导程序输入内存,该内存将从I/O设备(例如读卡器,磁带或磁盘)读取一些数据。加载的数据形成一个小程序,然后加载更多数据,直到加载整个操作系统或应用程序。根据当时的电子计算机架构和I/O设备的类型,这些指令大概有数十条指令数的规模,每次机器上电时都必须逐位输入。
为了解决繁琐的计算机系统启动问题,内存需要使用非易失性存储介质,保存位于内存中的启动代码数据,确保关机状态下启动指令仍然存储在内存中。当CPU启动时,计算机就开始从内存中明确定义的位置读取并执行指令。从20世纪50年代后期到20世纪70年代早期,大多数计算机使用核心存储器来存储内存数据,这种存储是非易失性的。即当我们启动计算机时,内存仍然包含上次使用机器时存储的内容。
系统启动之后,为了更进一步解决前面板后续的I/O设备初始化和操作繁琐的问题,有些计算机设计们向CPU添加了逻辑,这样CPU就可以自己从I/O设备中加载启动代码,而不需要内存中的任何指令。操作员只需按下正确的按钮,即可从正确的设备中选择自动启动加载代码和运行I/O设备。
当计算机的硬件成本因为科技的进步和工艺制作的提升而变得更加便宜时,费用昂贵、面积庞大且明显不友好的前面板就成为了急需解决的问题,此外,内存的保存特性使得内存的容量无法满足系统的需求,扩充容量就会造成成本居高不下。因此架构师们就设计出了ROM(只读存储器)以及CRT(显像管)用于替代前面板的功能,并使用大容量的内存元器件,将计算机运行所必需的程序放到ROM中。在20世纪70年代末和80年代初,除了一些早期微型计算机仍然有一个前面板外,绝大多数微型计算机都已经更换到ROM和CRT。
ROM的作用是:当计算机通电时,CPU开始从明确定义的地址执行指令,该地址指向只读存储器(ROM),如下图所示。ROM中的程序控制计算机启动的功能。
ROM内部的数据是在ROM的制造工序中,在工厂里用特殊的方法烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的数据是否正确,不能再作任何修改。如果发现数据有错误,则只有舍弃不用,重新订做一份。ROM解决了前面板启动电子计算机繁琐的问题,使得计算机的启动变得便捷许多,但是,这样也存在着弊端。由于ROM定义了计算机内部元件的寄存器地址及启动地址信息等内容,计算机的功能就不在仅由其硬件决定,而且由存储在其ROM中的程序决定。简单来说就是ROM限制了计算机的特定规格。
ROM中软件的范围在计算机系统之间差异很大。在某些机器中,ROM只是将软盘的第一个扇区加载到内存中,然后加载CPU跳转到内存中的这段程序去运行。刚加载的程序会将操作系统从软盘加载到内存。如果软盘中没有合适的系统盘,计算机就完全无法启动了,会提示找不到启动文件。另一方面,如果ROM可将硬盘的启动扇区加载到内存中并从这段程序运行,从而加载硬盘上的操作系统。在许多计算机中,ROM中的程序确定了计算机可以做什么以及以以什么方式做事。一般来说内存大小通常非常有限,如果将重要程序(或操作系统)存储在ROM中意味着可以为应用程序或数据提供更多内存空间,此外也可以加速操作系统的启动速度。基于这样的设计和理念,有些计算机就在ROM中嵌入了非常有限的固件,这些计算机在ROM上有大量程序,包括操作系统,这样的计算机将操作系统及功能实现均烧录在了ROM中。
从今天计算机的组件来看,组成计算机的每个组件均包含了芯片、内存及I/O这三部分核心的基础元件。其中大部分模块或组件的操作系统均烧录在了组件自身的ROM中,ROM有些组件独立,有些组件和内存及芯片等完全集成在同一个芯片模组中。