您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > linux下基于内存的虚拟文件系统设计与实现
摘要近几年来,计算机的CPU、内存和显卡等主要配件的性能都提升得很快,而与之相对应的磁盘系统性能正越来越严重地成为整个电脑系统性能提升的瓶颈。故将一部分内存拿出做虚拟磁盘,并在虚拟磁盘上实施文件管理系统,以加快文件的管理速度,并方便用户进行各种用户操作。基于内存的文件管理系统,顾名思义,就是将一部分内存拿出来当硬盘用,可以极大的提高在其上进行的文件访问的速度。。关键词:虚拟内存磁盘文件管理系统linux/qt/C++目录第一章课题背景1.1课题实现的背景及意义第二章项目总体设计2.1基本功能2.2目的和要求第三章详细设计3.1程序整体框架和主要算法3.2类的设计与声明3.3程序流程图第四章实验内容4.1运行环境4.2运行要求4.3核心代码第五章设计结果与分析总结参考文献第一章课题背景:1,需求概述近年来,随着操作系统内存容量的不断地增加,然而相当一部分的操作系统内存却是浪费了。为此出现了虚拟硬盘的概念,希望能借此实现不同情况的磁盘转储和合理利用内存。由于操作系统的虚拟内存很大,因此可以利用这些内存开辟一块空间作为虚拟磁盘。在此虚拟硬盘上,进行模拟Windows文件管理系统的对系统之中的真实的文件的管理。我们采用linux/qt作为我们的开发环境,并实现了可视化界面,所有操作无需输入命令,而是通过点击按钮实现相应的功能。2,需求分析2.1需求理解与模块图对用户需求的理解:该模拟文件系统包括四大模块:磁盘状态显示模块、存储模块、读取模块、文件管理模块。一:磁盘状态显示模块:通过点击查看磁盘信息按钮可以查看磁盘的信息,其中包括显示磁盘总容量,剩余空间大小以及当中的文件总个数。通过饼图图示,显示所用空间和剩余空间的比例,帮助用户方便的了解磁盘空间的使用情况。二:存储模块:用户点击导入文件按钮,弹出导入文件对话框,可将指定路径的文件导入到内存磁盘中。三:读取模块:用户点击导出文件按钮,弹出导出文件对话框,可将内存磁盘中的文件导出到指定路径的真实的物理磁盘上。四:文件管理模块:对文件进行各种操作,包括查看,备份,重命名,删除等操作。用户只需点击相应的按钮即可进行操作,无需以命令行的方式输入命令,方便快捷。2.2用例分析通过对在上面进行测试的主机的硬件参数的考察和测试,因为是在虚拟机下ubuntu系统进行代码编写和运行的,收集到系统的内存大小只有512M,发现当为虚拟内存磁盘分配大小为256M的空间时,测试效果比较好。因此,在程序中,我们没有再允许用户输入所要分配的虚拟磁盘的大小,而是在程序初始化的时候就为其分配大小为256M的空间,每个内存块的大小设定为16K,然后程序初始化。之后用户可以进行各种模拟真实磁盘的操作,当用户点击退出程序按钮后,内存信息以及一些程序运行的一些参数都将保存到外部磁盘上,程序退出。第二章项目总体设计:磁盘管理模块磁盘状态显示模块存储模块读取模块文件管理模块程序大致划分为四个模块:磁盘状态显示模块、存储模块、读取模块、文件管理模块等。磁盘状态显示模块:显示磁盘当前的信息,包括磁盘总容量大小,剩余可用空间大小,磁盘中包含的文件个数。存储模块:当用户导入新文件或者对文件进行备份的时候,其中的数据都是要存储在内存虚拟磁盘中的。该模块的功能就是把用户导入或备份的数据通过一种合理(保证该文件数据不会被破坏掉)的方式分配到内存中。读取模块:把内存磁盘中的文件导出到用户指定路径的真实物理磁盘上,功能和创建文件类似。文件管理模块:实现对文件的查看,备份,重命名,删除等操作,因为我们建立的目录系统是一级目录,所以不提供创建文件夹的操作,而关于创建文件的操作实质上和从硬盘上导入文件的操作是一样的,因此我们把创建文件并入到文件读取模块里。2.1基本功能:1.显示磁盘信息(总容量,剩余可用空间,文件个数)2.导入文件(支持把指定路径的物理磁盘中的文件导入到内存中)3.导出文件(支持把内存中选定的文件导出到物理磁盘上指定路径的位置)4.文件查看、备份、重命名、删除操作5.文件搜索6.关机备份,开机加载2.2目的和要求:本课程设计的目的是设计一个基于内存的文件管理。以加强对内存系统和文件管理系统和理解,同时也可加深对linux操作系统的了解以及熟悉linux下的各种命令,并对linux下QT可视化编程有进一步了解和掌握。3.详细设计3.1程序整体框架和主要算法在qt自动生成的窗口下通过添加控件并赋予每个控件一个实现方法来实现可视化操作,其中用到的一些算法主要有:1.文件和内存空间分块解决外部碎片问题并实现空间的高效利用2.在block类里定义一个标记用来进行对内存的分配和回收3.使用一个带有指向每个文件头结点的链表来定位文件4.用重写回的方法实现文件的修改操作3.2类的设计与声明//内存存储信息的块类的声明classblock{public:block(intblocknum);//块的初始化block(block&temp);//复制构造函数voidwritedatain(chardata[]);//往块里写数据intgetblocknum();//获得当前块的标识号boolgetisoccupied();//获得当前块是否被占用的标识voidsetisoccupied(boolflag);//设置当前块的占用标识voidsetblocknum(inti);//设置当前块的标识号voidsetnextblock(intnextblock);//设置当前块指向的下一块intgetnextblock();//获得当前块指向的下一块号public:chardata[blocksize];//数组用于存放数据private:boolisoccupied;//块是否被占用的标识intblocknum;//块号intnetxblock;//当前块指向的下一块};//目录类的声明classdir{public:dir();//目录类的构造函数dir(QStringparentId,QStringfileId,QStringchildId);//带参数的目录类的构造函数QStringgetfileId();//获得文件IdQStringgetparentId();//获得当前文件目录的上一级目录IDQStringgetchildId();//获得当前文件目录的下一级目录IDvoidsetfileId(QStringfileId);//设置文件IDvoidsetfirstblock(intfirstblock);//设置文件所占块的第一块地址intgetfirstblock();//获得文件所占块的第一块voidsetparentId(QStringparentId);//设置当前文件目录的上一级目录voidsetchildId(QStringchildId);//设置当前文件目录的下一级目录voidsetoccupyblocks(intblocks);//设置该文件所占的总块数intgetoccupyblocks();//获得文件所占的总块数private:QStringparentId;//当前文件目录的上一级目录QStringchildId;//当前文件目录的下一级目录QStringfileId;//当前文件目录的标识intfirstblock;//当前文件数据所存放的第一块intoccupyblocks;//当前文件所占的总块数};//窗口类,里面包含了一个用于存储文件数据的数组,和一个用于记录当前文件目录的数组,所有有关文件的操作的方法接口都是在这个类中实现的classWidget:publicQWidget{Q_OBJECTpublic:explicitWidget(QWidget*parent=0);//构造函数voidpaintEvent(QPaintEvent*);//画图函数voidpaint(QImage&image);//画图函数QStringgetfilename(QStringfilename);//获取文件名voidsetfilename();//设置当前每个Button控件对应的文件号和名字voidsetfileIconButton();//设置每个Button控件的图标voidhidefilenamelabel();//隐藏标识文件名的label图标voidshowfilenamelabel();//显示标识文件名的label图标voidhidefileIconButton();//隐藏标识文件名的Button图标voidshowfileIconButton();//显示标识文件爱你名的Button图标voidshowfileOpButton();//显示各种文件操作的Button控件voidhidefileOpButton();//隐藏各种文件操作的Button控件voidclearlabeltext();//清除标识文件名的label图标voidhidefileIconAtI(inti);//voidsavadata();//存储数据~Widget();privateslots:voidon_fileInButton_clicked();//导入文件Button控件点击时执行的操作voidon_HInfoButton_clicked();//显示文件信息Button控件点击时执行的操作voidon_enterHButton_clicked();//进入H盘voidon_exitButton_clicked();//退出该系统voidon_fileOutButton_clicked();//导出文件//绑定文件的Button按钮点击时执行的操作voidon_fileIconButton1_clicked();//voidon_fileIconButton2_clicked();//voidon_fileIconButton3_clicked();//voidon_fileIconButton4_clicked();//voidon_fileIconButton5_clicked();//voidon_fileIconButton6_clicked();//voidon_fileIconButton7_clicked();//voidon_fileIconButton8_clicked();//voidon_fileIconButton9_clicked();////对文件进行查看,备份,重命名,删除时执行的操作voidon_filemodifyButton_clicked();//voidon_filecopyButton_clicked();//voidon_filedeleteButton_clicked();//voidon_filerenameButton_clicked();//voidon_surefilerenameButton_clicked();//voidon_cancelfilerenameButton_clicked();////所搜文件和取消搜索文件voidon_searchSureButton_clicked();//voidon_searchCancelButton_clicked();//private:Ui::Widget*ui;//block*memory[1024*16];//该程序的用于真是存放数据的内存,用char型数据来存放数据dir*root[1024];//目录类数据floattotaldmem;////当前内存磁盘的总大小floatfreemem;//当前内存磁盘可用大小intoccupyblocknum;//内存数据中被占用的块数QImageimage;//intfilenum;//记录当前内存磁盘的文件个数QStringcurrentPath;//当前目录路径QPixmap*fileImg;//QStringchosefile;//当前选择的文件intclickButtonId;//public:QStringDialogfilename;//QStr
本文标题:linux下基于内存的虚拟文件系统设计与实现
链接地址:https://www.777doc.com/doc-7309705 .html