一.何为文件

此处的文件定义,和我们平常新建的文件是一个意思。他们拥有同样的属性:文件名、文件类型、文件长度、文件属主、文件权限、文件位置、文件时间等

二.为何操作系统要使用文件系统

我们知道我们常用的程序和数据都是以文件的形式保存在外部存储器(如:硬盘,磁盘)上,需要时再调入内存。保存在外部存储器上的文件,不可能由用户直接进行管理,这是因为管理文件必须熟悉外存的物理特性以及文件的属性,熟悉文件在外存上的具体存放方式等等。这一系列要求显然超过了一般用户的技术能力,所以操作系统对外存上文件的操作进行封装,用户只需要调用操作系统相应的方法即可操作文件。而,操作系统为了管理文件,它又设计了一套完整的方法和规则来方便自己管理。这套方法和规则就是文件系统

文件系统:操作系统中负责管理和存取文件的程序模块,由管理文件所需的数据结构(如:文件控制块,存储分配表等)、相应的管理软件和被管理的文件的组成。

可见:文件系统是指的一串代码。文件系统是操作系统中的一个小模块

三、文件分类:

1.按文件的性质和用途分:

系统文件:操作系统内核、各系统程序和数据构成的文件。大多系统文件只允许调用,不允许用户读、写和修改。有些系统文件不对外开放

库文件:由各种标准子程序和函数构成的文件,库文件值允许用户调用,不允许修改。

用户文件:由用户的程序和数据组成的文件

2.按文件的存取控制属性分:

只读文件,只写文件、只执行文件

3.按照文件是否经过编译和链接分:

源文件:由源程序和数据组成的文件。源文件属于字符文件,就是我们自己写出来的文件

目标文件:由源程序经过编译程序编译,但尚未经过链接程序链接的目标代码构成的文件,目标文件是二进制文件

可执行文件:目标代码再经链接程序链接后形成的可执行文件,

4.按组织文件分:

普通文件:我们平常写的文件

目录文件:我们常说的文件夹,其实就是一个目录文件

设备文件:有些操作系统通过文件方式管理IO设备,这种情况下,每个设备对应一个设备文件。

四、文件操作

用户操作文件,是通过调用操作系统中文件系统提供的代码接口。然后再由文件系统根据要求操作外存提取相应文件。

五、文件逻辑结构和物理结构

逻辑结构:目前大多数系统,都采用无逻辑结构文件,将文件直接看成是字符流组成。但是数据库文件就常用的就是有结构文件。

物理结构:指的是文件在物理介质上存储时的结构,目前大多使用的索引结构。

六、索引结构:

索引结构组成方式是:文件的所有盘块可以离散地分散在磁盘空间中,系统为每个文件建立一张索引表,用于依次存放该文件占用的所有盘块的盘块号,索引表主要保存在文件的目录项(即:文件控制块FCB)中。如下图:

注:何为盘块:一个硬盘包括一个或者多个盘片,每个盘片分上下两个盘面,每个盘面上有若干条称为磁道的同心圆,每条磁道被划分成若干个的扇区,每个扇区相当于一个物理磁盘快。信息就存储在扇区中。

目录框:表示的是文件目录,其实里面有很多文件和与之对应的索引块号。索引块(其实就是一个FCB)号其实就是一个盘块号,里面存储了对应文件的所有属性信息,包括文件索引表。索引表中依次排列着对应的文件所占据的盘块号。

如:通过文件目录;我们找到jeep文件的索引块号为19.然后去19号盘块里拿到jeep文件的索引表,然后获取到jeep文件占据的盘块号。
七.文件控制块和文件目录:

文件控制块:操作系统为每个文件设置了专门的数据结构,称为文件控制块(FCB)。每个文件都有一个文件控制块,他是一个文件的唯一标识,一个文件控制块包含的内容有:文件属性(名、大小、类型,权限等),以及文件索引表。

文件目录:若干个文件控制块的有序集合就构成了文件目录,而每个文件控制块就是文件目录中的一项内容,所以文件控制块也叫目录项。

八.索引结点

因文件控制块的内容较多(比如:每个大小为64B)。而一个盘块的大小只有1KB,那么一个盘块中只能存储16个FCB。那么如果文件目录包含1000个FCB。那么这1000个FCB就需要63个盘块来存储,那我读取某个文件平均需要开启磁盘32次。所以为了减少这种时间开销,所以操作系统决定将文件控制块中文件名和文件的其他描述信息分开存储。对文件名以外的东西单独采用一种数据结构进行存储,这种数据结构就被称为索引结点。然后在文件控制块中只存放文件名和指向索引结点的指针。那么此时。一个FCB可能只有16个字节。1KB的盘块就可以存放64个FCB,对于拥有1000个目录项的文件目录,要查找一个文件平均只需开启磁盘9次。

九.目录结构

现在我们接触的系统基本都是树形目录结构。树形目录结构,有且仅有一个根目录,根目录下面包含了若干个文件或者子目录,如:linux系统。在树形目录中,访问文件需要通过文件的路径名进行。从而实现对文件“按名存取”。

十.文件检索技术

目录管理最基本的功能就是对文件实现“按名存取”。要实现按名存取,系统必须先依次进行下面的操作:

1.根据用户提供的文件名在文件目录上找到该文件的文件控制块,

2.根据文件控制块找到索引结点,从而从索引结点中获取到文件的索引表。

3.根据索引表中列出的盘块号,换算出文件所在的磁盘的物理位置,通过磁盘驱动程序将该文件读入内存。

上面只是介绍对一个文件的检索,那么如果从一串目录中检索出文件呢?

如:有/root/usr/bin/xxx.log 。如何找到xxx.log文件?

1.线性检索法:线性检索又叫顺序检索,其检索思想是从根目录上开始依次从路径名上分离出目录名,在对应的目录文件中进行匹配操作,知道找完所有的目录。步骤如下:

a.从路径名中分离出目录文件root,用它在根目录文件中顺序检索,找到root目录文件的FCB,然后得到root的索引结点。从索引结点中获得索引表,从索引表中获得磁盘块。然后将root目录文件读入内存。

b.从路径名中分离出文件名usr,用他在root目录文件中进行顺序检索,找到usr目录文件的FCB。同上面步骤一样,最后将usr目录文件读入内存

c.同上面步骤一样,依次找到bin目录文件,从bin目录文件中找到xxx.log

2.当然线性检索比较繁琐,现在主要使用的是哈希检索法。此处不介绍。

 

posted on 2017-11-01 12:49  进_进  阅读(220)  评论(0)    收藏  举报