文件的存储
文件的存储主要有以下两种:
连续空间存放
非连续空间存放
连续空间存放方式
顾名思义,文件存放在磁盘连续的物理空间中,这种存储方式的读取效率很高。存储时文件头里需要指定起始块的位置和长度。
缺点:有磁盘空间碎片、文件长度不易扩展。
非连续空间存储方式
非连续空间存储方式分为链表方式和索引方式。
链表方式
链表的方式存储是离散的、不连续的,因此可以消除磁盘碎片,同时文件的长度可以动态扩展。根据的实现的方式,分为隐式链表和显式链表。
隐式链表:实现方式是文件头要包含第一块和最后一块的位置,并且每个数据块留出一个指针空间用来指向下一个数据块。
隐式链表的缺点是无法直接访问数据块只能通过指针顺序访问,另外就是稳定性差,如果由于软件或者硬件错误导致链表中指针损坏或丢失数据也就丢失了。
显式链表:取出每个磁盘快的指针把它放到内存的一个表中就解决了隐式链表的不足。由于查找过程是在内存中进行的,减少了访问磁盘的数量。主要缺点是不适合大磁盘。
索引方式.
实现方法是为每个文件创建一个索引块,里面存放的是指向文件数据块的指针列表,因此文件头需要包含指向索引数据块的指针,这样就可以先找到索引然后逐步找到数据块。索引的方式优点在于文件的创建、增大、缩小很方便。不会有碎片问题。支持顺序读写和随机读写。
缺点就是存储索引带来开销。还有就是没法存大文件。
链式索引块
实现方法是在索引数据块中留出存放下一个索引数据块的指针,当一个索引块用完就可以通过指针找到下一个索引块。和链式存储一样,害怕指针损坏或丢失。
另外还可以通过索引块+索引块组合实现,这种方式叫多级索引块。通过一个索引块存储其他索引块然后通过索引块找到数据块。