手写操作系统 - 3.读取扇区

97 阅读2分钟

B站视频链接 - 【203.CHS读取扇区】

B站视频链接 - 【204.LBA28读取扇区】

读取扇区

CHS模式

CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector),每个磁头对应一个盘面,每个柱面由一组磁头组成,每个扇区由一个磁道组成。

CHS寻址方式的容量由CHS三个参数决定:

  • 柱面数(C)最大为1023 (用 10 个二进制位存储)。从0开始编号。

硬盘被分为多个柱面,每个柱面由多个磁道组成。柱面是指同一位置的所有磁道的集合,所有磁道在同一半径上。

  • 磁头数(H)最大为255 (用 8 个二进制位存储)。从0开始编号。

每个硬盘都有一个或多个磁头,每个磁头可以读取一个磁道上的数据。

  • 扇区数(S)最大为63 (用 6 个二进制位存储)。从1开始编号。

每个磁道被分为多个扇区,每个扇区可以存储一个数据块。

所以CHS寻址方式的最大寻址范围为: 255102363512/1048576=7.837GB(1M=1048576Bytes)255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes ) 转存失败,建议直接上传图片文件

LBA模式

LBA是非常单纯的一种定址模式,它将硬盘的柱面号、磁头号、扇区号全部转换为线性地址,然后直接使用。 由于INT13的限制,三维地址C/H/S的最大值只能为1024/16/63,其次,在系统管理文件时记录繁琐的C/H/S也很吃力,效率较低,使用逻辑扇区后,可在硬盘读写操作时脱离柱面,磁头等硬件参数的制约。

IO操作读取硬盘的三种方式:

  • CHS:最大寻址范围为1024/16/63,最大容量为7.837 GB
  • LBA28:最大寻址范围为28位,最大容量为128 GB
    • 0x1F1写一次
    • 0x1F2写一次
  • LBA48:最大寻址范围为48位,最大容量为256 TB
    • 0x1F1写两次:0
    • 0x1F2写两次: 第一次要读的扇区数的高8位,第二次低8位
端口功能
0x1F016位数据端口
0x1F1状态和错误寄存器
0x1F2要读取的扇区数
0x1F3LBA地址的低8位
0x1F4LBA地址的中间8位
0x1F5LBA地址的高8位
0x1F6驱动器和磁头选择
0-3:LBA地址高4位;
4:0表示选择主驱动器,1表示选择从驱动器;
5:必须为1;
6:必须为1表示LBA,0表示CHS;
7:必须为1;
0x1F7读取扇区:0x20
写入扇区:0x30