理解硬件:磁盘
1.机械磁盘
机械磁盘是计算机中唯一的一个机械设备,本节提到的磁盘均为机械磁盘
2.磁盘物理结构![]()
3.磁盘的存储结构
一个磁盘有数个盘,每个盘有两个盘面,每个盘面上都有磁头可以进行读写,每一个盘面上都有数个磁道,磁道的间隙将磁道切分为一个个扇区,扇区即为磁盘最小读写单位(每个扇区存储的内容大小一致)
4.磁盘的逻辑结构
传动臂上的磁头是共进退的,柱面是⼀个逻辑上的概念,其实就是每一面上,相同半径的磁道逻辑上构成柱⾯。所以,磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由“柱面”卷起来的
磁道:
某⼀盘面的某⼀个磁道展开(过程可类比将磁带抽出,就会成一个线性的结构):即一维数组
柱面:
整个磁盘所有盘⾯的同⼀个磁道,即柱⾯展开:即二维数组
整盘:
三维数组
5.磁盘寻址
a.CHS寻址
寻址⼀个扇区:先找到哪⼀个柱⾯(Cylinder) (0,1,2......)(最外圈为0,向中心依次增加),在确定柱⾯内磁头位置(Head)(0,1,2....),在确定扇区(Sector)(1,2,3......),所以就有了 CHS 。
b.LBA寻址
每⼀个扇区都有⼀个下标,我们叫做 LBA(Logical Block Address) 地址,其实就是线性地址
我们之前学过C/C++的数组,在我们看来,其实全部都是⼀维数组:
OS只需要使⽤LBA就可以了!!
LBA地址转成CHS地址,CHS如何转换成为LBA地址由磁盘⾃⼰来做!固件(硬件电路,伺服系统)
c.CHS - LBA地址转换
CHS转成LBA:
• 磁头数*每磁道扇区数 = 单个柱⾯的扇区总数
• LBA = 柱⾯号C*单个柱⾯的扇区总数 + 磁头号H*每磁道扇区数 + 扇区号S - 1
• 即:LBA = 柱⾯号C*(磁头数*每磁道扇区数) + 磁头号H*每磁道扇区数 + 扇区号S - 1
• 扇区号通常是从1开始的,⽽在LBA中,地址是从0开始的
• 柱⾯和磁道都是从0开始编号的
• 总柱⾯,磁道个数,扇区总数等信息,在磁盘内部会⾃动维护,上层开机的时候,会获取到这些参数。
LBA转成CHS:
• 柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】
• 磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数
• 扇区号S = (LBA % 每磁道扇区数) + 1
• "//": 表⽰除取整
从此往后,在磁盘使⽤者看来,根本就不关⼼CHS地址,而是直接使用LBA地址,磁盘内部⾃⼰转换。
所以从现在开始,磁盘就是⼀个元素为扇区的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了