虚拟文件系统当时的设计目的是为了网络文件系统而设计的。
虚拟文件系统,是一个抽象层。所以一个分区可以同时存在多个文件系统
的原因就是,有个抽象层。。
Windows没有这个,不需要这样子做。它靠盘符来确定文件系统
网络文件系统的缺点:
需要锁机制。
无状态性。客户端并没有记录打开的文件。为什么不记录打开项呢?
其实是把服务端做为一个子目录来使用的。
现在终于明白为什么linux没有分区的概念了。window 之所以要进行分区。就是因为,它需要区分不同的文件系统。当你请求一个文件时,给出路径,操作系统就能知道向哪个文件系统去请求,就是因为分区。一个分区只能有一个文件系统。window通过盘符来确定文件系统。
Linux不需要分区。因为它做了一个抽象层。来管理所有文件系统。
操作系统针对这个抽象层来获取数据
使用挂载的方式。a 和b两个磁盘可以挂载到同一个目录下去。读取文件的时候,关心的是所有文件系统的抽象层操作,可以理解成接口。
文件系统的设计方式
按需分配。打开的文件属性才放入内存中。
关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小
文件名,磁盘块地址,多个。
连续分配:一个文件占据了3个磁盘块。是连续在一起的。
读的性能很好,读一个文件的内容只要一次操作,找到第一个磁盘块,后面的磁盘块就知道了。不用继续旋转。
缺点是,磁盘碎片多。要想避免碎片,要多进行碎片整理(不显示,太耗费性能)。所以这种方式不适合变化大小的文件。适合固定大小。比如CD文件。
链表分配:解决磁盘碎片。文件占用三个磁盘块,这三个磁盘块可以在任意位置,很方便扩充文件的容量。比如文件增加内容,要加一个磁盘块,随便去哪里拖一个磁盘块挂上去。有一个指针指向磁盘块地址。
缺点是,随机读写耗费性能。比如要读一个文件的第6个磁盘块的内容,必须从找到文件的第一个磁盘块然后顺着顺序第二,第三.....第五全部读到,才能知道第六个磁盘块在哪里。
为了提高速度。把文件的链表放到内存中。
在内存中存储链表。
多少个文件。就要多少个链表项吗?
为了解决占用内存过多问题(磁盘容量比内存大多了。
疑问,这个链表项是如何设计的呢。
链表这种数据结构要看看。。
文件名,目录是特殊的文件。
目录下有子目录如何实现的。文件最终在目录下