计算机硬盘结构+管理与优化简写

在挑选硬盘的时候,除了接口之外很多人关心的就是缓存容量。有朋友应该已经发现,怎么现在的硬盘都不显示缓存容量了?这里面会有奸商的阴谋诡计吗?大家一定会好奇,硬盘缓存的作用是什么呢?读完本文你将会有一个全新的认识!
最近几年购买的硬盘,不管是机械硬盘还是固态硬盘,在新版检测软件中都是查不到缓存容量的,下图为CrystalDiskInfo检测2TB机械硬盘,HDTune中干脆将它的缓存标注为n/a(不存在)。这是ATA标准的一个局限,当时规划时只预留到32MB的代码,而现在硬盘的容量全都超过了32MB,无法正确识别。
机械硬盘的缓存:运气爆发可以提升读取
通常来说,机械硬盘的读取和写入速度基本一样。但如果在ATTO测验中运用较小的测验区块(64K),你会发现读取的速度显著比写入更快,甚至会发生读取400MB/s以上现象:正常是不可能有这么快的。
在机械硬盘中,缓存主要发挥了加速读取的作用。如果一个数据刚刚被读取过,将临近它位置的数据保留在DRAM缓存中,就有机会被下一次读取命中——直接从DRAM缓存读出的速度远比从机械盘片读取快的多。
缓存命中意味着性能大幅提升,这就是机械硬盘缓存的主要作用。理论上大缓存的确有助于提升机械硬盘的读取性能,但是提升幅度是非常有限的:它对于最重要的随机读取速度没有帮助。
大缓存不一定意味着高性能,当前很多采用128M以上大缓存规划的机械硬盘采用了SMR叠瓦磁记录技术,增大缓存容量是为了降低SMR带来的性能衰减幅度。
世界上第一台计算机是1946年在美国诞生的ENIAC,当时CPU还是使用笨重的电子管,后面的故事依次是贝尔实验室发明了晶体管,TI的工程师又发明了集成晶体管,IBM研发成功首款使用集成电路的计算机,IBM360, 后面 就是仙童八叛徒与intel,AMD的故事了。这段很著名的IT故事,我们不再累述了。伴随着世界上第一款商用处理器:Intel4004的出现,波澜壮阔的摩尔定律开始了。
当时负责IBM 360 操作系统开发的那个项目经理,根据该项目经验, 写了一本经典著作《人月神话》,也有其他参与者根据该项目经验,立传出书了,所以当时那批人都是大牛。
摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。
半导体行业开始腾飞了。CPU上集成的晶体管数量越来越多。 intel i9的制程工艺已经到了14nm。所以CPU的执行速度也越来越快。
当然,摩尔定律也快到尽头了,根据量子力学,2nm是理论极限值。线宽不能再细了,低于2nm,隧穿效应就会产生干扰。
闲扯了一段CPU的发展历史,想说明的是,现在的CPU集成度越来越高,速度也越来越快。每秒钟能执行的指令也越来越多。(如果不知道指令,汇编之类的啥意思,看一下我的的另一篇文章关于跨平台的一些认识,否则下面的内容看着也有难度)。
CPU的作用就是去执行指令(当然,也包括输出结果等,本文只讨论和存储器相关,所以不扯其他的),并且尽可能的以它的极限最高速度去执行指令,至于具体的执行过程,做过单片机或者学过微机原理的应该比较清楚。就是伴随着时钟周期滴滴答答的节奏,CPU踏着拍子来执行指令。
至于CPU的指令集,那就是Intel的架构师们的工作,总之,CPU认识这些指令,并且能执行运算。(别忘记了冯诺依曼体系结构那张图)。对于这些指令,但是CPU采取了各种措施来加快执行过程(也可以理解为加快它的计算速度)。比如有以下几种常见的措施:
流水线(pipeline)技术:有电子厂打工经历的读者肯定很熟悉这个流水线模式。CPU的流水线工作方式和工业生产上的流水线概念一样。就是将一个指令的执行过程也分解为多个步骤,CPU中的每个电路只执行其中一个步骤,这样前赴后继加快执行速度。CPU中多个不同功能的电路单元组成一条指令处理流水线,然后将一条指令分成几个步骤后再由这些电路单元分别执行。在执行过程中,指令源源不断的送往CPU。让每个电路单元都不闲着,这样就大大的加快了执行速度。
超线程(Hyper-Threading)技术:对于超线程,百度百科的解释我都没看懂,但是大概原理就是这样的。CPU在进行线程切换的时候,要执行 切换各种寄存器状态等一些操作。把第一个线程的各种寄存器状态写回缓存中保存,然后把第二个线程的相关内容送到各种寄存器上。该过程必不可少,否则待会再将第一个线程切换回来时,不知道该线程的各个状态, 那还怎么接着继续执行呢?也正因为如此,所以这个过程比较慢,大概需要几万个时钟周期。所以后来做了这样的设计,把每个寄存器等都多做一个,就是多做一组寄存器(也包括一些其他相关电路等),,CPU在执行A线程时,使用的第一组寄存器,切换到B线程,直接使用第二组寄存器,然后再切换A线程时,再使用第一组寄存器。,CPU就不用再傻傻的等着寄存器值的切换,线程切换只需要几个时钟周期就够了。对于普通的执行多任务的计算机,CPU线程切换是个非常频繁的操作,所以使用该技术就会节省大量的时钟周期。也就是相当于加快了CPU的执行速度。这就是CPU宣传参数中所谓的四核八线程的由来,其实就是超线程技术。(每个核多做一组寄存器等电路固然会占用宝贵的空间,但是它带来的优点远远大于缺点)。
超标量技术:CPU可以在每个时钟周期内执行多个操作,可以实行指令的并行运算。
乱序执行: 我们认为程序都是顺序执行的。但是在CPU层面上,指令的执行顺序并不一定与它们在机器级程序(汇编)中的顺序一样。比如 a = b+c; d++;这两个语句 不按照顺序执行也不会影响最终结果。当然这只是在CPU执行指令的层面,在程序员们看来,依旧认为程序是顺序执行的。
磁盘低速的原因是因为它一种机械装置,在磁盘中有一个或多个金属盘片,它们以5400,7200或10800rpm(RPM =revolutions per minute 每分钟多少转 )的速度旋转。从边缘开始有一个机械臂悬在盘面上,这类似于老式黑胶唱片机上的拾音臂。信息卸载磁盘上的一些列的同心圆上,是一连串的2进制位(称为bit位),为了统计方法,8个bit称为一个字节bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我们平时所说的磁盘容量最终指的就是磁盘能写多少个2进制位。
# TB,PB, Eb, Zb, YB 1B= 8bit 1KB=2(10)B=1024B; 括号中的数字为2的指数(即多少次方) 1MB=2(10)KB=1024KB=2(20)B; 1GB=2(10)MB=1024MB=2(30)B。 1TB=2(10) GB=1024GB=2(40)B 1PB=2(10) TB=1024TB=2(50)B 1EB=2(10) PB=1024PB=2(60)B 1ZB=2(10) EB=1024EB=2(70)B 1YB=2(10) ZB=1024ZB=2(80)B 1Byte相当於一个英文字母 Kilobyte(KB)=1024B相当於一则短篇故事的内容。 Megabyte(MB)=l024KB相当於一则短篇小说的文字内容。 Gigabyte(GB)=1024MB相当於贝多芬第五乐章交响曲的乐谱内容。 Terabyte(TB)=1024GB相当於一家大型医院中所有的X光图片资讯量。 Petabyte(PB)=l024TB相当於50%的全美学术研究图书馆藏书资讯内容。 Exabyte (EB)=1024PB;5EB相当於至今全世界人类所讲过的话语。 Zettabyte(ZB)=1024EB如同全世界海滩上的沙子数量总和。 Yottabyte(YB)=1024ZB相当於7000位人类体内的微细胞总和。
每个磁头可以读取一段换新区域,称为磁道.
把一个戈丁手臂位置上所以的磁道合起来,组成一个柱面
每个磁道划成若干扇区,扇区典型的值是512字节
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
平均寻道时间
机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置
平均延迟时间
机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间
机械硬盘工作解剖
虚拟内存:
许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存,在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)
PS:从一个程序切换到另外一个程序,成为上下文切换(context switch),缓存和MMU的出现提升了系统的性能,尤其是上下文切换
4.4 磁带
在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)
4.5 I/O设备
cpu和存储器并不是操作系统唯一需要管理的资源,I/O设备也是非常重要的一环。
见四中的图,I/O设备一般包括两个部分:设备控制器和设备本身。
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。
控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口
设备本身:有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。
4.5 输入输出设备
#1、输入设备input
输入设备是计算接收外界输入数据的工具,如键盘、鼠标,相当于人的眼睛或耳朵。
输入设备的任务是把人们编好的程序和原始数据送到计算机中去,并且将他们转换成计算机内存所能识别和接受的信息方式。
安输入信息的形态可分为字符(包括汉字)输入、图形输入、图像输入及语言输入等。目前,常见的输入设备有:键盘、鼠标、扫
描仪等。辅助存储器(磁盘、磁带)也可以看作输入设备。另外,自动控制和检测系统中使用的模数(A/D)转换装置也是一种输入设备。
#2、输出设备output
输出设备是计算机向外输出数据的工具,如显示器、打印机,相当于人说的话,写出的文章。
输出设备的任务是将计算机的处理结果以人或其他设备所能接受的形式送出计算机。
目前最常用的输出设备是打印机和显示器。辅助存储器也可以看做输出设备。另外,数模(D/A)转换装置也是一种输出设备。
ps:存储器如内存、磁盘等既是输入设备又是输出设备,统称为IO设备

浙公网安备 33010602011771号