4. 文件系统
长期储存大量信息的三个基本要求:
1. 能够储存大量信息。
2. 使用信息的进程终止时,信息仍旧存在。
3. 必须能够使多个进程并发存取有关信息。
文件的概念:
文件是进程创建的信息逻辑单元。每个文件可以看成是一种地址空间。储存在文件中的信息必须是持久的。
总体上看,操作系统中处理文件的部分称为文件系统(file system)
4.1 文件
4.1.1 文件命名
文件是一种抽象机制,它提供了一种在磁盘上保存信息而且方便以后读取的方法。这种方法可以使用后不必了解储存信息的方法、位置和实际磁盘工作方式等有关细节。
命名规则:
不同系统有不同命名规则,不过所有的现代操作系统都允许用1至8个字母组成的字符串作为合法的文件名。
通常也支持数字和一些特殊字符。
许多文件系统支持长达255个字符的文件名。
不区分大小写——MS-DOS
区分大小写——UNIX这里需要说明一下:Windows 95 是 MS-DOS的文件系统,即FAT-16。Windows98 改进了一下是FAT-32。但是Windows的 NT 2000 xp vista是基于NT操作系统的NTFS有很多不同的性质。虽然也支持FAT类的文件系统。这本书里有很多Unix和MS-系统的介绍。以后基本都省略不会记录。以Linux记录为主
文件拓展名
在某些系统中拓展名只是一种约定。操作系统并不强制采用他们。对于可以处理多种类型的文件,这样的约定是有用的。
4.1.2 文件结构
- 无结构的字节序列
操作系统不关心文件内容,见到的就是字节。含义在于用户程序解释。Unix和Windows都是这样的。 - 具有固定长度记录的序列
每个记录都有自己的内部结构。这是延续打孔时代大型计算机的风格 - 由一棵记录树构成
记录的固定位置上有一个键,按键进行排序。在一些商业系统上有效。
4.1.3 文件类型
通常至少有普通文件和目录,有些还有一些字符特殊文件(character special file)和块特殊文件(block special file)
- 普通文件
包含有用户信息。 - 目录
管理文件系统结构的系统文件。 - 字符特殊文件
和输入输出有关。用于串行IO设备 块特殊文件
用于磁盘类设备。普通文件
一般分为ASCII文件和二进制文件。- ASCII文件
由多行正文组成。每行用回车或换行或回车换行组成。
ASCII文件可以打印,还可以用任何文本编辑器进行编辑。
还可用作输入输出,如shell管道 - 二进制文件
二进制文件具有特殊的内部结构,只有使用该文件的程序才能理解。通常由5个段:
- 文件头:通常包括魔数(magic number,表明这个文件是一个可执行文件),然后是文件中各段的长度、执行的起始地址和一些标志位
- 正文
- 数据
- 重定位位
- 符号位:用于调试
- ASCII文件
所有操作系统必须能够识别他们自己的可执行文件类型。这是为了用户非法执行或改变文件。
4.1.4 文件存取
- 顺序存取
- 随机存取文件(random access file)
- 每次read操作前都给出开始读文件的位置
- 用seek操作设置当前位置,在seek操作后,从这个当前位置顺序地开始读文件。(Unix和Windows)
4.1.5 文件属性
文件属性(attribute)和元数据(metadata)
4.1.6 文件操作
- create
- delete
- open
- close
- read
- write
- append
- seek
- get attributes
- set attributes
- rename
4.2 目录
4.2.1 一级目录系统
4.2.2 层次目录系统
4.2.3 路径名
- 绝对路径名(absolute path name)
- 当前工作目录
每个进程都有自己的工作目录,改变之后不会互相影响,但是库过程例外所以尽可能不要改变库过程的工作路径。及时改变了也要改回原有的工作目录。 - ./..
当前路径和父路径
4.2.4 目录操作
- create
- delete
- opendir
- closedir
- readdir
- rename
- link
这里说明下。连接技术允许在多个目录中出现同一个文件。这个系统调用指定一个存在的文件和一个路径名,并建立从该文件道路所指名字的连接。这样可以在多个目录中出现同一个文件。这种类型的链接为该文件的i节点(i-node)计数器的计数。有时称为硬链接(hard link)。使用两个文件名指向同一个内部数据结构(i-node)
与硬链接相对于的符号连接。所建立的文件名指向了命名另一个文件的小文件。当使用这个文件名的时候使用该新名字启动进程。符号连接的优点在于可以跨越磁盘的界限,甚至可以命名在远程计算机上的文件。不过符号连接的实现不如硬链接那样有效率 - unlink