Chinaunix首页 | 论坛 | 博客
  • 博客访问: 862472
  • 博文数量: 581
  • 博客积分: 7803
  • 博客等级: 少将
  • 技术积分: 3653
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-27 08:21
文章分类

全部博文(581)

文章存档

2013年(7)

2012年(414)

2011年(159)

2009年(1)

分类: LINUX

2011-07-07 22:41:22

硬盘的逻辑视图

对主机系统来说,一块硬盘是由n块连续的数据存储块(block)组成. 主机只知道存储块的数量和整个硬盘的容量(in bytes), 并不关心blocks在硬盘物理上的分布, 主机所有的读写操作都必须是在连续的blocks上进行. 对Windows系统来说,一个block=512bytes, 有些媒体播放设备(AV)定义一个block为4096bytes.
举例来说,如果主机想从block 1000 开始写4个blocks, 则第1000,1001,1002,1003 个block将被写入. 我们在后面详细讨论写某个block的具体操作.
硬盘逻辑结构

写操作
在进行写操作时,主机首先通过芯片组发出一条写命令(write command), 然后这个命令会送到硬盘执行.
1.主机发出命令( write 4 blocks from 1000).
2.硬盘接到命令后会要求主机发送数据.
3.数据传入硬盘的write buffer.
4.硬盘查找blocks所对应的物理sectors, 将buffer内的数据写入碟片.
5.硬盘将状态信息返回主机,指示写入操作完成.

读操作
1.主机发出命令(read 1 block from 1005)
2.硬盘操作block1005所对应的物理sector.
3.硬盘将对应sector上的数据读入read buffer.
4.硬盘请求主机传输read buffer内的数据. 这里有2种传输方式.
a)DMA: 直接将数据写入主存.
b)PIO: 通知CPU,由CPU来完成数据写入操作.
5.当传输完成时硬盘发出状态信息指示操作完成.

直接内存存取 (Direct Memory Access, DMA) 是一种内存访问技术。它允许电脑的外设直接读写系统内存,而不需绕道 CPU。在同等程度的CPU负担下,DMA是一种快速的数据传送方式.
程序化输入输出 (Programmed Input/Output,PIO) 指通过CPU来控制数据的存取, 所有的数据传输都由CPU直接控制. 相比DMA来说PIO的传输速率太慢.

buffer-to-buffer transfers
在读写时数据都要通过buffer来进行传输, 主要原因是由于主机的与硬盘执行命令的速度不匹配,主流的主机频率都在2 GHz左右,而硬盘内部控制器的频率只有100-200MHz, buffer提供一个临时存储空间直到数据量满足主机传输的要求. 另外一个好处是buffer可以存储最近经常使用的数据, 下次主机读取这些数据的时候就可以直接从buffer传输到主存,不需要再从media上读取,这样传输速度就会提高很多.

命令格式
命令的具体格式由不同的interface指定. 比如ATA和SCSI的命令格式就不相同. 总的来说,所有的命令都由以下几个部分组成: 干什么? 从哪里开始? 需要传输多少的长度?
示例: SCSI命令格式
SCSI命令格式
从Block8开始写2个Blocks的SCSI命令如下:
详细说明: 所有的值为16进制
0A 表示这是一个写入命令,长度是6bytes
00 00 08 是开始写入的LBA
02 表示写入2个block
00 是控制码,表示这个命令自己停止

什么是命令寄存器?
寄存器是实现特定功能的内存地址, 这些地址一般包含8位或16位数据. 不同的设备可能共享一个寄存器. 比如在ATA 硬盘中的寄存器在CPU执行写入操作的时候容纳ATA 命令,而在CPU执行读取操作的时候容纳状态信息.

数据是如何存放在硬盘上的
硬盘的数据都是存放在碟片(media)上的, 碟片是指在圆形盘片上的磁性涂层. 盘片一般分为很多层, 分为底层(substrate), 磁性层(magnetic layer), 保护层(protect layer)和润滑层(lubricating layer). 一般的3.5英寸硬盘的盘片直径为3英寸, 一个硬盘有一块或者多块盘片, 这些盘片中心固定在轴心马达(spindle motor)上面, 马达带动盘片以固定的速度旋转,通常的速度单位是RPM , round per minute), 一般为5400, 7200, 10,000, or 15,000 RPM.
硬盘内部结构

