现代操作系统——文件系统

文件模型

文件是进程创建的信息逻辑单元,是一组相关数据的集合。文件提供了一种在磁盘上保存信息而且方便以后读取的方法。

操作系统中对文件进行管理的部分称作文件系统。

文件类型

文件可以分为普通文件(ordinary)和目录(directory)。UNIX操作系统中还有字符特殊文件(character special file)和块特殊文件(block special file)。

文件命名

对于文件的使用要求是按名存取,进程可以通过文件名对文件进行存取。

Windows和UNIX系统中的文件命名会有一些区别:
◉Windows对文件名中的大小写是不敏感的,但是UNIX对文件名的大小写是严格敏感的;
◉UNIX系统中,由圆点开头的文件属于隐藏文件,默认是看不到的;
◉Windows系统中,原点后的部分称作文件扩展名,可以用来表示文件的一些信息,例如扩展名可以指示那些程序可以运行;但在UNIX系统中是不存在扩展民的概念的,系统会查看文件的内容来区分文件是属于什么种类的文件,如果硬是要有,也只是约定俗成的规定,系统并不强制采用。

文件结构

操作系统并不清楚文件的具体结构,在操作系统的角度,文件就是一串字节流,对文件内容含义的解释都是用户程序的事。

文件结构主要有三种:字节序列记录序列

文件属性

操作系统还会保存一些与文件相关的信息,比如文件的创建日期,文件大小等,称作文件的属性。下图是一些常见的文件属性:
在这里插入图片描述
前四个属性与文件保护相关,指明了谁可以访问。
标位是一些位或短字段,用于控制和启用某些特殊属性。
当前字段大小是指当前文件的大小。

在UNIX系统中,通过i节点(inode)来储存文件的属性。在后面目录内容的时候详说。

文件操作

对文件能够进行的基本操作有创建,删除,打开,关闭,读,写,搜索,重命名等。

文件存储的实现

连续分配

在这里插入图片描述
连续分配是指将文件组织成连续的若干数据块存储在磁盘上。

这样实现的好处是易于实现而且性能较高,对于文件的读操作只需要单个操作即可,只要找到第一个块就可以对文件的内容进行随机的访问。

缺点也很多,首先连续存储的方式就注定了不易修改,一个文件的修改可能会引起很多文件的连锁改动。其次随着时间的推移,磁盘会变得碎片化,像上图b)中的那样,磁盘空间变成了文件—空洞的序列。

这种方式一般只适用于存储之后不怎么进行修改的文件,比如DVD在刻录之后,内容就不变了。

链表分配

如下图:
在这里插入图片描述
以磁盘块的方式存放文件,在每个块的第一个字节留一个指针指向下一个磁盘块。

这样的好处是便于修改,而且不会因为文件的增删而产生空洞。
但是,在链表分配方案中,随机访问会变得很慢(链表就是这样的),顺序读文件没有影响。

多级索引(UNIX)

如下图:
在这里插入图片描述

目录(directory)

文件系统通常提供目录(directory)或文件夹来记录文件的位置。而目录本身也是一种文件,它可以用来存放其他的文件。

一级目录系统

如下图就是一个一级目录系统:
在这里插入图片描述
它的特点是只有一个根目录,其他文件都放在根目录下,对于早期只有一个用户的操作系统是很常见的。
单层目录系统的优点是可以快速地定位文件(只需要查看根目录即可),缺点是当文件很多很多的时候,寻找文件就变得很困难。

层次目录系统(Hierarchical Directory System)

下图就是一个参差目录系统的:
在这里插入图片描述
通过树的方式将文件进行自然分组。

路径名

采用树这种方式时,就需要一种方法来指明文件名。
■绝对路径名:从根目录到文件组成。不同的系统,目录之间的分隔符不同,UNIX系统是"/",Windows系统是“\”。

■相对路径名:相对路径名是指文件相对当前目录的路径名。

■当前目录(又叫工作目录):用户可以指定任何一个目录当工作目录。对进程而言,切换工作目录是安全的,只要有需要,一个进程切换工作目录不会对其他进程产生影响。但是如果改变库过程的工作目录(/usr/bin),有可能会导致其他程序无法运行。

层次目录系统的目录中都有两个特殊的目录项“.”和“…”,被称作“dot”和“dotdot”,被分别用来指当前目录和父目录(根目录的父目录指向自己)。

目录操作

目录的创建,删除,打开,关闭,重命名,链接(link),删除目录项(unlink)等。

目录的内容

目录作为一种不同于普通文件的文件,里面存放了目录下文件名与inode的对应关系。

在inode表中的每个inide节点中,记录了文件的相关属性(inode编号,二年间类型,链接数,用户,组,最新修改时间,大小,以及一个指向数据块的指针域)。

在这里插入图片描述
上图就是一个目录和一个inode表,目录与文件(inode)的关系称为链接。那么就涉及到两种链接类型:硬链接(hard link),符号链接(symbolic link)。

链接

■硬链接(hard link)
硬链接创建的文件与源文件有不同的文件名和相同的inode(本质上是一个文件),使用指令“ln 源文件 目标文件”创建硬链接,使得目录项中增加一项与源文件inode相同的项,同时该inode节点的link计数器加1。

◉硬链接建立后,两个目录项互为硬链接
◉两个硬链接等效,删除其中一个不影响另一个,也不会导致文件删除
◉不能以目录为硬链接的目标(容易成环,层次文件系统要求是有向无环图),不能跨文件系统(比如Windows中的C盘和D盘就属于不同文件系统)
◉每个目录下指示当前目录和父目录的目录项就是两个硬链接;在目录中创建新的文件夹会使得当前目录的inode节点link计数器加1

■符号链接(symbolic link)
符号链接(又叫软连接)创建的文件与源文件有不同的文件名和inode,使用指令“ln -s 源文件 目标文件)创建符号链接,使得目录项和inode中都增加一项,但新创建的inode节点的指针域不指向数据块,而是指向目录表中源文件的表项(相当于创建了一个快捷方式)。

◉删除符号链接对源文件无影响;删除源文件,符号链接不会消失但无法使用
◉符号链接可以跨文件系统
◉符号链接的文件类型(type)是”l“

关于硬链接和符号链接的示意图:
在这里插入图片描述
通过符号链接可以实现共享文件:
在这里插入图片描述

文件的权限

■用户和组
用户和组是多对多的关系,一个用户可以属于多个组,一个组下也可以包含多个用户,但是每个用户只有一个主要组。

文件只有一个拥有者(owner),一个文件只属于一个组。文件创建的时候,创建者会成为文件的主人,创建者所在的主要组会成为文件的组。

只有root用户才能改变文件的owner和group。

文件的权限只能由文件的主人和root更改。UNIX下可以使用指令chmod更改,或者umask来设置。

根据上述用户和组的关系,可以把访问文件的人分成三类:
1.文件拥有者
2.主要组中的其他成员
3.其他用户

系统为三类访问用户分别设置权限,如下图所示:
在这里插入图片描述
用指令查看到的信息,前10位表示文件类型和各类访问者的权限。

对于一般文件和吗,目录,各个权限的含义可能有所不同,如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值