模拟文件系统的设计与实现

模拟文件系统的设计与实现

文章目录

  • 模拟文件系统的设计与实现
  • 一、前言
  • 二、选题
  • 三、分析
  • 四、实现目标
  • 五、编写代码
  • 六、测评结果
  • 七、总结评价
  • 八、参考文献


一、前言

模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
本文是在学习完操作系统课程后所完成的课程设计,文中就模拟文件管理系统进行了简单的研究。

二、选题

文件系统的目录结构采用类似 Linux 的树状结构。
在此文件管理系统中,可实现的操作有:
改变目录:格式: cd <目录名>
显示目录:格式: dir <目录名>
创建目录:格式: md <目录名>
删除目录:格式: rd <目录名>
新建文件:格式: edit <文件名>
删除文件:格式: del <文件名>
退出文件系统:格式: exit

三、分析

通过需求分析可知,模拟文件系统有一下几个功能模块:

  1. 进入系统模块
  2. 对文件的相关操作模块
    (1) 创建文件
    在用户登录后才具有的功能,查找一个未使用的文件块用来
    存放用户的文件信息,构建一个文件系统的元素放入找到的
    文件块中。新建文件时要求输入文件名称,当文件名称不与
    已存在的文件目录中名称冲突时,同时文件不发生越界,且
    磁盘空间成功分配,则文件创建成功。
    (2) 删除文件
    在文件目录中选中要删除的文件,若文件存在则继续判断文
    件是否被锁定。如果文件正使用处于锁定状态则删除失败。
    若处于非锁定状态,则删除成功。
  3. 对目录的相关操作模块
    (1) 创建目录
    (2) 删除目录
    (3) 列文件目录
    (4) 列全部文件目录

模拟文件系统的设计与实现_第1张图片
模拟文件系统的设计与实现_第2张图片

四、实现目标

通过一个简单文件系统目录结构的模拟设计,加深了解文件系统的功能和实现复习数据结构中的树型结构。熟悉树节点的插入、删除、修改以及树的遍历方法。编写一段程序,模拟实现一个简单文件系统的树型目录结构,实现以下命令:

五、编写代码

class Folder:
    def __init__(self, father, name):
        '''
        :param father: 上级目录
        :param name: 目录名称
        '''
        self.father = father
        self.name = name
        # 目录列表
        self.folder = []
        # 文件列表
        self.file = []
           
root = Folder(father=None, name='root')
cur = root
f = Folder
path = 'root'
disk = 1000
flag = 0

def applydisk(size):
    #申请磁盘空间
    global disk
    disk = disk - int(size)
    if disk < 0:
        print("磁盘空间不够无法分派")
    else:
        print("磁盘空间分配成功")
        print("已分配{0:}个磁盘空间,还剩{1:}个磁盘空间".format(int(size),disk))

def releasedisk(size):
    global disk
    disk = disk + int(size)
    if disk>1000:
        print("磁盘空间出现错误拒绝释放")
    else:
        print("磁盘空间释放成功")
        print("还剩{0:}个磁盘空间".format(disk))

def edit(name, size):
    #创建文件
    global cur
    if name in cur.file:
        return print('存在同名文件,新建文件失败!')
    cur.file.append({name:size})
    applydisk(size)
    return print('新建文件成功!')

def md(name):
    # 创建目录
    global cur, path
    if name in cur.folder:
        return print('存在同名文件夹,新建文件夹失败!')
    folder = Folder(father=cur, name=name)
    cur.folder.append(folder)
    return print('新建文件夹成功!')

def delete(name):
    # 删除文件
    global flag
    global cur
    for i in cur.file:
        for key, value in i.items():
            if key == name:
                cur.file.pop(cur.file.index(i))
                flag = 1
        if flag == 1:
            flag = 0
            releasedisk(value)
            return print('删除文件成功!')
    return print('文件不存在,删除文件失败!')

def rd(name):
    # 删除目录
    global cur
    for i in cur.folder:
        if i.name == name:
            cur.folder.pop(cur.folder.index(i))
            return print('删除文件夹成功!')
    return print('文件夹不存在,删除文件夹失败!')

