操作系统 文件管理实验报告

实验要求

实验目的与要求
用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。
二、例题:
设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED);另外,为打开文件设置了运行文件目录(AFD)。
为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作
算法与框图:
因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。
程序中使用的主要设计结构如下:
主文件目录和用户文件目录( MFD、UFD)打开文件目录( AFD)(即运行文件目录)
在这里插入图片描述
文件系统算法的流程图如下:
在这里插入图片描述
三、实验题:
增加 2~3个文件操作命令,并加以实现(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。
编一个通过屏幕选择命令的文件管理系统,每屏要为用户提供足够的选择信息,不需要打入冗长的命令。
设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。
根据学校各级机构,编制一文件系统。

实验报告

1.实验目的

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

2.实验内容与要求

设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED);另外,为打开文件设置了运行文件目录(AFD)。

为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作
算法与框图:
因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。
程序中使用的主要设计结构如下:
主文件目录和用户文件目录( MFD、UFD)打开文件目录( AFD)(即运行文件目录)在这里插入图片描述

3.流程图与模块调用

在这里插入图片描述

4.实验分析

想要完成操作系统算法,首先要弄清楚操作系统相关的专业术语。弄清各个算法的流程和目的要求。才能模拟出相关算法的过程。

一般情况下,操作系统中,文件管理提供了如下功能:

①统一管理文件存储空间(即外存),实施存储空间的分配与回收。
②确定文件信息的存放位置及存放形式。
③实现文件从名字空间到外存地址空间的映射,即实现文件的按名存取。
④有效实现对文件的各种控制操作(如建立、撤销、打开、关闭文件等)和存取操作(如读、写、修改、复制、转储等)

其实就是对文件进行管理。

本次实验对文件定义了如下数据结构:

class file:
    def __init__(self, uid, fid, name, status):
        self.uid = uid
        self.fid = fid
        self.name = name
        self.status = status

定义了文件的id标识,文件名,状态等等。

5.运行情况

在这里插入图片描述

6.实验体会

通过本次实验,我深刻的理解了操作系统中文件管理可视化的优点。操作系统实验重在理解每一个算法的意图和目的,那么就选择适当的数据结构模拟过程就可以完成相关算法了。

文件管理系统作为一个统一的信息管理机制,可以解决海量文件存储,管理困难;查找缓慢,效率低下;文件版本管理混乱;文件安全缺乏保障;文件无法有效协作共享;知识管理举步维艰等问题。

本次实验采用python完成,IDE是pycharm。

【附】实验代码

mfd = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']  # 存用户信息
ufd = []  # 存放文件


class file:
    def __init__(self, uid, fid, name, status):
        self.uid = uid
        self.fid = fid
        self.name = name
        self.status = status


# 输出用户
def display1():
    print("用户:\n1、A\t2、B\n3、C\t4、D\n5、E\t6、F\n7、G\t8、H\n9、I\t10、J\n")


# 输出用户文件夹目录
def display2(arr):
    str = '该用户的文件目录为:\n'
    for index, item in enumerate(arr):
        if (index + 1) % 2:
            str += '{}、文件名:{} 文件fid:{} 文件状态:{}\t'.format((index + 1), item.name, item.fid, item.status)
        else:
            str += '{}、{}\n'.format((index + 1), item.name)
    print(str, '\n')


# 输出命令表
def display3():
    print('指令集:\n1、创建新文件\t2、删除文件\n3、打开文件\t4、关闭文件\n5、读出文件\t6、写入文件\n7、查看文件目录\t8、退出\n')


display1()
option = input('请输入用户名以进入UFD:')

if option in mfd:
    files = []  # 存放属于该用户的文件
    for item in ufd:
        if item.uid == option:
            files.append(item)
    display2(files)
    display3()
    option2 = int(input('请输入指令序号:'))
    while option2 != 8:
        if option2 == 1:
            if len(files) < 10:
                a = input('请输入新建的文件名:')
                p = file(option, len(files) + 1, a, 'close')
                ufd.append(p)
                files.append(p)
                option2 = int(input('请输入指令序号:'))
            else:
                print('最多只能创建10个文件')
                option2 = int(input('请输入指令序号:'))
        elif option2 == 2:
            b = int(input('请输入你需要删除文件的fid:'))
            for item in files:
                if item.fid == b:
                    files.remove(item)
                    print("已删除")
            option2 = int(input('请输入指令序号:'))
        elif option2 == 3:
            c = int(input('请输入你需要打开文件的fid:'))
            for item in files:
                if item.fid == c:
                    item.status = 'open'
                    print('已打开')
            option2 = int(input('请输入指令序号:'))
        elif option2 == 4:
            d = int(input('请输入你需要关闭文件的fid:'))
            for item in files:
                if item.fid == d:
                    item.status = 'close'
                    print('已关闭')
            option2 = int(input('请输入指令序号:'))
        elif option2 == 5:
            e = int(input('请输入你需要读取文件的fid:'))
            for item in files:
                if item.fid == e:
                    item.status = 'read'
                    print('已读取')
            option2 = int(input('请输入指令序号:'))
        elif option2 == 6:
            f = int(input('请输入你需要写入文件的fid:'))
            for item in files:
                if item.fid == f:
                    item.status = 'write'
                    print('已写入')
            option2 = int(input('请输入指令序号:'))
        elif option2 == 7:
            display2(files)
            option2 = int(input('请输入指令序号:'))



else:
    print("无此用户!")

  • 41
    点赞
  • 389
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
操作系统实验(含实验报告) 1、进程调度 2、作业调度 3、主存空间的分配与回收 4、文件系统 一、 实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容和要求 编写并调试一个模拟的进程调度程序,采用“简单时间片轮转法”调度算法对五个进程进行调度。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。 进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用运行时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。 重复以上过程,直到所要进程都完成为止。 三、实验主要仪器设备和材料 硬件环境:IBM-PC或兼容机 软件环境:C语言编程环境 四、实验原理及设计方案 1、进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。 2、实验步骤: (1)按先来先服务算法将进程排成就绪队列。 (2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。 (3)检查该运行进程是否运行完毕,若运行完毕,则撤消进程,否则,将该进程插入到下一个逻辑队列的队尾。 (4)是否再插入新的进程,若是则把它放到第一逻辑队列的列尾。 (5)重复步骤(2)、(3)、(4),直到就绪队列为空。 。。。。。。。。。。。。。。。。。。。。。。
【实验目的】 1. 了解文件系统的原理; 2. 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 【实验准备】 1.文件的逻辑结构  顺序文件  索引文件  索引顺序文件  直接文件和哈希文件 2.外存分配方式  连续分配  链接分配  索引分配 【实验内容】 1. 实验要求 要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 2. 实验题目  设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。  程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。  为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD)打开文件目录( AFD)(即运行文件目录)。 M D F 用户名 文件目录指针 用户名 文件目录指针 U F D 文件名 保护码 文件长度 文件名 A F D 打开文件名 打开保护码 读写指针

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征途黯然.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值