在硬盘中负责读写数据的是磁头(head), 一个盘面对应一个磁头. 磁头是悬浮在盘面上的. 写头(write head)有电流通过时将根据电流的方向产生方向不同的磁通量, 而磁头下方的磁性层的磁力方向将被这个磁通量改变,在磁头飞过这个区域以后, 磁性层的方向将固定下来.写头将编码后的数据写入碟片上. 读头(read head)是由磁感应材料制成,这种材料的电阻能够被磁通量改变,被称为(magneto-resistive materials). 所以当读头飞过已经写过数据的磁性层上面时, 读头的电阻将根据下方的磁性方向而改变. 如果我们以恒定电流通过读头, 由于读头电阻根据磁性区域改变,我们将得到表现磁性区域的变化的电压. 这个电压经过过滤,放大,转化成数字信号,我们就能够得到media上面的数据了.
disk&track

磁道(track)和Sector
一个碟片由很多track组成, 一个track又由很多个sector组成. 一般情况下一个sector可以容纳512bytes的数据. 每一个sector都可以通过一个唯一的编码找到, 这个编码包含磁头数, track数,sector数(CHS). 在以前的硬盘中, 每个track所包含的sector数量是一样的, 这样的好处就是主机可以很简单的定位某一个具体的sector位置, 缺点是造成空间的浪费.
sector
这个图中的两个sector都容纳512bytes的数据, 但是track0的sector占用的media空间比track100的大,造成浪费.

新的硬盘中每个track包含的sector数是不一样的, 比如说外圈的track就要比内圈的track包含的sector数量要多得多. 这种方式被称为划区记录(zoned bit recording). 按照这种方式主机就不能够定位某个具体的sector了,因为 zoned记录是硬盘自身来维护的. 这样我们就需要新的寻址方式来取代旧的CHS.

LBA取代CHS
LBA(Logical Block Addressing) 提供一简单的线性地址空间给主机, 这样主机就只需要提供LBA地址,而不关心物理上的sector位置, 这样32位地址的系统就能支持最高达232 blocks的容量, 大约是2T bytes. 64位地址的系统支持高达264blocks的容量.
LBA

这种方式的地址转换需要硬盘自身来负责,所以就需要在硬盘芯片中增加LBA转换到物理sector的模块.
lba to physical
LBA的其他好处: LBA的另外一个好处是很方便的处理备用(spare)sector, 通常在media上总是存在小的缺陷(flaw)或者是在使用过程中产生新的flaw, 使用LBA就可以使得硬盘很容易地屏蔽掉有缺陷的sector, 而在主机看来LBA并没有改变. 比如在使用过程中LBA14(CHS 0,1,4) 出现问题,硬盘就会将LBA14指向备用的sector(CHS 0,1 5),主机还是使用LBA14来读写,而物理上的存储位置已经改变到好的sector(CHS 0,1 5).
SPARE LBA

常见硬盘术语表

Binary Digit (Bit) – 2进制中的一位,可能的取值为 1 或 0.
Byte – 8个2进制位
Nibble – 4个二进制位
ASCII – American standard code for information interchange. 是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646 (Wiki)。
Parallel – 同一时间传送多位数据的传输方式
Serial – 按时间序列每次传送一位数据的传输方式
Peripheral –CPU和内存以外的外围设备
Main Memory – 主存, CPU可以直接访问的存储设备
Secondary Storage – 二级存储器,可以在断电后保持数据的存储设备, 但是CPU不能直接访问
Random Access Memory (RAM) – 非永久性存储器,可以随机访问
Read Only Memory (ROM) – 永久性存储器, 通常用来存放BIOS.
Hard Disc Drive (HDD) – 利用磁学原理保存数据的二级存储器
Firmware – 存放在ROM中的程序,HDD通过FW与Host通信, 控制硬盘马达, 或者是控制磁头移动等等.
Bus Width – 数据总线的宽度,一般以bit或byte为单位, 只是有多少数据可以在同一时刻传送. Bus Width通常是8bits的整数倍. 最老的ISA总线是8bits,标准ISA总线是16bits, PCI总线是32bits.
Bus Speed – 总线的一位数据线在单位时间(一般为秒)所能传输的数据量.大多数总线的一位数据线在一个时钟周期只能传输1bit数据,双时钟总线可以在半个时钟周期传输1bit.老的ISA总线需要2个时钟周期来传输1bit.
Bandwidth – 通常被用于表示传输率,指理论上单位时间(一般为秒)整个总线所能传输的数据容量.ISA总线的带宽8MB/s,而PCI2.1总线的带宽为500MB/s.

阅读(1121) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~