您的位置:首页 > 其它

文件系统笔记八、文件系统的性能

2018-03-14 10:20 288 查看

文件系统笔记八、文件系统的性能

引言:在之前的两篇笔记文件系统笔记六、文件系统布局及数据存储文件系统笔记七、文件目录、属性、共享、挂载的实现方式,介绍了设计一个文件系统需要考量的因素及相关实现。本篇笔记将介绍文件系统的性能及其保障机制。

文件系统笔记八、文件系统的性能
一、访问控制能力
1.1、访问控制能力需求

1.2、主动控制:访问控制表

1.3、被动控制:能力表

1.4、保护域

二、文件系统可靠性
2.1、持久性:

2.2、一致性:

三、文件系统的效率

一、访问控制能力

1.1、访问控制能力需求

  我们在内存管理时讲过,多道编程一个重要课题就是进程之间的相互保护,即一个进程不能访问另一个进程的空间。也就是说,一个进程的数据不能被另外一个进程随意访问。这种进程地址空间保护可以通过段表、页表和动态地址翻译实现。但是把这个数据存放到磁盘后,动态地址翻译就无法保护这些数据了。那么这些存放在文件里面的数据就存在被任何人或程序修改的危险。这显然是不能容忍的。

  对文件里面的数据进行保护使得文件数据不能被任意访问是文件系统必须解决的一个问题,而文件系统解决这个问题的方法就是文件系统的访问控制(access control)。

  在人类社会中,军事重地或者关键设施的保护通常有两种模式:第一种是在军事禁区设置哨兵,哨兵依据某种规则来确定某个人是否可以访问禁区;第二种办法是设置安全门,有权限访问的人都备有通过安全门的钥匙;这两类保护措施,哨兵是从被保护设施出发,访问权限在设施上;而钥匙是从用户角度来实施的,访问控制在用户身上

1.2、主动控制:访问控制表

  主动控制将保护措施构建在保护者身上,对于文件系统来说,我们为每个文件设置一个哨兵,这个哨兵对试图访问该文件的用户进行检查,看看其是否能够访问。这个检查的规则存放在一张表里面,这个表称为访问控制表。这个表存放在内核空间,对于每个具有访问权限的用户设置一个记录,该记录记载着用户的ID和具体的访问权限,如读、写、执行、复制等。



[align=center]图1、访问控制表[/align]

  在图1中,文件F1的访问控制表为:“A”:RW;B:“X”,这意味着用户A可以对文件F1进行读写访问,而用户B可以对文件进行执行访问,用户C不能访问文件F1.其他依此类推。

  这样,在每次访问前,操作系统将检查这个访问控制表来确认一下用户数是否有权执行其所有的操作。如果用户ID在访问控制表里,且其权限与要求匹配,则操作执行,否则操作终止。访问控制表里的用户不一定是个体用户,可以是集体用户,文件也不一定是个体文件名,可以是文件集合。

  访问控制表的优点是容易理解和实现对个体用户的权限赋予与取消也容易。缺点是效率低,每次访问文件均需要访问控制表,另外访问控制表可能被修改,可靠性不高

1.3、被动控制:能力表

  其基本思想是,如果一个计算机程序需要访问一个对象,该程序必须具备一个特殊的令牌。该令牌记录程序可进行的操作。一个用户可以拥有多个对象的访问能力,这些能力存放在一起,形成一张能力表。这个表为该用户具有访问权限的文件设置一个记录,记载着文件名和具体的访问权限:如读、写、执行、复制等等。



[align=center]图2、能力表[/align]

在图2中,用户A的能力表为F1:R; F2:R,意味着用户A可以对文件F1和F2进行读访问。依次类推。

  与访问控制表一样,能力表也是存放在内核空间,由操作系统进行设置与访问。用户不能直接修改能力表。在每次访问前,操作系统将检查这个能力表来确认一个用户是否有权执行其所要求的操作,如果该用户要访问的文件在其能力表里,且其权限与要求操作匹配,则执行,否则终止。当然能力表的文件名不一定为个体文件名,可以为文件集合。用户也不一定是个体用户ID,可以是用户集合。

  能力表的优点是效率高,如果用户要访问的文件是能力表指向的文件,则无需进行任何检查。其次,能力表有较好的封装,用户和可访问的文件可存放在一个列表里面,其缺点是删除文件对象困难,如果要禁止用户对某个文件的访问,要遍历其能力表删除。

1.4、保护域

  访问控制表和能力表的一个共同缺点就是针对个体文件的文件需要设置个体的访问控制,保护域将访问控制权限一致的文件和对象组织成一个域,每个进程都运行在一定的域中,从而有可以访问该域里面的文件和对象的权限。



