磁盘存储空间模拟管理系统 位示图方向.doc_第1页
磁盘存储空间模拟管理系统 位示图方向.doc_第2页
磁盘存储空间模拟管理系统 位示图方向.doc_第3页
磁盘存储空间模拟管理系统 位示图方向.doc_第4页
磁盘存储空间模拟管理系统 位示图方向.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

* 实践教学实践教学 * 兰州理工大学兰州理工大学 计算机与通信学院 2013 年秋季学期 操作系统操作系统 课程设计课程设计 题 目: 磁盘空间管理模拟实验 专业班级: 计算机科学与技术 11 级 4 班 姓 名: 刘文清 学 号: 11240425 指导教师: 李 明 成 绩: 1 目目 录录 摘摘 要要.1 1.设计思想.2 2.算法设计.2 3.源程序.2 4.运行结果.2 5.总结.2 参考文献参考文献.2 2 摘摘 要要 要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。 存储介质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。用户 作业在执行期间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文 件系统必须要为它们分配存储空间或收回它所占的存储空间。如何实现存储空间 的分配和收回,取决于对空闲块的管理方法,此系统采用的对磁盘存储空间的分 配和收回的方法是:位示图法(用一张位示图(简称位图)来指示磁盘存储空间 的使用情况) 。 此磁盘存储模拟管理系统采用 C+语言实现的,其运行环境是 Windows xp,Windows 7 操作系统。 关键词:磁盘的分配和回收管理;位示图,磁盘存储空间管理。 3 1.1. 设计思想设计思想 在 Windows XP,Windows 7 等操作系统中对磁盘存储空间的管理是位示图法, 位示图法:一个简单的管理方法,是用一张位示图(简称位图)来指示磁盘存储 空间的使用情况。一个盘组的分块确定后,根据分配的总块数决定位图由多少个 字组成,建筑位图中的每一位与盘组分块 1-1 对应,“1”状态表示相应块已占用, “0”状态表示该块空闲。在分配时先查看要分配的位置的数值,若其值为 0,则 分配,否则不予分配,输出此空间已被占用;在释放时分别找到柱面号,磁道号 和扇区号所对应的在位示图中的位置,进行释放,若其值为 0,则表示为分配, 若其值为 1,则变为 0,回收完成。 4 2.2. 算法设计算法设计 数据结构如下: unsigned int size5=1,1,1,1,1 ;/*保存位示图*/ 算法流程图如下: 分配流程图如下图 2-1: N+1=1 是 N+1=0 否 图 2-1 回收空间流程图如下: 进行分配 开始 N+1=1/0? /? 分配 N+1 输出分配成 功 结束 继续分配? ji 5 错误 正确 是 是 否 否 图 2-2 开始 输入信息 判断信息? 是否分配? 分配成功 是否继续? 结束 6 3.3. 源程序源程序 位示图法算法如下: #include unsigned int size5=1,1,1,1,1 ;/*保存位示图*/ void out()/*输出位示图函数*/ unsigned int i,j,m; for(j=0;j5;j+)/*循环输出 size 的各个数的各个二进制位*/ m=sizej; for(i=0;i16;i+)/*/ printf(%d ,m%2); m=m/2; if(i=7) printf(n); printf(n); void callback()/*回收函数*/ unsigned int i,j,k,s=1,q,m,sq,zhm,cid; printf(确定要回收块的柱面号、磁道号、扇区号:n); printf(请输入柱面号:); scanf(%d, printf(n 请输入磁道号:); scanf(%d, printf(n 请输入扇区号:); scanf(%d, if(zhm%2=0)/*计算对应的位示图位置*/ 7 i=zhm/2; j=cid*4+sq+1; else i=(zhm-1)/2; j=cid*4+sq+9; q=sizei; m=j-1; while(m) q=q/2; m-; if(q%2=1)/*判断该块是否被分配*/ if(j=1)sizei-=1;/*将位示图对应为置零*/ else for(m=1;mj;m+) s*=2 ; sizei-=s; printf(回收成功!); printf(回收后的位示图为:n); out(); else printf(该块以被分配!); void assign()/*分配函数*/ unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid; for(i=0 ,k=0;i5;i+) q=sizei ; j=0; 8 while(1) /*查找位示图的第一个为零的位,将其分 配,该位置一*/ j+ ; if(q%2)=0) if(j=1) sizei+=1; else for(m=1;mj;m+) s*=2 ; sizei+=s; k=1; break ;/*完成后退出*/ q=q/2; if(k=1) /*将找到的位示图位转换成物理地址*/ if(j-1)/8=1) zhm=2*i+1; cid=(j-9)/4; sq=(j-9)%4; else zhm=2*i; cid=(j-1)/4; sq=(j-1)%4; n=1; break;/*退出 for 循环*/ if(n=0) 9 printf(没有空间可分配!n); else printf(分配成功!n);/*输出物理地址*/ printf(柱面号为: %dn,zhm); printf(磁道号为: %dn,cid); printf(扇区号为: %dn,sq); printf(分配后的位示图为:n); out(); void menu() /*功能选择函数*/ int choice; char judge; printf(n 请选择操作:(1-分配,2-回收):); scanf(%d, getchar(); if(choice=1) assign(); else if(choice=2) callback(); else printf(n 没有此项!); printf(n 继续还是退出?(y-继续,n-退出):); scanf(%c, getchar(); if(judge=y) menu(); else 10 printf(n 现在的位示图:n); out(); printf(n 按任意键退出!n); getchar(); main() out(); menu(); 4.4. 运行结果运行结果 下图 4-1 为用位示图法分配一个磁盘空间后的状态图: 11 图 4-1 位示图法分配操作运行结果 下图 4-2 为用位示图法回收一个已分配的磁盘空间后的状态图: 12 图 4-2 位示图法回收操作运行结果 13 5.5. 总结总结 做课程设计是为了对平时学习的理论知识与实际操作相结合,在理论和实 践上进一步巩固已学基本理论及应用知识并加以综合提高,学会将知识应用 于实际的方法,提高分析和解决问题的能力。在做课程设计的过程中,深深 感觉到自身所学知识的有限。有些题目书本上没有提及,所以就没有去研究 过,做的时候突然间觉得自己真的有点无知,虽然现在去看依然可以解决问 题,但还是浪费了许多,这一点是必须在以后的学习中加以改进的地方,同 时也要督促自己在学习的过程中不断的完善自我。在设计过程中的思考和讨 论,对现有知识能够运用计算机来解决现实生活中的实际问题确立了信心, 对模块化程序设计思想有了比较清晰的印象,为今后的程序设计奠定了一定 的心理和技术上的准备。这次课程设计加强了我对计算机操作系统的认识, 对我个人而言是对所学课程内容掌握情况的一次自我验证。通过课程设计提 高了我对所学知识的综合应用能力,全面检查并掌握所学的内容,培养独立 思考,在分析问题、解决问题的过程中,更是获得一种成功的

温馨提示

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

评论

0/150

提交评论