N
栏
用户名 用户文件目录 文件名 文件属性 记录长度 文件地址 L 栏
主文件目录MFD 用户文件目录UFD
整个系统只有一张主文件目录表,但有N张用户文件目录表。用户文件UFD中的“文件属性”规定文件的使用权限为“只可读”或“只可写”或“可读可写”。
可为每个用户设置一张“用户已打开文件表(UOF)”,用以说明该用户当前正在使用文件的情况。如果用最多同时打开或建立S个文件,那么,用户已打开文件表UOF应该有S个登记栏,其结构如下:
S 栏 文件名 文件属性 记录长度 状态(打开/建立) 读指针 写指针
用户请求打开或建立一个文件时,相应的文件操作把在关该文件的信息登记到UOF中,读指针和写指针用于指出对文件的进行存取的当前位置。
2、程序流程设计 1、程序结构框图:
文件系统提供的文件操作有建立文件(create),打开文件(open),关闭文件(close),读文件(read),写文件(write)和撤消文件(delete)。在模拟程序中可从键盘上输入文件操作命令来模拟各用户程序中所调用的各种文件操作,用一个结束命令(end)停止程序的执行,其程序的结构图如下:
开 始 初始化已有的用户 或新建用户 初始化文件表 输入用户名 MFD中是否有该用户 无 输入命令 有 分析命令 显示:无此用户 建立 打开 关闭 读 写 撤消 关 闭 显示:命令错误
2、用输入命令来模拟用户程序中调用的文件操作,这些命令的格式和处理要求如下:
(1).建立文件:create(文件名,记录长度,文件属性)
模拟文件系统进行“建立文件”的处理流程如下: “建立文件”模拟流程:
开 始 查该用户的UFD UFD中有该文件 在UFD和UOF中找空登记栏 显示:同名 文件在UFD和UOF中登记文件名,记 不能录长度,文件属性 建 立
找一磁盘空闲块D:=找到的块号 返 在UFD登记栏中文件地址:=d 回 在该用户的UOF 中登记 状态:=建立 写指针:=d 显示:建立成功
返 回
(2).打开文件:open(文件名,操作类型)
其中操作类型指出文件打开后用户将对文件进行读还是写。约定操作类型与文 属性不符合或正处于“建立”状态的文件不允许打开,处理流程如下:
“打开文件”模拟流程
开 始 查用户UFD 有 UFD中有该文件吗? 查用户UOF 显示:不存在该文件,打开失败 UOF中有该文件? 有 文件属性与操作类型相该文件为“建立”状态? 否 是 是 否 显示:正在建立不能打开 登记UOF:文件名,记录长度,文件属性 状 态:=“打开” 读指针:=UFD中文件地址 写指针:=UFD中文件地址 显示:非法操作,不能打开 无 返 回 无 显示: 文件已打开 返 回 返 回 显示:“打开”成功 返 回
(3).读文件:Read(文件名,读文件)
文件打开后,可用“读文件”操作请求读指定文件中的若干记录,既可顺序读写也可随机读。这里约定总是顺序读文件中的记录本,读长度表示本次操作需计的记录个数。处理流程如下:
“读文件”模拟流程:
开 始 查用户UOF 文件已打开? 是 否 从“读指针”得到当前起始地址 显示:文件未打开,不能读 按读长度把把信息读出传送给用户(用显示物理块号来模拟) 返 回 修改“读指针” 显示:“读文件”成功 返 回