操作系统-文件系统文件

Posted yangyuliufeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统-文件系统文件相关的知识,希望对你有一定的参考价值。

文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的序列。
系统按名管理和控制文件信息,进程创建文件时必须给出文件名,以后该文件独立于进程存在直到被显式删除。
当其它进程要使用文件时,必须显式地指出相应文件名。
引入文件的优点:
  • 用户使用方便:使用者无需记住信息存放在辅助存储器中的物理位置,也无需考虑如何将信息存放到存储介质上,只要知道文件名,给出有关操作系统要求便可存取信息,实现了“按名存取”
  • 文件安全可靠:由于用户通过文件系统才能实现对文件的访问,而文件系统能提供各种安全、保密和保护措施,故可防止对文件信息的有意或无意的破坏或窃用
  • 系统等有效利用存储空间,优化安排不同属主文件的位置;在文件使用过程中出现硬件故障时,文件系统可组织重新执行或恢复,对由于硬件失效造成的信息破坏可组织转储以加强可靠性
  • 文件可共享:文件系统还能提供文件的共享功能,如不同的用户可以使用同名或异名的同一文件,提高了文件和文件空间的利用率
总之,把数据组织成文件形式加以管理和控制是计算机数据管理的重大进展。
 
文件这一术语不但反映了用户概念中的逻辑结构,而且和存放它的辅助存储器(文件存储器)的存储结构紧密相关。
所以,同一个文件必须从逻辑文件和物理文件两个侧面来观察它。
文件的逻辑结构是从用户观点出发看到的文件的组织形式;文件的物理结构是从实现观点出发,又称为文件的存储结构,是指文件在外存上的存储组织形式。文件的逻辑结构与存储介质特性无关,但文件的物理结构与存储介质的特性有很大关系。
按逻辑结构,文件分为:
  • 流式文件(无结构文件)
文件内的数据不再组成记录,只是由一串顺序的信息集合,称为字节流文件。
流式文件中的每个字节都有一个索引,打开文件的进程使用文件读写指针来访问文件中的特定字节。
许多应用不要求文件内再区分记录,强制分割文件为若干记录只会带来操作复杂、开销大等缺点,Linux系统只提供流式文件。
  • 记录式文件(有结构文件)
记录式文件是一种有结构的文件,它是若干逻辑记录信息所组成的记录流文件。
记录式文件的常用记录组织和使用方式:
(1)记录式顺序文件:文件的记录顺序生成并被顺序访问
(2)记录式索引顺序文件:使用索引表,表项包含记录键和索引指针,记录键由应用程序决定,而索引指针指向相应记录。
可针对特定记录进行存取,也可以顺序访问记录。
记录式文件与数据库的异同:数据库管理系统也支持逻辑记录,但数据库中的记录之间可以通过数据冗余构成某种联系,支持基于联系的数据库查询,文件系统则不行。
逻辑记录的成组和分解:
若干个逻辑记录合并成一组,写入一个块叫记录的成组(一个物理记录只存放一个逻辑记录可能造成极大的浪费),每块中的逻辑记录数称块因子。
系统设置独立于用户数据区的输入/输出缓冲区。记录的成组操作在输出缓冲区内进行,凑满一块后才将缓冲区内的信息写到存储介质上。
当存储介质上的一个物理记录读进输入缓冲区后,把逻辑记录从块中分离出来的操作叫记录的分解操作。
用户读请求,导致包含该逻辑记录的物理块读入输入缓冲区;这一操作可能读入了多个逻辑记录,这一现象称为提前读
用户写请求,首先是写入输出缓冲区,只有当该缓冲区中的逻辑记录满后才会引起实际输出,这一现象称为推迟写
优点:记录成组与分解不仅节省存储空间,还能减少I/O操作次数,提高系统效率
缺点:需要软件进行成组和分解的额外操作,需要能容纳系统最大块长的I/O缓冲区
记录式文件中的记录格式:
一条逻辑记录中所有数据项长度的总和称为此逻辑记录的长度。记录格式有:
(1)定长记录:所有逻辑记录有相同长度,所有数据项相对位置固定。记录可成组也可不成组,成组时除了最末一块,每块中的逻辑记录数固定。在搜索到文件末端且最后一块的逻辑记录数小于块因子时,操作系统就能发现并进行处理。
(2)变长记录:记录式文件中的逻辑记录长度不等,但每条逻辑记录长度处理前能预先确定。包含可变长度或可变数目的数据项时都会造成变长记录。可以在逻辑记录的第一字段指明单个变长逻辑记录的字节个数(含第一字段),第二字段再存放记录信息。
(3)跨块记录:逻辑记录被分割成段写到块中,读出时再做装配,段的分割和装配工作由文件系统自动完成。适用于文件在不同物理特性的设备类型之间传送时。
变长记录处理时,程序员必须知道缓冲区大小,而跨块记录则会由文件系统自动分割和装配跨块逻辑记录的信息段,而这些块不会超过I/O缓冲区的容量。
记录键:对记录式文件中每条逻辑记录指定一个基本数据项(主键,简称键),用于标识这条逻辑记录。
 
