关于磁盘
解释: 通过windows win+r 输入msinfo32 ,找到组件->存储->硬盘 查看硬盘信息;
图中:扇区/磁道 表示每个磁道有多少个扇区;磁道/柱面,表示每个柱面有多少个磁道。字节/扇区: 表示每个扇区的字节数
以下图解释:磁道/柱面 = 255, 表示一个柱面上有255个磁道,那么即有255个盘面。
柱面总数 = 60801,则表示每个盘面有磁道60801
总的磁道数 = 柱面总数 * 磁道/柱面 = 60801 * 255 = 15504255
总的扇区数 = 总的磁道数 * 扇区/磁道 = 15504255 * 63 = 976768065
总空间大小 = 总的扇区数 * (字节/扇区)= 976768065 * 512 = 500105249280B = 465.7593G
柱面数 *
操作硬盘的本质
- 你要操作那个controller(驱动),那个hd
主驱动操作端口:0x1f0 - 0x1f7
从驱动操作端口:0x170 - 0x177 - 我想操作那个扇区
- 使用什么寻址方式
CHS,lba(28,46) - 你想做什么操作
检测 0xec
resotre 0x10
读 0x20
写 0x30
verify 0x40
format 0x50
init 0x60
seek 0x70
diagnose 0x90
specify 0x91 - 读/写多少 扇区数
- 读:读到内存的那个位置,写:从那个内存开始写
寄存器
- 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) 编辑 收藏 举报