無名

大猫咪与小狮子

导航

关于磁盘

解释: 通过windows win+r 输入msinfo32 ,找到组件->存储->硬盘 查看硬盘信息;
图中:扇区/磁道 表示每个磁道有多少个扇区;磁道/柱面,表示每个柱面有多少个磁道。字节/扇区: 表示每个扇区的字节数

以下图解释:磁道/柱面 = 255, 表示一个柱面上有255个磁道,那么即有255个盘面。
柱面总数 = 60801,则表示每个盘面有磁道60801

总的磁道数 = 柱面总数 * 磁道/柱面 = 60801 * 255 = 15504255
总的扇区数 = 总的磁道数 * 扇区/磁道 = 15504255 * 63 = 976768065
总空间大小 = 总的扇区数 * (字节/扇区)= 976768065 * 512 = 500105249280B = 465.7593G

柱面数 *

操作硬盘的本质

  1. 你要操作那个controller(驱动),那个hd
    主驱动操作端口:0x1f0 - 0x1f7
    从驱动操作端口:0x170 - 0x177
  2. 我想操作那个扇区
  3. 使用什么寻址方式
    CHS,lba(28,46)
  4. 你想做什么操作
    检测 0xec
    resotre 0x10
    读 0x20
    写 0x30
    verify 0x40
    format 0x50
    init 0x60
    seek 0x70
    diagnose 0x90
    specify 0x91
  5. 读/写多少 扇区数
  6. 读:读到内存的那个位置,写:从那个内存开始写

寄存器

  • 0x1f0: 16位 数据寄存器, 读(写)256次,刚好一个扇区
  • 0x1f1: 8位 错误寄存器,
  • 0x1f2: 8位 指定读取(写入)的扇区数,
  • 0x1f3: 8位 lba地址的 0-7位
  • 0x1f4: 8位 lba地址的 8-15
  • 0x1f5: 8位 lba地址的 16-23位
  • 0x1f6: 8位 0-3位存lba地址的24-27位,第4位:0表示主硬盘,1表示从硬盘,第5位固定为1,第6位:0表示chs模式,1表示lba模式,第7位固定为1,所以这个寄存器在lba模式下,如果读主硬盘,0b1110_XXXX
  • 0x1f7: 8位 写该寄存器,写的是指令,即上文中的第4条。 读该寄存器,得到的是状态:

0x01: 表示发生了错误,错误码放在0x1f1寄存器中;
0x02:表示控制器检测到索引标记(?);
0x04:表示控制器必须通过ECC字节来纠正数据(纠错码,扇区末尾的额外字节,允许验证其完整性,有时还可以纠正错误),
0x08:表示控制器正在等待数据写入,或许正在发送数据,该位为0时不要访问数据寄存器;
0x10:表示读写磁头就位;
0x20:表示控制器检测到数据写入故障;
0x40:表示控制器已经准备好接受命令,并且驱动器以正确的速度旋转,
0x80:表示控制器正忙于执行命令(当需要对硬盘进行操作之前,必须先读0x1f7寄存器, 检测该位是否繁忙)。

posted on 2023-10-29 12:03  xiezhengcai  阅读(14)  评论(0编辑  收藏  举报