文件的物理结构和组织是指文件在物理存储空间中的存放方法和组织关系,这时的文件看作物理文件(相应物理块的集合)。
文件的存储结构涉及块的划分、记录的排列、索引的组织、信息的搜索等许多问题,其优劣直接影响文件系统的性能。 
1) 顺序文件(连续文件)
将一个文件中逻辑上连续的信息存放到存储介质的依次相邻的块中便形成顺序结构,这类文件叫顺序文件,在访问时需要顺序搜索文件。
在对记录进行批量操作时,即每次要读或写一大批记录,顺序文件的效率是所有逻辑文件中最高的,此外,也只有顺序文件才能存储在磁带上,并能有效地工作;但顺序文件对查找、修改、增加或删除单个记录的操作比较困难,建立文件前需要能预先确定文件长度,以便分配存储空间。
批处理文件、系统文件用得较多。
2) 连接文件(串联文件)
连接结构的特点是使用连接字来表示文件中各个物理块之间的先后次序,第一块文件信息的物理地址由文件目录给出,而每一块的连接字指出了文件的下一个物理块位置;连接字内容为0时,表示文件至本块结束
输入井、输出井等都用此类文件
连接文件易于对文件记录做增、删、改,易于动态增长记录,不必预先确知文件长度;存储空间利用率高;但存放指针需额外的存储空间,由于存取须通过缓冲区,待获得连接字后,才能找到下一物理块的地址,因而,仅适用于顺序存取
3) 索引文件
索引文件为每个文件建立了一张索引表,其中,每个表目包含一个记录的键(或逻辑记录号)及其存储地址。索引表的地址可由文件目录指出,查阅索引表先找到相应记录键(或逻辑记录号),然后获得数据存储地址。
索引文件在文件存储器上分两个区:索引区和数据区,访问索引文件需两步操作:第一步查找索引表,第二步获得记录物理地址,需要两次访问辅助存储器,若文件索引已预先调入主存储器,那么,就可减少一次内外存信息交换。
索引结构可以被认为是连接结构的一种扩展,除了具备连接文件的优点外,还克服了它只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增、删、改;但增加了索引表的空间开销和查找时间。
线性索引是静态索引结构,不利于更新,分为:
  • 稠密索引:记录在文件数据表中按加入顺序存放而不是关键码存放。这时的索引文件叫做索引非顺序文件。
  • 稀疏索引:n个记录分为b个子表存放,索引表中的每一索引项纪录了各子表中最大关键码和该子表在文件中的起始位置。
可以把线性索引分块建立多级索引,多级索引结构形成m叉树。
4) 直接文件或散列文件(Hash File)
它通过计算记录的关键字建立与其物理存储地址之间的对应关系,这种变换通常采用散列法 (hash法)。
给定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。
散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。解决办法有
  • 溢出链:发生溢出时将第m+1个同义词放到另一个桶(溢出桶)中,溢出桶与基桶大小相同相互间用指针连接。求得散列地址(基桶编号)后进行顺序查找,查不到时如果基桶未满则不含待查元素,否则根据指针域的值找到溢出桶并将桶中记录读入内存继续进行顺序搜索。
  • 分布式溢出空间:将溢出桶按照一定间隔分布在基桶之间。从基桶走到溢出桶不需移动磁盘活动臂也不需要维护链。
  • 相继溢出法(线性探查法):不设置溢出桶,桶满后放到下一个桶中。
  • 此外还有二次探查法、双散列法、拉链法等
 
