这一节我们来看下RMOSLDR中硬盘驱动的各个接口
首先我们需要一个C++块设备接口。这个接口将实现设备的分块读取。硬盘驱动器,光盘驱动器,USB驱动器都要实现这个接口。换句话说,只要某个设备实现了这个接口,就可以在其上建立文件系统。
这个接口个各个方法都很容易理解。打开设备、关闭设备,得到设备的块大小,得到设备的总块数,以及读和写。
除此之外,某些存储设备(如硬盘,U盘)还提供了分区功能。所以我们还必须有一个接口来支持存储设备分区。可想而知,这个接口应该可以创建分区,删除分区,修改分区,枚举分区。由于我暂时只关心硬盘,所以这个接口基本上是为硬盘设计的。
上面用到分区表结构:
对于硬盘来说,分区可以分为主分区,扩展分区,和逻辑分区。我们暂时不打算管逻辑分区,因此我们定义了主分区一个个类。主分区上可以建立文件系统,因此,主分区类应该实现IBlockDevice接口。
最后就是我们的硬盘设备类了。硬盘自然是一个块设备,同时也可以在其上分区。所以硬盘应该实现IBlockDevice接口和IPartitionable接口。
为了更方便大家理解这些接口和类的对象关系,我们可以画出下面的UML图