文件的属性
1:文件名,由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
2:标示符,一个系统内的各文件标示符唯一,对用户来说毫无可读性。因此标示符只是操作系统用于区分各个文件的一种内部名称。
3:类型,指明文件的类型
4:位置,文件的存放路径,在外存中的地址。
5:大小,指明文件大小
6:创建时间,上次修改时间。
7:文件所有者信息
8:保护信息,对文件进行保护的访问控制信息
文件的逻辑结构
在用户看来文件内部的数据应该是如何组织起来的。
顺序文件
索引文件
为文件建立一个索引表,每个记录对应一个表项,各记录不用保持顺序,方便增加/删除操作。
索引顺序文件
将记录分组,每组对应一个索引表项
检索记录时先顺序查索引表,找到分组,再顺序查找分组
当记录过多时,可建立多级索引表
文件目录
文件控制块(FCB)
实现了文件名和文件之间的映射。使用户可以实现“按名存取”。
可以实现对目录的搜素、创建文件、删除文件、显示文件、修改文件。
索引节点(FCB的改进)
在查找各级目录的过程中,只需要用到“文件名”这个信息,只有文件名出现匹配时,才需要读出文件的其他信息。因此可以考虑让目录“瘦身”来提升效率。
文件的物理结构
文件的数据怎样存放在外存(磁盘)中。
连续分配
连续分配方式要求每个文件在磁盘上占有一组连续的块。
优点:支持顺序访问和直接访问;连续分配的文件在顺序访问时速度最快
缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片。
链接分配
链接分配采取离散分配方式,可以为文件分配离散的磁盘块
- 隐式链接:
除文件的最后一个盘块外,每个盘块中都存在指向下一个盘块的指针。文件目录包括文件的第一块指针和最后一块指针。
只支持顺序访问,不支持随机访问,查找效率低。
- 显式链接:
把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表。
索引分配
允许文件离散地分配在各个磁盘中,系统会为每一个文件建立一张索引表,索引表中记录了各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
① 链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。但是若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到i号索引块,必须先依次读入0~i-1号索引块,这就导致磁盘I/O次数过多,查找效率低下。
② 多层索引:建立多层索引。使第一层索引块指向第二层索引块。还可根据文件大小的要求在建立第三层,第四层索引块。采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。缺点是即使是小文件,访问一个数据块依然需要K+1次读磁盘。
③ 混合索引:多种索引方式的结合。例如,一个文件的顶级索引表中,即包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表),还包含两级间接索引。这对于小文件来说,访问一个数据块所需的读磁盘次数更少。
存储空间的管理
存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘等),例如C盘,D盘,E盘等。目录区包含文件目录。空闲表,位示图,超级块等用于文件管理的数据。
文件的操作
1:创建文件 – create系统调用
所需参数:
- 所需外存空间大小
- 文件存放路径
- 文件名
调用行为:
- 在外存中找到文件所属空间
- 根据文件存放路径的信息找到该目录对应的目录文件
2:删除文件 – delete系统调用
所需参数:
- 文件存放路径
- 文件名
调用行为:
- 根据文件存放路径找到对应的目录文件,从目录文件中找到文件名对应的目录项
- 根据该目录项记录的文件在外存中的存放位置、文件大小等信息,回收文件占用的磁盘块。
- 从目录表中删除文件对应的目录项
3:打开文件 – open系统调用
所需参数:
- 文件存放路径
- 文件名
- 要对文件的操作类型
调用行为:
- 根据文件存放路径找到对应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否有指定的操作权限。
- 将目录项复制到内存中的“打开文件”中。并将对应表目的编号返回给用户,之后用户使用打开文件表的编号来指明要操作的文件。
打开计数器:记录此时有多少个进程打开了此文件。
4:关闭文件 – close系统调用
调用行为:
- 将进程的打开文件表响应表项删除
- 回收分配给该文件的内存空间等资源
- 系统打开文件表的打开计数器count-1若count==0,则删除对应表项
5:读文件 – read系统调用
所需参数
- 指明是哪个文件
- 指明要读入多少数据
- 指明读入的数据在内存中的什么位置
调用行为
- 会从读指针指向外存中,将用户制定大小的数据读入永续指定的内存区域中。
6:写文件 – write系统调用
所需参数
- 指明是那个文件
- 指明要写入多少数据
- 指明写回外存的数据在内存中的位置
调用行为
- 会从用户指定的内存区域中,将制定大小的数据写回写指针指向的外存中。
文件共享
操作系统为用户提供了文件共享的功能,可以让多个用户共享地使用同一个文件
索引结点:是一种文件目录瘦身策略。由于检索文件时只需要用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。索引结点中设置一个链接技术变量count,用于表示链接到本索引结点上的用户目录项数。
符号链接:在一个Link型的文件中记录共享文件的存放路径(windows快捷方式)。操作系统根据路径一层层查找目录,最终找到共享文件,即使软链接指向的共享文件已经被删除,Link型文件依然存在,只是通过Link文件中的路径去查找共享文件会失败。由于软链接的方式访问共享文件时要查找多级目录,因此会有多次的磁盘I/O。导致软链接访问速度慢。
文件保护
保护文件数据安全
口令保护
为文件设置一个口令,用户请求访问该文件时必须提供口令。口令一般存放在文件对应的FCB或索引结点中。用户访问文件前需要先输入“口令”。操作系统会将用户提供的口令与FCB中存储的口令进行对比,如果争取,则允许用户访问该文件。
加密保护
使用密码虽文件加密,在访问文件时需要提供正确的密码才能对文件进行正确的解密。
例如 – 异或加密算法。
密码没有存在FCB中需要用户自己记住。正确的密码会得到正确的文件,错误的密码只会得到一群乱码。
访问控制
在每个文件的FCB中增加一个访问控制表,该表记录了各个用户可以对文件进行那些操作。