def cd(name):
    # 改变当前目录
    global cur, path
    if name == '':
        if cur.father != None:
            path = path[:(len(path)-len(cur.name))-1]
            cur = cur.father
    else:
        for i in cur.folder:
            if i.name == name:
                cur = i
                path = path + '/' + name
                return
        return print('找不到指定文件夹!')

def dir():
    # 列文件目录
    global cur
    for i in cur.file:
        for key ,value in i.items():
            print(key+"(文件类型)")

def dirall():
    # 列出全体文件目录
    global cur
    dir()
    for i in cur.folder:
        print(i.name+"(文件夹类型)")

def stordis():
    #显示文件存储表
    global cur
    print("="*23)
    print("|{:^16}|".format("文件存储表"))
    print("="*23)
    for i in cur.file:
        for key, value in i.items():
            print("|{0:^10}|{1:^10}|".format(key, value))
            print("="*23)

if __name__ == '__main__':
    print("进入模拟文件系统")
    while True:
        print(path, end='>')
        order = input().split(' ')
        if order[0] == 'edit':
            try:
                edit(order[1], order[2])
            except:
                print('格式错误:edit FileName size')
        elif order[0] == 'md':
            try:
                md(order[1])
            except:
                print('格式错误:md FileName')
        elif order[0] == 'delete':
            try:
                delete(order[1])
            except:
                print('格式错误:delete FileName')
        elif order[0] == 'rd':
            try:
                rd(order[1])
            except:
                print('格式错误:rd DirectoryName')
        elif order[0] == 'cd':
            try:
                cd(order[1])
            except:
                print('格式错误:cd DirectoryName/cd ..')
        elif order[0] == 'dir':
            dir()
        elif order[0] == 'dirall':
            dirall()
        elif order[0] == 'stordis':
            stordis()
        elif order[0] == 'exit':
            break
        else:
            print('{}不是正确的命令'.format(order[0]))
    print("退出模拟文件系统")

六、测评结果

模拟文件系统的设计与实现_第3张图片

七、总结评价

通过设计一个“文件系统”,从中我能更深理解文件系统的层次结构和内部实现,并可以熟悉文件系统 create、open、close、read/write 等基本操作,实现文件保护的同时,运用操作系统的所学知识加入自己设计的操作系统,由此实现对文件系统的创新。
有利于熟悉软件开发环境及调试过程,熟悉所学语言中的数据类型、数据结构、语句结构、语法结构、编程思想,熟悉面向对象程序设计范型的功能抽象与数据抽象,感受编程之美;有利于掌握面向对象程序设计、面向过程编程的基本思想与基本方法,熟练实际问题转化为计算机问题的思想方法,掌握理论结合实践的多元化编程思想,掌握理论应用于实践,提高学研成果转化的能力;有利于巩固和加深对操作系统理论课程中知识的理解,提高对所学知识的综合运用能力;有利于培养个人查阅参考资料、手册的自学能力,通过独立思考深入研究问题,学会自己分析、解决问题。
完整课程设计报告见以下链接:
模拟文件系统课程设计报告

八、参考文献

[1]周涛著.面向交易过程的电子商务信任研究[M].北京:人民邮电出版社.2011.
[2]王敏著.信息安全工程实践[M].西安:西安电子科技大学出版社.2017.
[3]王瑞锦主编;李冬芬,朱国斌,张凤荔编著.信息安全工程与实践[M].北京:人民邮电出版社.2017.
[4]谢小权等编著.大型信息系统信息安全工程与实践[M].北京:国防工业出版社.2015.
[5]匡松等编著.操作系统[M].北京:北京工业大学出版社.2006.
[6]汤小丹等编著.计算机操作系统(第四版)[M].西安:西安电子科技大学出版社.2017.

有问题欢迎各位大佬指出,欢迎关注,一起学习

你可能感兴趣的:(算法,Python,操作系统,模拟文件系统,课程设计)