LBA,全称Logic Block Address (即扇区的逻辑块地址)
为什么引入LBA概念?
首先,由于INT13的限制,三维地址C/H/S的最大值只能为1024/16/63,容量最大只能到1024X16X63 Byte=528482304 Byte=504 M。其次,在系统管理文件时记录繁琐的C/H/S也很吃力,效率较低,使用逻辑扇区后,可在硬盘读写操作时脱离柱面,磁头等硬件参数的制约。
在LBA模式下,系统把所有的物理扇区都按照某种方式或规则看做是一线性编号的扇区,即从0到某个最大值方式排列,并连成一条线,把LBA作为一个整体来对待,而不再是具体到实际的C/H/S值,这样只用一个序数就能确定一个唯一的物理扇区,这就是线性地址的由来,显然线性地址是物理扇区的逻辑地址。
线性地址如何和实际的C/H/S地址的转换关系
首先要了解线性地址的编码规则:把第一柱面(0柱面)第一磁头(0面)第一扇区(1扇区)编为逻辑“0”扇区。。。。。。直到第一柱面(0柱面)第一磁头(0面)的第63扇区(63扇区),将其编为第“63”扇区,这样编码。
(1)从C/H/S到LBA
用C表示当前柱面号,H表示当前磁头号,S表示当前扇区号,CS表示起始柱面号,HS表示起始磁头号,SS表示起始扇区号,PS表示每磁道有多少个扇区,PH表示每柱面有多少个磁道,计算公式如下:
LBA = ( C – CS ) * PH * PS + ( H – HS ) * PS + ( S – SS )
例如:
C/H/S=0/01 则 LBA = 0
C/H/S=0/0/63 则 LBA = 62
C/H/S=0/1/1 则 LBA = 63
C/H/S=0/5/1 则 LBA = 315
C/H/S=100/0/1 则 LBA = 1606500
C/H/S=100/1/1 则 LBA = 1606563
C/H/S=139/52/48 则 LBA = 2236358
C/H/S=220/156/18则 LBA = 3544145
(2)从LBA到C/H/S
变量命名依然同上,则计算公式如下
C = LBA DIV ( PH * PS ) + CS
H = ( LBA DIV PS ) MOD PH + HS
S = LBA MOD PS + SS
如果不运行MOD运算符,只用DIV运算符,则:
C = LBA DIV ( PH * PS ) + CS
H = LBA DIV PS – ( C – CS ) * PH + HS
S = LBA – ( C – CS ) * PH * PS – H – HS)* PS + SS
例如:
LBA=0 则 C/H/S = 0/0/1
LBA=62 则 C/H/S = 0/0/63
LBA=63 则 C/H/S = 0/1/1
LBA=315 则 C/H/S = 0/5/1
LBA=1606500 则 C/H/S = 100/0/1
LBA=2236358 则 C/H/S = 139/52/48
LBA=3544145 则 C/H/S = 220/156/18
本文摘自:《数据恢复技术》第二版 伦子整理