操作系统原理(三)——文件系统(File system)
文件系统(File system)
1. 文件
首先要说文件的定义,文件是进程创建的信息逻辑单元。
由于磁带和光盘的性能较低,磁盘使用的较多。这里讨论文件储存在磁盘中的情况。磁盘可被认为是固定块儿大小的线性序列。
在操作系统看来,文件就是一个个字节流,操作系统不管这个文件的内容(不管它是.mp3音频文件,或者.jpg图片文件,在应用程序看来才有这种区分)。文件在操作系统眼中只有3种:普通文件、目录文件、特殊文件。
文件的命名:
在Linux中,文件名大小写敏感;目录分隔符“/”绝对不能出现在文件名中。
在Windows中,文件名大小写不敏感;盘符“:”绝对不能出现在文件名中(其实还有很多符号不能出现在文件名中...Linux不清楚其他限制)。
应用程序识别文件类型:
Windows:扩展名;
Linux:文件头部。
2. inode
文件系统中,有一个叫inode的结构,它与真实的文件一一对应,用来记录这个文件的各种属性:权限、所有者、创建时间、最近修改时间等等。
2.1 inode的作用
已经提过inode用来记录文件属性,更用来记录文件在磁盘中的位置,要找到文件必须通过它的inode。每一个inode都有唯一的编号。目录文件的内容就是文件名和其对应的inode。没错,文件名是储存在它的上层目录中的,所以对文件夹有写权限的用户可以任意删除此文件夹中的内容,即使这个用户对被删除的文件没有任何权限。
inode中还保存着文件的大小,以及文件在系统中的储存位置,那么它怎么储存文件在磁盘上的位置呢?进一步看inode的结构。
2.2 inode的结构
一个文件的可能会占一个、多个或很多很多的块儿。在ext2文件系统中,一个磁盘块儿的大小为1K,一个inode占用128Bytes,其中60个字节用来存指针,指向文件在磁盘中的位置。每个指针需要4个字节,共15个指针。文件可能占用很多很多的块儿,15个指针被设计为:
前12个指针:直接指针,指向文件在磁盘中的位置,可表示最大12K的文件;
第13个指针:间接指针,指向一个磁盘块,这个内存块中储存着1024 / 4 = 256个直接指针,容量256K;
第14个指针:二级间接指针,指向一个磁盘块,这个内存块中储存着1024 / 4 = 256个间接指针,容量256 * 256K = 64M;
第15个指针:三级间接指针,指向一个磁盘块,这个内存块中储存着1024 / 4 = 256个二级间接指针,容量256 * 256 * 256K = 16G;
故ext2文件系统最大支持12K + 256K + 64M + 16G ≈ 16G的文件。
3. 硬连接(Hard links)和软连接(Soft links)
连接用于文件共享。连接分为硬连接和软连接。
硬连接,多个文件名对应同一个inode。当一个inode对应的文件名个数为0时,这个inode和对应的文件才会被真正删除。即若文件a和b指向同一个inode,这时删除文件a,这个文件并不会被真正删除,因为还有文件名b指向这个inode。硬链接不能跨磁盘,不能跨文件系统。
软连接,又叫符号连接(symbolic link),创建一个文件,这个文件包含了另一个文件的路径名,这个文件对应一个inode。即文件a指向一个inode,创建一个软连接b指向a。这时删除a,文件会被真正删除。b依然存在,但是已经失效。符号连接只是一个引用,或者一个快捷方式。符号连接可以跨磁盘,可以跨文件系统。