标签:方式 mouse 字节 des ESS 详细 idt logical disk
来源 https://www.cnblogs.com/wangshuo/p/10454222.html
这里有更详细的计算 https://blog.csdn.net/haiross/article/details/38661051
这里做记录一下,总是忘记如何计算
磁盘填充,先填满一个柱面之后,再填下一个柱面。LBA是从0开始的。
LBA = (C-CS)*HPC*SPT + (H-HS)*SPT + (S-SS)
C, H, S: 当前的CHS值 柱面 磁头 扇区
CS, HS, SS: Cylinder, Head, Sector的起始(start)编号。一般来说,CS=0,HS=0,SS=1 , 扇区从1开始编号
HPC: Heads Per Cylinder,每个柱面磁头数,也就是每个柱面磁道数 (一个柱面(圆环),一般都是正反两面,也就需要上下两个磁头)
SPT: Sectors Per Track,每个磁道扇区数
SPT > (S-SS) 一定成立
HPC > (H-HS) 一定成立
一般来说,CS=0,HS=0,SS=1,因此可以得出
假如硬盘的配置为C(柱面数),H(磁头数),S(扇区数)
那么:
1柱面(Cylinder)有H个磁道(Track)
1磁道(Track)有S个扇区(Sector)
1扇区(Sector)有512字节
LBA = C*HPC*SPT + H*SPT + (S-1)
以及 HPC > (H-0),即 HPC > H
因此:
S = LBA%SPT + 1
H = LBA/SPT%HPC
C = LBA/SPT/HPC
软盘中,HPC=2,所以:
C = (LBA/SPT) >> 1
H = (LBA/SPT) & 1
https://blog.csdn.net/haiross/article/details/38661051
LBA 全称为 Logical Block Addressing(逻辑块编址),LBA 扇区由 0 开始编址,LBA 扇区号的计算方式是:
LBA = (cylinder * HPC + head) * SPT + sector - 1 |
先计算出 track 数量,再加上物理扇区(物理扇区从 1 开始编号),转换为 LBA 扇区需要减 1
track 的数量计算方式为:cylinder * HPC(head_per_cylinder)+ head
这里以 floopy 为例,floopy 的是单磁片:
因此,假设 LBA 扇区是 1,那么:1 = (0 * 2 + 0) * 18 + 2 - 1 ,结果是:cylinder = 0,head = 0,sector = 2
cylinder 的计算方式为:
cylinder = LBA / (SPT * HPC) |
我们需要计算出总共有多少 cylinder,因此我们的式子可以分解为:
以上面的例子:
计算出 cylinder 为 0
计算 head 的式子为:
head = (LBA / SPT) % HPC |
在已经求出 cylinder 的前提下,我们需要得出在一个 cylinder 内的 head 编号,因此我们的式子可以分解为:
以上面的例子:
计算 sector 的式子为:
sector = LBA % SPT + 1 |
我们的式子可以分解为:
我们看到这三个式子就都有共同的部分:LBA / SPT(或者 LBA % SPT),我们对这些进行优化,下面是我的实现代码:
;#########################################################
%ifndef LBA_TO_CHS_INC
;******************************************************* LBA_to_CHS: %define SPT 18
mov ch, al
mov cl, al ret
%endif |
上面的代码很精简,只有 8 条指令 :)
小结:
不管CHS(寻址方式)也好,还是LBA(寻址方式)也好。磁盘存储寻址都需要通过cylinder、head、sector这三个变量来实现;CHS、LBA都是一个数字,CHS按照固定格式把24个bit位分成cylinder、head、sector;LBA则需要通过求模运算得出cylinder、head、sector。即由chs值可以直接获得cylinder、head、sector这三个变量的值,而由LBA值则需要通过运算间接得出cylinder、head、sector这三个变量的值。
标签:方式 mouse 字节 des ESS 详细 idt logical disk
原文地址:https://www.cnblogs.com/davytitan/p/13354150.html