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

这篇具有很好参考价值的文章主要介绍了模拟文件系统的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


一、前言

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

二、选题

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

三、分析

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

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

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

四、实现目标

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

五、编写代码

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("退出模拟文件系统")

六、测评结果

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

七、总结评价

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

八、参考文献

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

有问题欢迎各位大佬指出,欢迎关注,一起学习文章来源地址https://www.toymoban.com/news/detail-503110.html

到了这里,关于模拟文件系统的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FAT12文件系统C语言模拟实现及原理讲解

    作者 :yhy 时间 :2022.8.22 项目地址 :https://github.com/HuiyuanYan/FAT12-File-System.git 项目简介 :用C语言实现的简易FAT12文件系统,并写了简单的shell用于交互。 项目目的 :通过简单的编码了解FAT12文件系统的构成和运行原理,并用C语言模拟文件系统的运行,同时强化C语言编码能力

    2024年02月12日
    浏览(40)
  • 微信小程序毕业设计作品成品(30)微信小程序驾校模拟考试系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(66)
  • VB点对点聊天文件传输系统设计与实现

    本程序使用VB语言编程,使用WinSock控件完成的点对点(P2P)聊天和文件传输程序。可以实现两台机器间互发消息,并且有聊天和文件传输记录,安全可靠。 p2p WinSock,聊天和文件传输程序,VB P2P是一种技术,但更多的是一种思想,有着改变整个互联网基础的潜能的思想。

    2024年02月13日
    浏览(44)
  • PHP毕业设计课题选题(16)基于web网页网站PHP文件共享网站系统设计与实现

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(50)
  • 简易英文统计和加密系统的设计实现(纯C语言实现,包含文件操作、注释多、易理解)

    ❤️作者主页:微凉秋意 🔥系列专栏:数据结构与课程设计 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆

    2024年02月02日
    浏览(44)
  • 文件系统模拟实验

    摘 要         文件系统作为操作系统中最为重要的组成部分之一,它的主要功能就是对文件进行管理。文件系统位于操作系统的顶层。在操作系通的接口中文件系统扮演着十分重要的地位,他把我们使用计算机操作的抽象数据转换为能够在计算机物理设备上存放的具体数据,并

    2024年02月03日
    浏览(37)
  • 操作系统课程设计进程调度模拟

    程序下载链接:https://download.csdn.net/download/m0_56241309/86945709 进程调度模拟 摘要 :进程调度是操作系统中必不可少的一种调度,在3中OS中都无一例外地配置了进程调度。此外,它也是对系统性能影响最大的一种处理机调度,在操作系统中具有十分重要的地位。本次模拟,旨在全

    2024年02月08日
    浏览(42)
  • 基于微信小程序的课程点名签到系统设计与实现 报告+项目源码及数据库文件

    题目:微信点名系统小程序 目录 第一节 系统分析与设计 1.1 需求分析 1.2 数据库设计 1.2.1 数据库模型图(初步设计) 1.3 系统功能设计 第二节 系统开发及实现 2.1 系统开发平台及工具 2.2 系统页面及使用说明 2.1.2 学生签到页面(首页) 2.1.3 学生查询页面(课程、我的) 2.

    2024年02月12日
    浏览(48)
  • 【毕业设计】43-基于单片机的红外无线防盗报警系统设计与实现(原理图工程源文件+源代码+实物图+答辩论文)

    资料包含:毕业设计全套资料(精品) 原理图工程文件 原理图截图 PCB工程文件 实物图片 答辩论文低重复率文档,25923字 英文文献及翻译 主 要 研 究 内 容 、 方 法 和 要 求 主要研究内容: 基于单片机作为核心控制器,以89C52系列单片机来实现整个系统,需要人体检测设备

    2024年02月04日
    浏览(58)
  • 如何模拟实现分布式文件存储

    传统做法是是在宕机存储。但随着数据变多,会遇到存储瓶颈 单机纵向扩展:内存不够加内存,磁盘不够家磁盘。有上限限制,不能无限制加下去 多机横向扩展:采用 多台机器存储 ,一台不够就加机器。理论上可以无线 多台机器存储也就意味迈入了 分布式存储 当文件被分

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包