文件存取方法是读写文件存储器上的物理记录的方法,在某种程度上依赖于文件的物理结构。
1)顺序存取
按记录顺序进行读/写操作,读操作根据读指针读出当前记录,同时推进读指针,指向下一次要读出的记录;写操作则设置写指针,把一个记录写到文件未端, 同时推进写指针。允许对读指针进行前跳或后退n个记录的操作
2)直接存取/随机存取
很多应用场合要求快速地以任意次序直接读写任意位置的某个记录。例如,航空订票系统,用航班号作标识,把特定航班的所有信息存放在物理块中,用户预订某航班时,直接计算出该航班的存位置
3)索引存取
基于索引文件的索引存取方法。对于这种文件,信息块的地址都可以通过查找记录键而换算出。除可采用按键存取外,也可以采用顺序存取或直接存取的方法。实际的系统中,大都采用多级索引,以加速记录查找过程。
 
文件是计算机系统的重要资源,因此,要求文件系统具有保障文件安全的手段,提供文件保密的措施,有效地实现文件的共享:
文件共享是指不同用户共同使用某些文件。在允许文件共享的系统中,操作系统应提供手段实现对共享文件的同步控制。多个进程可能同时存取一个文件:
  • 如果它们同时进行读操作,操作系统应对文件进行公用控制
  • 如果有进程进行写操作,例如,有两个进程,进程A要求修改文件,同时进程B要求读出同一文件中的数据,则操作系统必须提供同步控制机制,以保证文件数据的完整性
  • 操作系统应该严格禁止两个进程同时执行写操作
文件保密是指文件及其内容不能被未经文件主授权的其他用户窃取,文件的保密措施有:使用密码、设置口令、隐蔽文件目录
文件保护是指防止文件被破坏,操作系统必须提供文件保护机制,有效实现文件的完整性,常用的文件保护办法:
  • 文件副本
文件系统必须要有防止硬软件故障,保存信息完整性的能力,文件副本是主要实现机制,主要通过动态多副本技术、转储、备份与恢复
动态多副本技术:在多个介质上维持同一内容的文件,并且在更新内容时同时进行。这种方法需要增加设备费用和系统负载,一般适用于容量较小且较为重要的文件,例如不需更新的系统文件及专用文件,当文件发生故障时只要切换到备用设备就可以。
文件转储:定时把文件复制转储到其它介质上,当某介质上出现故障时,复原转储文件,转储又可分成两种方式:一是在一定时间间隔或一个单位处理结束时,系统自动复写更新过的文件和数据;二是每天或每周把文件信息全部复写一遍,需要时再通过装入转储文件来恢复系统,诸如BACKUP、RESTORE等命令
  • 文件存取矩阵与文件存取表
存取属性:可以有访问、读、写、执行、创建、删除、授权等等,系统通过查阅文件存取矩阵/表核对用户对文件的存取权限。文件属主使用GRANT、REVOKE等命令进行授权,甚至把授权权转授给他信任的用户
系统管理用户(超级用户)等同于文件属主权限,并获得对系统文件的授访问权权限
文件存取矩阵:系统为每个用户设置访问每个文件对象的存取属性,系统的全部用户对全部文件的存取属性就组成的一个二维矩阵,称为存取控制矩阵
文件存取表:由于操作系统拥有很多用户和众多文件,存取控制矩阵是一个稀疏矩阵,可以将其简化为一张存取控制表。每行包括:用户、文件、存取属性。存取控制表仅登记那些对文件拥有存取属性的部分。
  • 文件属性
用户分类:属主、合作者、其他
文件属性:读、写、执行、… 
文件属性可以放在文件目录项中,是存取控制矩阵/表的简化,用户分类,再针对每类用户规定文件属性
用户使用文件时,通过核对文件属性,实现保护

以上是关于操作系统-文件系统文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件系统的文件系统

Linux里面文件系统都有哪些?

常见的文件系统都有哪些?

Android 文件系统中添加文件及添加系统属性

操作系统-文件系统文件系统

docker联合文件系统