文件系统概述

作者: 贪婪的君子 | 来源:发表于2017-07-08 13:28 被阅读35次

曾经小,不懂事儿,敲下了rm -rf,那种感觉,可能今生今世不会再忘了......

[toc]

1. 文件


1.1 文件的分类

文件能有什么分类,无非是流式文件或者就是结构化的文件(记录式)这两种, 我们说,分类的差别就只是不同分类下的组成形式不一样,流式文件的组成是一个一个的信息项,可能是单字节的信息,也有可能是多字节的信息,这个具体就是看写入的信息项是什么了,结构化的文件组成是一个一个的结构体,根据结构体的内容才有了不同的结构体文件。

学过C语言就知道结构体是什么东西,这个结构化的文件就可以理解为一个个的结构体组成,当这个结构体记录的信息为单一的,那么这个文件就退化到了流式文件。

举个例子:

struct Student
{
    int ID;
    char* name;
}//简单的结构体(记录式)

char* name;//简单的流式文件信息项

struct Student
{
    char* name;
}//当结构体中的信息单一时,该结构体可视为单一的信息项

本节所述的文件的分类依据为文件的逻辑组织结构。文件的分类依据不同的原则可以分成不一样的类型,正如Unix中目录,设备等均被视为特殊的文件,因此可以从设备类型上分类成磁盘文件和磁带文件等,从用途上分类成目录文件和普通文件,不同的角度分类可以得到不同的分类结果。

1.2 文件的组织

组织其实就是结构,文件的结构,上述的文件的分类是从文件的逻辑结构出发的。
关于逻辑结构,这里还有一点需要提到,文件存在一个读写指针,指向文件的某一个位置,简单的说来就是一个数组的索引序号了。

struct Student Stu[100];//假设创建了一个存放一百个学生信息的数组
int read = write = 0;//初始时读写指针指向文件开始处

有逻辑组织,就一定存在物理组织,文件的物理组织即是如何将文件保存在物理设备上,这涉及到记录格式,空间开销,存取速度,长度等,这些因素会影响到文件系统的性能。

物理设备,如磁盘,是被划分为块来保存文件信息的,我们称这个块为物理块。

基于上述因素,便产生了几种常用的物理组织形式:

  1. 顺序结构
    这种结构下,文件保存在物理设备上是占用连续存储块的。这种方式简单,访问速度很快,但文件长度的增加会比较困难。


    顺序结构
  2. 链接结构
    这种结构和链表的思想一致,各个物理块之间通过指针相连,优点和链表类似,长度变化方便,缺点就是随机访问速度慢。


    链接结构
  3. 索引结构
    这种结构继承了顺序和链接的优点,访问速度快,长度变化方便,只是索引也是有长度限制。


    索引结构
  4. 散列结构
    这种结构是通过散列函数进行块选择的,如果散列函数结构出现冲突,则可以通过拉链法(顺序探查法)来实现冲突处理。

  5. 倒排结构
    Java中的Map存储数据是通过K,V键值对来进行的,倒排结构与之相类似,只是在其中存在一个主键和多个次键,当主键冲突无法索引时,相同主键的元素通过对比次键来进行查找。
    可以看出,这种结构的查找的速度很快,但是开销要大些。

2. 文件目录


文件目录是由目录项构成的,这个目录项我们又称文件控制块(FCB),这玩意儿存储系统对文件管理所需要的全部信息。

2.1 文件目录与目录文件

用于检索文件的目录称为文件目录,是由目录项构成的有序序列。

说的挺玄乎,但其实就是一个顺序的表格,表格中顺序的存储着文件对应的目录项而已。

文件目录经过改进后,其目录项被划分为主部和次部,分别用来保存文件名称,文件号(主部),除文件名称外的所有信息外加一个连接计数器(次部),这样划分的好处是为了提高查找速度,先通过文件名称查找主部,在通过主部的文件号去查找相应的次部。

貌似并没有提高速度?先查主部,再查次部怎么都应该会减少速度,怎么能提高速度呢?
之前说过,物理设备的存储时以物理块划分的,查找文件时需要将外存的物理块读入内存,如果不进行主次部的划分,一次读入的文件目录项会很少,如此一来便需读入更多的物理块进入内存。速度也就会变慢。

