一、文件和文件系统

文件是指具有文件名的若干相关元素的集合。

1、现代OS中通过文件系统来组织和管理计算机中存储的数据;

2、文件系统包括两方面
(1)负责管理文件的系统软件
(2)被管理的对象—文件

二、文件的结构

文件存在以下两种形式的结构:

1、文件的逻辑结构
从用户观点出发所观察到的文件组织形式是用户可以直接处理的数据及其结构,它独立于文件的物理特性,又称为文件组织。

2、文件的物理结构
又称为文件的存储结构,是指文件在外存上的存储组织形式。与存储介质的存储性能和采用的外存分配方式有关。

1、文件的逻辑结构

可以分为两大类:
(1)有结构文件:是指由一个以上的记录构成的文件,又把它称为记录式文件;根据记录的长度可分为定长记录文件;不定长记录文件。
(2)无结构文件:这是指由字符流构成的文件,故又称为是流式文件。

有结构文件

根据记录的组织方式分为下列文件:
(1)顺序文件:由一系列记录按某种顺序排列所形成的文件。通常是定长记录。
(2)索引文件。当记录可变长时,通常为之建立-张索引表,并为每个记录设置一个表项以加快对记录检索的速度。索引顺序文件。上述两种方式的结合。为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项。
(3)直接文件

无结构文件

1、如果说大量的数据结构和数据库,是采用有结构的文件形式的话则大量的源程序、可执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。其长度以字节为单位对流式文件的访问,则是采用读写指针来指出下一个要访问的字符。
2、UNIX 系统中,所有的文件都被看做是流式文件。

2、文件的物理结构

由于磁盘具有可直接访问的特性,故当利用磁盘来存放文件时具有很大的灵活性。

常用的外存分配方法有:
(1)连续分配
(2)链接分配
(3)索引分配
在一个系统通常只采用一种方法。

连续分配

连续分配要求为每个文件分配一组相邻的盘块。在采用该方式时,可把逻辑文件中的记录顺序的存储到邻接的各物理块中,这样所形成的文件结构成为顺序文件结构,此时的物理文件称为顺序文件。这种分配方式保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序的一致性。

随着文件的建立与删除不断进行,将产性很多外存的碎片利用紧凑方法也可消除碎片。

链接分配

采用链接分配方式时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的文件称为链接文件。

操作系统核心之 文件管理_OS

索引分配

链接分配方式虽然解决了连续分配方式所存在的问题,但又出现了另外两个问题:

不能支持高效的直接存取。要对一个文件进行直接存取,需首先在FAT中顺序的查找许多盘块号。

FAT需占用较大的内存空间。当磁盘容量较大时, FAT可能要占用数MB以上的内存空间。这是令人难以忍受的。(FAT是文件配置表(英语:File Allocation Table,首字母缩略字:FAT),是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的微软窗口使用的文件系统。)

索引分配方式示意图
单级索引方式

操作系统核心之 文件管理_文件结构_02

多级索引方式

操作系统核心之 文件管理_文件结构_03

混合索引方式

索引分配方式的问题
可能要花费较多的外存空间。每当建立一个文件时,便须为之分配一个索引块,将分配给该文件的所有盘块号记录于其中。

例1:某文件系统采用多级索引结构,若磁盘块的大小为512字节, 每个块号需占3字节,那么根索引采用一级索引时的文件最大长度为( A )K字节;采用二级索引时的文件最大长度为(C)K字节。
A. 85      B.170      C.512      D.1024
A. 512    B.1024    C.14450  D.28900

题解:磁盘大小512字节,没块需3字节,512字节/3字节=170,因为是一级索引 最大长度占满512,170*512字节=87040字节,1k=1024字节,87040字节/1024字节=85K字节。
二级索引170*170*512字节=14796800字节,1k=1024字节,14796800字节/1024字节=14450K字节。

三、存储空间的管理

空闲表法和空闲链表法

位示图法

成组链接法

位示图:顺序扫描位示图。以找到一个或一组其值为“0”的二进制位;

操作系统核心之 文件管理_操作系统_04

例2:某文件管理系统在磁盘上建立了位示图(bitmap),记录磁盘的使用情况。若系统的字长为32位,磁盘上的物理块依次
编号为:0、1、2、...那么4096号物理块的使用情况在位示图中的第(A)个字中描述;若磁盘的容量为200GB,物理块的大小为1MB,那么位示图的大小为(D)个字。
A.129      B.257      C.513      D.1025
A.600      B.1200    C.3200    D.6400

题解:因为系统字长为32位,编号0就是0-31,1就是32-63...,4096号就是4096/32=128,因为从0开始算128+1=129。
容量200G物理块的大小为1MB,200GB是200*1024=204800MB,一个字长32位,204800MB/32位=6400。