[align=center]图3、拥有三个保护域的文件系统[/align]

二、文件系统可靠性

  文件系统的可靠性体现在两个方面:持久性和一致性。持久性,经久耐用,就是存放在文件系统里面的文件一万年都不变。一致性则指里面存放的数据必须是好的。下面分别解释二者概念及保障机制。

2.1、持久性:

  持久性指保存的数据持久,其单单依靠文件系统难以实现。由于多种可能会造成数据损坏,实现持久性的手段主要是备份和复制。数据备份,就是制作多余的数据副本,并保存在分开的存储介质上。备份是一个很大的课题,可以参考书籍《有备无患:信息系统之灾难应对》一书。

2.2、一致性:

2.2.1、非一致性问题:

  数据一致性,要求数据是好的,意味着数据必须彼此之间保持一致。在文件系统里,建立一个新文件是一个十分频繁的操作。第一步,需要建立文件的I-NODE,将I-NODE写入磁盘;第二步、将I-NODE磁盘地址和文件名写入该文件所属文件夹里。如果在这些操作中间发生系统崩溃,则文件系统可能就出现不一致。这里有两个新的概念:

1)、孤儿文件:在I-NODE写入磁盘后,把I-NODE的磁盘地址和文件名写入该文件所属文件夹前发生系统故障,出现“孤儿文件”。即文件不在文件系统(目录),却在磁盘上。孤儿文件导致有效的文件,无法访问和占用磁盘空间

2)、魅影文件:把I-NODE的磁盘地址和文件名写入该文件所属文件夹,但I-NODE写入磁盘前系统故障,即文件在文件系统里出现(在目录中),却没有在磁盘上。其危害是占用文件目录项,使得有用的文件可能没地方放

2.2.2、一致性方式:日志、事务和随影

1)、日志(logging):将文件操作全部记录下来,存放在一个不同的地方,这个地方称为日志。当这些数据全部写完后,在日志最后写上完毕(commit)。在这之后,就可以将日志里面的数据往源文件里写,确保数据一致性。



[align=center]图4、依据自己理解画的日志简图[/align]

  如果在写入“完毕”前任何时候出现故障,则新的数据被丢弃(日志不更新),源文件的数据保持不变。如果在写入“完毕”后发生故障(写入完毕,日志已经更新),系统恢复后,将新数据向源文件里继续写就是(已经记录下写到了哪里,可以保证连续和完整性)。

2)、事务:一个“事务”是一组操作,事务机制可以确保这一组操作要么全部发生,要么一个都不发生。如下图4所示,磁盘写操作1、2、3要么全部发生,要么一个都不发生,事务实际上就是将一组操作变为原子操作,其需要硬件的支持。



[align=center]图5、依据理解画的事务图[/align]

  事务与日志原理类似,其也保存了一个记录步骤与结果的机制,区别在于,在日志向磁盘源数据进行写操作时,硬件机制保障为原子操作,要么全部完成,要么为0。

3)、随影:日志和事务虽然可以提供数据一致性,但是他们有一个共同的问题,就是磁盘写操作均记录在一个不同的地方,在完毕后需要将数据拷贝到源数据处,这样源数据是不断变化的,其他应用无法使用,如果拷贝时间较长,则等待时无法忍受的。随影的原理很简单,其保持两个数据版本,通过一个指针告诉用户和应用软件,当前使用哪个版本的数据,当需要更新时,将更新写到非当前使用的版本。



[align=center]图6、依据理解画的随影图[/align]

  当使用源数据的应用读取版本1的数据,即图中红色箭头流通时,更新源数据版本2,同理当读取版本2的数据,即蓝色箭头流通时,更新版本1的数据。更新完毕后,修改指针,另应用使用新的版本数据,再更新另外一个。这样的好处是降低了用户等待,且保持一致性,坏处是带来了空间消耗,因为要维护两个版本数据。

2.2.3、一致性检查:

内容:没有魅影文件、没有孤儿文件、I-NODE里面的链接计数域其在文件系统不同位置次数一致、没有消失空间、没有额外空间

机制:空闲空间表与占用空间表比对

三、文件系统的效率

  文件系统另外一个需要考量的因素,即其效率问题,当然提高磁盘访问速度的办法就是提高磁盘的物理特性(旋转、寻道等)。但是磁盘物理特性存在上限,且不属于操作系统设计人员考虑的范畴。对于文件系统,其可行的方式包括:将经常访问的文件置于缓存、减少磁盘访问时磁臂移动的距离、提前将需要的内容读入内存。这里不再详述。

参考资料:

1、《操作系统的哲学》 邹恒明 著

纠错与建议

邮箱:db_hebut@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: