操作系统课程设计说明书_第1页
操作系统课程设计说明书_第2页
操作系统课程设计说明书_第3页
操作系统课程设计说明书_第4页
操作系统课程设计说明书_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学中北大学 操作系统课程设计操作系统课程设计 说说 明明 书书 学学 院院 系系 软件学院 专专 业业 软件工程 学学 生生 姓姓 名 名 学学 号 号 设设 计计 题题 目目 模拟文件系统的设计与实现 起起 迄迄 日日 期期 2016 年 12 月 21 日 2017 年 1 月 4 日 指指 导导 教教 师师 2016 年 12 月 20 日 第 2 页 共 16 页 1 1 需求分析需求分析 1 1 课程设计题目和目的 通过模拟文件系统的实现 深入理解操作系统中文件系统的理论知识 加深对教材中 的重要算法的理解 同时通过编程实现这些算法 更好地掌握操作系统的原理及实现方法 提 高综合运用各专业课知识的力 1 2 课程设计要求 通过课程设计 要求学生主要掌握以下内容 a 文件的物理结构可以选用顺序分配 链表分配或索引分配 b 建立文件 从命令中得到文件名 得到该文件的文件长度 建立文件修改目录表 c 删除文件 回收文件占用的空间 修改目录表 d 读文件 read 文件名 显示开始字节 显示的字节数 直接显示所需要的字节数 e 写文件 write 文件名 插入的位置 插入的内容 f 查询属性 显示文件属性 文件名 类型 长度 时间等 1 3 程序设计思想 此课程设计把 TXT 文件作为研究对象来模拟操作系统的文件系统的文件系统工作过程 所以用一个字符串数组来模拟磁盘空间 顾名思义 模拟磁盘提供字符的存储服务 磁盘 空间分配表 采用链表结构 每个节点保存模拟磁盘的一个逻辑块的信息 包括块的最大 长度 文件占用长度 占用标志 如果占用标志为 0 即该空间可分配给文件 初始化磁 盘空间时 从头开始遍历 检查占用位 如果该块位可分配 则检查块大小 若块长度大 于或者等于申请空间的大小 则把块的前一部分 等于申请大小 分配给文件 并置标志 位为占用 剩下的大小做来一个新块 做来一个新的节点插入到原节点的后边 标志位为 可用 这样就实现了模拟磁盘的线性分配 文件表 由于模拟文件系统的文件数量不多 故文件表采用线性表来存储 线性表每 个节点存储一个文件的信息 打开文件表 采用数组形式存储打开的文件 数组每个元素 保存一个打开文件的信息 文件信息和文件表中的文件信息类似 构造这些实体的关系图 数据流图 程序流程图来进行具体的设计 1 4 实验环境 eclipse jdk1 6 0 10 第 3 页 共 16 页 二 总体设计二 总体设计 2 1 系统流程 图 2 1 1 开始 输入用户名 输入的用 户名为空 用户登录成功 创建用户根目 录 用户进行各项操 作 包括目录 的创建粘贴和删 除以及文件的 相应操作 等 等 用户是否进行注 销并切换到其他 用户文件夹 用户退出 结束 Y N Y N 第 4 页 共 16 页 2 2 文件结构 采用类似于树状的结构 图 2 2 1 2 3 实现操作 以下为显示和跳转操作 ls 显示文件目录 cd dirname 跳转到指定目录 cd 跳转到上层目录 以下为目录操作 mkdir dirname 创建目录 ptdir dirname 粘贴目录 cpdir dirname 拷贝目录 rnmdir dirname 重命名目录 rmdir dirname 删除目录 以下为文件操作 vim filename 创建文件 ptfile filename 粘贴文件 cpfile filename 拷贝文件 rnmfile filename 重命名文件 rmfile filename 删除文件 vi filename 显示文件 内容 以下为退出该系统操作 exit 以下为用户切换操作 logout 注销 login username 以该用户的身份登录 add username 添加新的用户并登 录 2 4 数据结构 Src 文件结构 用户一 以用户 名命名 用户二 以 用户名命 名 Dir1File11 1 Dir2 Dir3 Dir4 File2Dir5File3 Dir6Dir7 第 5 页 共 16 页 用户类数据结构 AllUser java 维护着一个包含所有用户的 Map 单例模式 用户唯一 文件类数据结构 MyFile java 磁盘块类数据结构 MyDiskBlock java 磁盘类数据结构 MyDisk java 目录类数据结构 MyDir java 2 5 模块详解 流程图 2 5 1 文件创建 图 2 5 1 开始创建文件 输入文件名称 文件名称是 否为空 是否存在同 名文件 创建文件失败 成功创建文件 结束 Y N N 第 6 页 共 16 页 2 5 2 文件编辑 图 2 5 2 进行编辑 点 击回车保存内 容 开始编辑文件 输入文件名 称 该文件是否 存在 为其分配磁盘空 间 循环更新父 节点大小 编辑成功 结束 Y N 第 7 页 共 16 页 2 5 3 显示文件内容 图 2 5 3 开始 输入文件名称 该文件是否 存在 成功显示该文件内容 显示文件内容失败 ND Y 结束 D 第 8 页 共 16 页 2 5 4 文件删除 图 2 5 4 开始删除文件 输入文件名称 该文件是否存在 删除成功 循环更新父节 点大小 N 删除失败 结束 Y 第 9 页 共 16 页 2 5 5 文件重命名 图 2 5 5 开始 输入文件名称 该文件是 否存在 输入新文件名 重命名失败 是否存在同 名文件 A 新文件名是否 为空 A N 文件重命名成 功 结束 Y Y N Y N Y 第 10 页 共 16 页 三 详细设计三 详细设计 1 进入模拟文件系统 图 3 1 1 2 创建用户 输入用户名之后点击回车 即可成功创建用户根文件夹 此文件夹名称即为用户输入 的用户名输入 help 即可查看相关帮助信息 图 3 2 1 3 清屏 如果感觉屏幕输入信息较为繁杂 影响后续输入 可以输入 cls 进行清屏 注 此处 的清屏为假清屏 实际上是在控制台打印了 30 个空的换行 因为未能找到 jdk 中可以进行 控制台清屏的方法 图 3 3 1 4 显示文件 输入 vi sun 即可把文件显示出来 代码实现 elseelse ifif s startsWith vi MyFile a nowdir getFile filename ifif a nullnull ArrayList list a getBlocklist 第 11 页 共 16 页 StringBuffer all newnew StringBuffer forfor MyDiskBlock one list all append one getContent System outout println all elseelse System outout println 文件名称输入有误 图 3 4 1 5 复制和粘贴文件 图示如下 在根目录下创建了两个目录 ln 和 linan 同时在 ln 目录中创建了一个名 为 sun 的文件 在文件中输入了 first 的内容 之后输入 cpdir ln 将 ln 目录复制到剪 切板中 在进入 linan 目录之后 输入 ptdir 指令将剪切板中的 ln 目录粘贴到 linan 目录 中 可以看到目录的大小也随之更新 为确保该目录已经成功复制而不是简单的引用 包 括其下的所有文件 以下进行验证进入 linan ln 目录 可以看到 sun 文件 同时打开该 文件进行编辑 输入 我是小太阳 等字样 保存退出 再进入根目录下的 ln 显示其 中的 sun 文件中的内容 发现依然是 first 而没有被修改为 我是小太阳 说明目录 确实复制成功而非简单的引用 代码实现 复制 elseelse ifif s startsWith cpfile MyFile a nowdir getFile real ifif a nullnull 第 12 页 共 16 页 filesave newnew MyFile filesave a System outout println 复制文件到剪切板成功 elseelse System outout println 对不起 文件名输入有误 粘贴 elseelse ifif s equals ptfile 文件粘贴 1 ifif filesave nullnull ArrayList fileblocklist filesave getBlocklist ifif nowdir canPasteFile filesave 判断目录下是否有同 名文件 StringBuffer realcontent newnew StringBuffer forfor MyDiskBlock one fileblocklist realcontent append one getContent 先将文件中 的 StringBuffer 全部拷贝出来 intint point 0 ArrayList newFileBlocklist newnew ArrayList 创建新的磁盘块列表用来存放这个 StringBuffer intint blocksize MyDiskBlock getSize intint sizecount 0 ArrayList thenw newnew ArrayList ifif realcontent length blocksize forfor intint i 0 i realcontent length blocksize i i blocksize StringBuffer op newnew StringBuffer realcontent substring i i blocksize MyDiskBlock newblock newnew MyDiskBlock op 第 13 页 共 16 页 MyDisk getInstance addUsed newblock thenw add newblock getId newFileBlocklist add newblock point i sizecount StringBuffer rest newnew StringBuffer realcontent substring point blocksize realcontent length sizecount MyDiskBlock ano newnew MyDiskBlock rest MyDisk getInstance addUsed ano 修改后的内容 保存到磁盘 一定要先保存到磁盘 在分配好磁盘号之后 再保存到文件 thenw add ano getId newFileBlocklist add ano 保存到文件 elseelse StringBuffer shortone newnew StringBuffer realcontent substring 0 realcontent length MyDiskBlock one newnew MyDiskBlock shortone sizecount MyDisk getInstance addUsed one thenw add one getId newFileBlocklist add one MyDir save2 newnew MyDir save2 nowdir whilewhile nowdir getFatherDir nullnull nowdir addnew thenw 第 14 页 共 16 页 nowdir updateSize nowdir nowdir getFatherDir nowdir save2 MyFile anoth newnew MyFile filesave getName anoth setBlocklist newFileBlocklist anoth setNewsize filesave getNewsize anoth setOldsize filesave getOldsize nowdir addFile anoth elseelse System outout println 该目录下已经有同名文件 不能粘贴 elseelse System outout println 剪切板中没有文件 图 3 5 1 第 15 页 共 16 页 四 四 心得体会心得体会 经过俩周的课程设计 使我对操作系统有了更深的了解 进一步掌握了对操作系统的 运用 文件系统的编写过程中遇到了或大或小的问题 尤其在文件复制的操作中因为对 剪切板中对象的误操作导致出现了非常奇怪的问题 几近奔溃 最终 debug 用时两个小时 最终找到了问题的根源 文件系统最终能够顺利完成离不开 debug 时的细心和耐心 同时 在代码的编写过程中 使用了单例和原型这两种设计模式 对设计模式的理解更近了一步 当然 此文件系统也存在不足之处 如因为各个用户之间的目录文件相互独立 使用 户的文件无法实现共享 对共享的文件在磁盘上磁盘块的分配也是需要考虑的问题 缺少 超

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论