目录文件就是被保存在外存空间的文件目录,且目录文件是长度固定的记录式文件。

文件目录和目录文件都是一个东西,就是存储的位置不一样而已,换个称呼。

2.2 目录的分级

目录有单级目录,也有多级目录,平常所用的Windows目录就是属于多级目录。
同一级目录下的文件不可以重名,但是不同目录下的文件是可以重名的,所谓单级目录,就是整个系统中只有一个目录,其中存储的是普通文件,不能重名。而多级目录则是允许系统中有多个目录,二级目录是可以在一级目录下创建目录,三级目录则是允许在第二级目录下创建目录,依次类推。


多级目录

由于目录分级,产生了根目录与目录层次的概念,文件查找时也有了不同的方式,即从根目录查找或是从当前目录开始向深层次的目录查找。

无论是Linux还是Windows,都存在根目录的概念,在Linux下,根目录表示为"/",而在Windows则一般表示为"C:/Windows"。

3. 文件共享与保护


对于一个文件,我们可能会有多个进程同时使用的情况,我们分为同步和异步。
同步就是同时对某一个文件进行操作,异步就是同时只有一个进程可以进行操作。至于如何实现文件共享,各个系统都有其不同的方式,不过大多都是通过公共目录进行文件的共享,或是通过链接指向同一个文件,或是为文件增加共享属性说明。
不过无论哪一种方式,都会涉及到文件的安全性。

这里安全性的定义就比较广泛了,并不是单指被黑客盗取。多个进程同时对同一个文件进行读写,那么这个文件就可以说是不安全的状态,而且我们有时候也不想让某个文件被别人读取或是写入时,就会加个密,或是变更其他用户的权限。
我们常说,数据是无价的,所以为了文件的安全,我们会经常对重要文件进行备份处理,而备份文件又有完全转储、增量转储以及差分转储三种,这了就不展开说明了。

在Linux中,通过分组保证文件的安全性,即文件所有者,组用户,其他用户三组,赋予不同的权限来进行读写的限制。

4. 文件系统的实现


为了实现一个文件系统,我们需要设计文件系统的表目信息,如系统打开文件表,用户打开文件表以及其之间的联系。

底层的实现就不说了。

文件系统的表目

5. 外存空间的管理


外存空间的管理方式有空闲块表,空闲块链,位示图等方式,这个与存储系统中的外存空间的管理方式相同,这里就不一一叙述了。

相关文章

  • 文件系统概述

    曾经小,不懂事儿,敲下了rm -rf,那种感觉,可能今生今世不会再忘了...... [toc] 1. 文件 1....

  • 6 Ceph

    Ceph概述 [toc] 分布式文件系统 分布式文件系统( Distributed File Syste ) 是指...

  • centos 7 k8s安装nfs 服务器与客户端 nfs动态存

    NFS介绍概述  网络文件系统(Network File System, NFS),是基于内核的文件系统,nfs主...

  • NFS+NTP

    一,NFS网络文件系统1,NFS服务端概述NFS(network file system),网络文件系统,网络文件...

  • 运维之网络文件系统NFS介绍与部署安装(CentOS7.0)

    NFS概述 NFS(Network File System),即网络文件系统,是一款通过网络方式共享文件系统的通用...

  • NFS服务器

    NFS服务端概述: NFS,是Network File System的简写,即网络文件系统。网络文件系统是Free...

  • 浅谈Linux虚拟文件系统

    1. 虚拟文件系统概述 1.1 VFS简介 虚拟文件系统(Virtual File System,简称VFS)是L...

  • NFS服务和DHCP服务讲解

    NFS服务端概述 NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeB...

  • linux文件系统概述

    Linux教程 linux文件系统概述 什么是文件系统 我们有了一个相对形象的概念,文件系统管理着很多文件。而这些...

  • 12.1.1 文件系统概述

    12.1.1 文件系统概述 文件类型 在程序运行时,程序本身和数据一般都存在内存中,当程序运行结束后,存放在内存中...

网友评论

    本文标题:文件系统概述

    本文链接:https://www.haomeiwen.com/subject/xhodhxtx.html