硬盘的原理学习
了解硬盘的原理对于编程,做数据优化(比如磁盘i/0瓶颈,机械硬盘慢的原因)都是有好处的。
以前总觉得不太需要了解这些,但是越是做到后面,发现,了解计算机各个组件的原理,其实才能理解更加深入的知识,否则永远只是一个敲代码的工人。
<数据库系统的实现>里面之所以开辟一个专门的章节讲解磁盘的原理,是理解到磁盘在数据库优化中的重要地位。
总结知识点(包含我的疑问,以后补充):
盘片。一个盘片有两个盘面:上盘面和下盘面。
每个盘面都要配置一个磁头来读取里面的数据。
我疑问在于:
磁盘的控制器竟然能够做到这么精准,能够识别出盘面的某个点已经旋转到我这里来了,马上读取数据。
是不是这样子,盘片就的主轴就是负责旋转就可以了,不停的旋转,磁盘控制器控制磁头读取盘片上的数据。
我表示非常感叹,吃惊。竟然能够这么精准得做到控制。
一个1tb的和500g的磁盘,是盘片数量的增加,还是盘片体积增加呢。
我看到3.5寸的磁盘,以前也是350g的。而2.5寸的磁盘,能够做到500g。这样说明与体积无关。
那是如何计算硬盘的容量大小的呢。
先看有多少个盘面。假设是4个盘面(我的笔记本硬盘坏了,我拆开看)
然后计算每个盘面的容量大小,那么就把4个盘面的大小加起来。
要想知道一个盘面的容量大小。先求出这个盘面有多少个磁道(即同心园)。一般是65536的磁道的(2的16次方个)。
每个磁道里面存储数据的地方实际上是扇区。是把磁道划分为相同大小空间的扇区。扇区之间有一点点间隙,这个间隙没有被磁化为0和1标识。
一个磁道,大概含有256个扇区。
一个扇区的大小是4096个字节(大部分磁盘使用512字节的扇区)
于是大小就出来了:
4*(65536*256*4096)=274877906944字节。
262144M。转换成g单位,就是256g?
奇怪了,那么笔记本的磁盘500g看来是错误了。是哪里错误了,磁道数错误了吗?
硬盘控制器其实也有一个缓存的,网上是这么介绍:
缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。
看到一篇参考文章:http://blog.chinaunix.net/uid-27575921-id-3480555.html
totalstorge=读写头数量(其实可以认为是磁盘碟数量)*每个读写头负责的磁柱数量*每个磁柱所含的磁区数量*512Bytes(一个磁区的容量)
《现代操作系统》中也提到过:
磁盘格式化后会比没有格式化之前,容量减少20%。减少的量通常取决于前导码、扇区之间的间隙和ecc大小、保留的备用扇区的数目。
现在也明白了。为什么16g的u盘,按照软件识别的1kb等于1024个字节的计算办法,不是15.2g。而是14.5g,其实就是因为格式化后,实际上可用容量没有那么15.2g的。
这就好像内存,实际上有4g,但是放到32位的操作系统来识别,可用的只能是3g。
影响磁盘读取数据的三个因素
1、寻道时间:让磁头抵达哪个磁道去
2、旋转延迟:到达了磁道后,让磁头定位到这个磁道的某个扇区上读取数据。因为数据最终存放在扇区上,要旋转才能抵达扇区。旋转的延迟时间就是这个。
2、传输数据时间:数据读到后,传到内存中,需要的时间。
占据主导的是寻道时间。其次才是旋转延迟。传输数据其实是很快的。
有多少个盘片就需要多少个磁头。
关于磁盘控制器的缓存与操作系统的缓存磁盘块机制:
磁盘控制器是与操作系统独立的。它有自己的高速缓存,一般4m。会划分成两部分空间。一部分用来缓存读的数据,一部分缓存写的数据。
它的缓存与操作系统(实际上是文件系统)的缓存不同点:
控制器缓存周围扇区的数据,还没读过的数据。
操作系统缓存已经读过的磁盘块。