好,我们再次开课。
今天我们来说说这个文件系统及我们的文件系统会是长成什么样子的。
下面的场景可能需要你的一点想象力及白日做梦的能力。因为你要成为皇帝了!
文件大家几乎都 在接触,各种格式都有,支持读写执行等操作;比如你劳累了一天,想看点txt,,jpg,avi,mp4, rmvb等放松一下,对吧,至于到底是什么,我是不知道,也不想知道。而且文件的数目一般不是只有一个的,大量的文件挤在你的磁盘中,就像后宫妃子一样,每天都在等待你的临幸,啊不,是访问。光访问也不够,你可能也要写些什么保存起来,就像我一样,平时总想写点东西装作自己很有学问。
这时你没有疑问过吗?这什么我小手一点,它就能准确的打开我想要的文件(比如你想看林志玲,它不会跑出个凤姐出来);我保存后,它也能够存在,我想查阅时,它能列出所有的文件出来。这是谁在帮我默默的整理后宫,能搞的井井有条?这就是你的皇后-文件系统。
其实文件系统简单来说就是一组数据结构,定义了你的文件读取或者写入的规则方法。文件的写入保存就像你新纳个妃子,总得给他个房子吧,你要是乱给,那后宫还安生?文件读取就像你去翻牌子,总不能翻个志玲,走到龙床一看,来了个凤姐,真是这样,哇呀呀,拖出去灭九族。
还有个文件夹是什么东西呢?这就像是你后宫规划,比如南京来的统一住到东面,上海来的统一住到西面,你只要脚一迈,就知道这个里面是哪个地方的妃子。你总不能见了南京的说上海话,见了上海的说南京话吧。
那我们后面的皇后会是什么样子的呢?当前肯定不会像现在的window帝或者linux帝那么强势。那些毕竟是美帝国主义的。我们的社会主义中国皇后管理后宫很简单:大家都住一个大房子里面(不搞文件夹),吃饭睡觉都一起,因为我们的妃子太少了,后面加起来不会超过8个。
这种文件夹不要,文件都 在一起的有个名字:扁平化文件系统。我们会借用这个概念来实现我们自己的系统。
既然是操作文件的,那么每个文件肯定会有自己的名字,就像你的妃子一样,每个人都 有自己的身份信息,这里面我们用inode来纪录每个文件的信息概要。然后再用一个位图来纪录当前inode被使用的情况,每bit表示一个Inode,已经占用的置1,来个新人,你查查不知道该把它纪录 在哪个 空的inode中。
虽说都住在一个大房子里面,但这个大房子你得给分配好空间,就像吃饭一样,每个坐在自己的位置上,不要乱跑,这是规矩。每个人的位置也要纪录下来。这里的位置实际就是在磁盘中的位置,一般我们用扇区来表示(磁头,磁道,扇区那种太复杂,我们不用),常用的一个扇区是512字节。再用一个位图纪录桌子位置,哪个位置被占了,就置为1,这样来个新人,你查查这个位图就有关系该把它放在哪个空的位置。当然有的妃子长得比较壮实,一个人可能得占用多个位置,这也是允许的,毕竟它是你同意的,可能你当时正好得了急性暂时性精神综合症,那你也得含着泪也得把它安排好。这样就需要一个sector信息,来纪录每个人的占用哪些扇区
好。现在我们来限制下我们可保存文件的数目:4096个文件(也就是4096个inode),就好比你只能纳4096个妃子,再多我怕你出事!扇区(sector)也定义个 4096(为什么都 用这个,下面会说到)。再用定义inode_bitmap, sector_bitmap, 这两个 位图正好都是512字节(4096/8),正好 占用一个扇区,很好管理。
现在我们的文件系统包括 inode信息区,sectore信息区, inode_bitmap , sectore_bitmap,最后再来个内务府大首领(系统文件块),它只管理整个资源数目,及已经使用的数目;后面新来个妃子或者给新妃子调整座位时,先问大首领:还有空的inode和空的位置吗?大首领查查内务府资源表:没有了。那就没有办法了,从哪来还到哪去吧。
好,总结起来,我们的文件系统会包含:系统文件块, 扇区使用位图, inode使用位图,inode信息区,sector信息区;
在磁盘上存储顺序为:
扇区0 MBR
扇区1 文件系统块(见表1)
扇区2 扇区使用位图
扇区3 inode信息使用位图
扇区4-扇区515 inode文件信息区,每个inode 64字节,总共需要64*4096/512 =512个扇区(见表2)
扇区516-扇区547 文件扇区列表区,4个字节,总共需要4*4096/512=32个扇区(见表3)
扇区548-4095 文件数据区,真实文件的数据会写在这里面。
表1 文件系统块
说明 | 偏移(相对本扇区) | 大小 |
总扇区数目 | 0 | 4字节 |
可用扇区数目 | 4 | 4字节 |
总Inode数目 | 8 | 4字节 |
可用inode数目 | 12 | 4字节 |
表2 Inode文件信息
说明 | 偏移(相对本扇区) | 大小 |
文件名 | 0 | 32字节 |
文件大小 文件扇区总数 | 32 36 | 4字节 4字节 |
第一个扇区 | 40 | 4字节 |
保留 | 44 | 20字节 |
表3 文件扇区列表结构
说明 | 偏移(相对本扇区) | 大小 |
下一个扇区值是否合法 | 0 | 4字节 |
下一个扇区值 | 4 | 4字节 |
好了,我们的文件大概就是这样了,大家洗洗睡觉吧,继续在梦中再续你的皇帝梦。
明天我会用c代码来实现我们的文件系统初始化,文件读,文件写操作,大家有兴趣也可以本地尝试下。
退朝吧,各位爱卿回吧。