目录
1.为什么要抽象
2.逻辑抽象_版本1
2.1sector数组
2.2index转化CHS
3.逻辑抽象_版本2
3.1LBA数组
3.2LAB下标转化sector下标
- 文件其实就是在磁盘中占有几个扇区的问题❗
- 文件是很多个sector的数组下标❗
- 文件是有很多块构成的❗
- ❗文件由很多扇区构成------>文件由很多的index构成----->文件由很多的块构成
1.为什么要抽象
- 硬件的存储结构发生改变,OS软件随之发生变化。直接使用CHS的耦合度太高,不想软件直接拿着硬件的参数去访问。
- 为了后面编码设计,为了方便内核进行磁盘管理
- OS需要也需要对大量的磁盘文件管理❗
- 管理啊:先描述再组织❗
- 下面我们走一遍OS对磁盘这样的设备进行管理和抽象。
- OS对磁盘的管理转化成了对数组的管理,先描述再组织。
- 描述:描述成数字
- 组织:组织成数组
2.逻辑抽象_版本1
2.1sector数组
- 圆形结构变成了线性结构。磁盘抽象成线性结构。
- 线性结构的每一段都是一个扇区。
- 这个线性结构可以看成一个数组,数组元素是一个一个的扇区。
- 天然就存在一个东西:数组下标表示sector(相当于对扇区进行了编址)
2.2index转化CHS
- OS是拿到下标index就可以访问扇区
- 硬件是使用CHS来进行扇区寻址
- 磁盘的每个盘面的容量大小一样(磁道数/扇区数是一样大小的)
- 二者的转化算法是很简单的,并且这个工作是磁盘内部完成的。
- index------>硬件电路------->磁盘内部转化-------->CHS地址--------->磁盘的硬件定位扇区
前提:已知 磁盘总容量和每个扇区的大小=扇区数,磁道数。
磁盘的每个盘面:有1000个扇区,10个磁道(每一个磁道都有100个扇区)
index / 扇区数 = 定位的盘面(H)
index % 扇区数 = tmp
tmp / 100 = 定位磁道(C)
tmp % 100 = 定位扇区(S)
3.逻辑抽象_版本2
3.1LBA数组
- 内存和外设之间进行IO交互。512字节会不会太小了。OS觉得有点小。(C语言访问内存是1字节,经常性是4/8字节访问)
- 站在硬件的角度:每次往内存拷贝加载数据,512字节。
- 站在OS的角度:效率低,能不能拷贝更多数据。可以4KB。
- 基本单位是:4KB(可以修改需要重新编译OS,大部分场景够用,一次性读8个扇区)
- ❗4KB的大小是规定出来的。有块号(规定)
- ❗OS:4KB = 8个连续的扇区 = 数据块(块大小)= 文件块
- 大页式内核:4MB
- 1KB = 1024字节
3.2LAB下标转化sector下标
- 逻辑区块地址(Logical Block Address, LBA)是描述计算机存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。
- 8个扇区为1个块
- 块号✖8(一个块的扇区数)= 一个块的第一个扇区sector的下标
- 整个块的下标:第一个sector知道了,往后连续数7个就是这个块。01234567。每一个块的扇区的下标都知道了。再通过版本1的计算方法就可以知道CHS地址了。
- 对于OS而言,未来我们读取数据,可以以块为单位了❗磁盘可以看成很多的块。
- 只要知道第一个块号,就可以知道全部的块号了。(前提知道磁盘的总大小——总大小/4即可)只要知道一个起始,和磁盘的总大小,有多少块,每个块的块号,如何准换到对应的多个CHS地址,全部都知道了❗
- 总大小/4KB=总块数=块的编号LBA---------->每个块的第一个起始地址=sector的下标----------->每个块中全部的sector的下标--------->每个下标index通过计算得到CHS地址---------->定位到硬件里面的扇区。