操作系统对存储设备的物理属性加以抽象,从而定义逻辑存储单位,即文件。文件由操作系统映射到物理设备上,这些存储设备是非易失的。文件是记录在外存上的相关信息的命名组合。从用户角度来看,文件是逻辑外存的最小分配单元,也就是说,数据只有通过文件才能存储到外存。文件的类型有很多,比如文本文件为按行组着的字符序列、源文件为函数序列,每个函数包括声明和可执行语句、可执行文件为一系列代码段,以供加载程序调入内存并执行。
为了标示文件的各种特定信息,需要文件属性来存储文件的特定信息。文件属性因操作系统而异。但是通常包括:
有些文件系统还支持扩展文件属性,包括文件的字符编码和安全功能,如文件的校检和。所有的文件的信息保存在目录结构中,该目录结构保存在外存中。
为了正确的定义文件,操作系统可以提供系统调用,来对文件进行:创建、写入、读取、重新定位、删除、截断文件等操作。
在首次使用文件之前进行系统调用open(),操作系统有一个打开文件表用来维护所有打开文件的信息,open()根据文件名搜索目录,将目录条目复制到打开文件表。当文件不在使用的时候,进程关闭该文件,操作系统从打开文件表中删除它的条目。
当多个进程可以同时打开文件的环境,这可能会发生操作系统采用两级的内部表:每个进程表和整个系统表。每个进程表跟它打开的所有文件,该表存储的是进程对文件的使用信息。
单个进程表的每个条目相应的指向整个系统的打开文件表。系统表包含与进程无关的信息。系统打开文件表为每个文件关联一个打开计数,用来表示多少进程打开了这个文件。当打开计数为0时,可以从系统打开文件表中删除这个文件条目。
每个打开文爱你具有如下的关联信息:
有的操作系统提供文件锁,用于一个继承锁定文件,防止其他进程访问它。
文件锁一般有联众类型:
有的操作系统还提供强制和建议文件锁定机制。如果锁定方案是强制性的,那么操作系统确保锁定完整性;如果锁是建议的,软件开发人员应该确保适当的获取和释放锁,比如Windows采用强制锁定,而UNIX采用建议锁定。
设计文件系统时,需要考虑系统是否应该识别和支持文件类型。如果系统识别文件的类型,则它就能按合理的方式来操作文件。一般文件名分为两部分,即名称和扩展。
UNIX系统采用位于某些文件开始部分的幻数,大致表明文件类型,不是所有问阿金都有幻数,所以系统特征不能仅仅基于这种信息。UNIX也不记录创建程序的名称。UNIX允许文件名扩展提示,但是操作系统不强制也不依赖这些扩展名;这些扩展名主要帮助用户确定吧文件内容的类型。
文件类型也可用于指示文件的内部结构。但是操作系统支持多个文件结构会带来一个缺点:操作系统会变得太复杂。有写操作系统强加(并支持)最小数量的文件结构。UNIX认为每个文件为8位字节序列,而操作系统不必对这些位做出解释。
磁盘系统通常具有明确定义的块大小,这是由扇区大小决定的。所有的磁盘I/O按块(物理记录)为单位执行,所有的块的大小相同。物理记录大小不太可能刚好匹配期望的逻辑记录的长度,逻辑记录的长度甚至可能不同。解决方法是,将多个逻辑记录包装到一个物理块中。
一个存储设备可以按整体来用于文件系统,也可以进行细分来提供更细粒度的控制。比如,一个磁盘可以划分为四个分区,每个分区可以有单独的文件系统。存储设备还可以组成RAID集,一起提供保护以免受到单个磁盘故障。包含文件系统的分区通常称为卷。卷可以是设备的一部分,或整个设备,或由多个设备组成的RAID集。包含文件西荣的每个卷也应包含有关系统内的文件信息,这些信息保存在设备目录或卷目录表中
通用计算机系统有多个存储设备,这些存储设备可以分成保存文件系统的卷,计算机系统可能没有文件系统,也可能有多个文件系统,而且文件系统的类型可以不同。
一些常见的文件系统类型:
目录可视为符号表,可将文件名称转成目录条目。常见考虑特定的目录结构的时候,需要对目录执行的操作如下:
最容易实现的就是单级目录,所有文件都包含在同一目录中。但是当文件数量增加或系统有多个用户的时候,单级目录有重要的限制。
为每个用户创建一个单独的目录(UFD)。同时系统有一个主文件目录(MFD),通过用户名或账户可以索引MFD,每个条目指向该用户的UFD。当用户引用特定文件时,只搜索自己的UFD。这种数据结构将一个用户和其他用户相隔离,但是当用户需要在某个任务上进行合作并且访问彼此文件时,隔离确是个缺点。
树形目录是最常见的目录结构,有一个根目录,系统内每个文件都有唯一的路径名。目录包括一组文件和子目录,目录只不过是一个文件,但是他是按照特殊方式处理的,每个目录条目都有一位来将条目定义为文件或子目录。
树结构截止共享文件或目录。无环图(就是没有循环的图)允许目录共享子目录和文件。同一文件或子目录可出现在两个不同的目录中。无环图是树形目录方案的自然扩展。
实现共享文件和目录的方法有多个:
实现共享目录和文件时会涉及到删除,即共享文件的分配空间何时可以被释放和重用:
在UNIX和Linux中的硬链接采用的就是第二种方法,而软链接采用的是第一种方法。
无环图目录保证了结构中不存在环,如果允许目录中有环,则无论从正确性和性能角度来说,同样需要避免多次搜索同一部分。如果存在环时,即使不再坑你引用一个目录或文件时,引用计数也可能不为0,这种情况下通常需要垃圾收集方案,确定何时最后引用已被删除并重新分配磁盘空间。
本文发布于:2024-01-29 19:29:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652775617741.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |