文件存储空间管理
为磁盘分区
存储空间管理——空闲表法
适用于连续分配方式
如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件
分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等
算法来决定要为文件分配哪个区间。
如何回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个
存储区时需要有四种情况:①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。总之,回收时需要注意表项的合并问题。
存储空间管理——空闲链表法
空闲盘块链
操作系统保存着链头、链尾指针。
如何分配:若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。
如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。
适用于离散分配
空闲盘区链
操作系统保存着链头、链尾指针。
如何分配:若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,
分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给-一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。
适用于离散分配、连续分配
存储空间管理——位示图法
如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0";②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;③将相应位设置为“1”。
如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应二进制位设为“0”
存储空间管理——成组链接法
空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。
文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。
文件的基本操作
创建文件(create系统调用)
删除文件(delete系统调用)
读文件(read系统调用)
写文件(write系统调用)
打开文件(open系统调用)
关闭文件(close系统调用)
文件共享
基于索引节点的共享方式(硬链接)
基于符号链的共享方式(软链接)
当User3访问“ccc” 时,操作系统判断文件“cc”属于Link类型文件,于是会根据其中记录的路径
层层查找目录,最终找到User1的目录表中的“aaa" 表项,于是就找到了文件1的索引结点。
类似于windows的快捷方式
文件保护
口令一般存放在文件对应的FCB或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与FCB中存储的口令进行对比,如果正确,则允许该用户访问文件
优点:保存口令的空间开销不多,验证口令的时间开销也很小。
缺点:正确的“口令”存放在系统内部,不够安全。
使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。
Eg:一个最简单的加密算法——异或加密
假设用于加密/解密的“密码”为“01001”
优点:保密性强,不需要在系统中存储“密码”
缺点:编码/译码,或者说加密/解密要花费一定时间。
在每个文件的FCB (或索引结点)中增加一个访问控制列表(Access-Control List, ACL),该表中记
录了各个用户可以对该文件执行哪些操作。