目录
文件名:方便用户找到文件,同一目录下不能有重名文件。
标识符:区分各个文件的一种内部名称
类型:指明文件类型
位置:文件存放路径(用户使用)、在外存中的地址(操作系统使用)
大小、创建时间、保护信息等
无结构文件:由一些二进制或字符流组成,又称流式文件
有结构文件:由一组相似的记录组成,又称记录式文件
创建文件:create系统调用
读文件:read系统调用
写文件:write系统调用
删除文件:delete系统调用
打开文件:open系统调用
关闭文件:close系统调用
由一些二进制或字符流组成,又称流式文件
由一组相似的记录组成,又称记录式文件,每条记录由若干个数据项组成。每条记录中又一个数据项作为关键字。根据各条记录的长度是否相等,可分为定长记录和可变长记录两种。
文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
顺序文件的缺点是增删一个记录较为困难
为了在可变长记录文件中快速找到第i个记录,建立一张索引表,每条记录对应一个索引项。索引表本身是定长记录的顺序文件
索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是: 并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。为了进一步提高检索效率,可以为顺序文件建立多级索引表。
目录文件中的一条记录就是一个文件控制块(FCB)
·单级目录:系统中只建立一张目录表,每个文件占一个目录项。但不允许文件重名。
·两级目录结构:包括主文件目录和用户文件目录。允许不同用户的文件重名。
·多级目录结构:又称树形目录结构。当用户从根目录开始访问某个文件时使用绝对路径;当用户从当前目录出发访问时使用相对路径。但多级目录结构不便于文件的共享
·无环图目录结构:可以用不同的文件名指向同一个文件,需要为每个共享结点设置共享计数器,用于记录此时有多少共享,当进行删除操作时,FCB被删除,共享计数器减一,只有当共享计数器为0时,结点被删除
将除文件名外的所有信息都存入索引结点中,可以提升文件检索速度。
在外存管理中,为方便对文件数据的管理,文件的逻辑地址空间被划分为文件块。将文件的逻辑地址转换为物理地址即文件分配方式,包括连续分配、链接分配及索引分配。
每个文件在磁盘上占有一组连续的块。操作系统只需转换逻辑块号为物理块号,块内地址保持不变(物理块号 = 起始块号 + 逻辑块号)。连续分配支持顺序访问和直接访问,其在顺序读写时速度最快。
但该分配方式不便于拓展,且存储空间利用率低,会产生磁盘碎片。
采用离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接。
·隐式链接
只支持顺序访问,不支持随机访问,查找效率较低。但便于拓展文件,不会有磁盘碎片问题。
·显式链接
将用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)。一个磁盘仅设置一个FAT。从目录项找到起始块号,若i>0,则查询内存中的文件分配表,往后找到i号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作。因此访问速度较快,但FAT需要占用一定内存空间。
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表――建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
从目录项中可知索开画放位置,将索引表从外存读入内存,并查找索引表即可只i号逻辑块在外存中的存放位置。
索引分配支持随机访问,文件拓展较方便,但索引表需要占据一定空间
若文件大小超过了磁盘块大小,其解决方式如下:
·链接方案
若索引表过大,将多个索引块链接存放。
·多层索引
建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。各层索引表大小不能超过一个磁盘块。
采用n层索引结构,且顶级索引表未调入内存,则访问弄一个数据块需要K+1次读磁盘操作。
计算:若磁盘块大小为x,一个索引表项占y,则一个磁盘块能存放 z = x / y 个索引项。若采用n层索引,则该文件最大长度可以为z^n * x
·混合索引
多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。
管理空闲磁盘区
存储空间的划分:将物理磁盘划分为文件卷
存储空间初始化:将各文件卷划分为目录区(存放文件目录信息、用于磁盘存储空间管理的信息)、文件区(存放文件数据)
记录空闲盘块起始位置与块数,适用于连续分配方法。
空闲盘块链中系统保存着链头和链尾指针。若某文件申请K个盘块,则从链头开始一次分配K个盘块,并修改空闲链的链头指针。
空闲盘区链中:若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。
设置一个包含文件物理地址都索引结点,内置一个链接技术变量count,用于表示链接到本索引结点上的用户目录项数。
设置存放在系统内部的访问口令,一致时才可访问
使用加密密码对文件进行加密,如异或加密,需要花费一定时间
在每个文件FCB中增加访问控制列表,限制不同用户可以执行的操作
为了精简访问列表,可以以组为单位,标记各组用户的权限。
磁盘:表面由磁性物质组成,可记录二进制数据
磁道:磁盘的盘面被划分成一个个磁道
扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同(如1KB)。最内侧数据密度最大
需要把“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。
根据磁头类型分为:活动头磁盘、固定头磁盘
根据盘片是否可更换分为:可换盘磁盘、固定盘磁盘
·先来先服务(FCFS):根据进程请求访问磁盘的先后顺序进行调度。公平但性能差,寻道时间长
·最短寻找时间优先(SSTF):优先处理的磁道是与当前磁头最近的磁道。性能好,但可能产生饥饿现象
·扫描算法(SCAN):只有磁头移动到最外侧磁道时才能往内移动,移动到最内侧磁道时才能往外移动。不会产生饥饿现象,但不同磁道响应频率不平均。
·LOOK调度算法:若磁头移动方向上没有请求,立即改变磁头移动方向。
·循环扫描算法:磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。响应频率较为平均,但比SCAN平均寻道时间更长。
·C-LOOK调度算法:若磁头移动方向上没有磁道访问请求,就可立即让磁头返回,需返回到有磁道访问请求的位置即可。
磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”
采用交替编号的策略,让逻辑上相邻的扇区在物理上有一定间隔,使读取连续扇区需要的延迟时间减小。
磁盘的物理地址是(柱面号、盘面号、扇区号),无需移动磁头臂,减少磁头移动消耗时间。
相邻盘面相对位置相同处扇区号若相同会增加延迟时间。采用错位命名可以减少延迟时间
部分初始化程序放在ROM中,不可修改;完整的初始化程序放在磁盘的启动快上,位于磁盘的固定位置。
扇区损坏故障无法使用。可以在逻辑格式化时对整个磁盘进行检查,并进行标记。磁盘中保留一些备用扇区,用于替换坏块。