《【精品课程设计】操作系统课程设计之linux磁盘空间管理》由会员分享,可在线阅读,更多相关《【精品课程设计】操作系统课程设计之linux磁盘空间管理(28页珍藏版)》请在金锄头文库上搜索。
1、*实践教学*兰州理工大学计算机与通信学院2010 年秋季学期操作系统 课程设计题 目:磁盘空间管理模拟实验 专业班级: 08 级计算机 1 班 姓 名: 学 号: 指导教师: * 成 绩: 23目 录摘 要 .3前 言 .4正 文 .51. 实验目的 .52. 设计思想 .53. 实验结构图 .64. 各模块的伪码算法 .75. 测试分析 .106. 测试结果 .107. 源程序 .14总 结 .20参考文献 .21致 谢 .224摘 要要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。存储介质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。用户作业在执行期间经常要
2、求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们分配存储空间或收回它所占的存储空间。如何实现存储空间的分配和收回,取决于对空闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张位示图(简称位图)来指示磁盘存储空间的使用情况) ,空闲块链接法(在 UNIX 操作系统中,把磁盘存储空间的空闲块成组链接) 。关键词:磁盘的分配和回收管理;位示图;成组链接。5前 言通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问题的能力。学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的物理地址过程。学会用模拟 UNIX 系统的成组
3、链接法实现磁盘空间的管理。了解 UNIX 的命令及使用格式,熟悉 UNIX/LINUX 的常用基本命令,练习并掌握 UNIX 提供的 vi 编辑器来编译 C 程序,学会利用 gcc、gdb 编译、调试 C 程序。希望通过本次设计过程可以提高自己的分析问题的能力和实际动手的能力,将学到的知识用于实践中。6正 文1. 实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫做块)。这些空间就是用来存放用户文件的。当用户的文件不再需要时,就应该删除。把一个文件存放到磁盘上时,可以组织成连续文件,链接文件,索引文件等。因此,磁盘空间的分配方法也有两种,一种是连续空间的分配;
4、一种是不连续空间的分配(又叫动态分配)。如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。通过本实验,使学生对磁盘空间的分配与回收有一个较深入的理解。2. 设计思想 位示图法:一个简单的管理方法是用一张位示图(简称位图)来指示磁盘存储空间的使用情况。一个盘组的分块确定后,根据分配的总块数决定位图由多少个字组成,位图中的每一位与盘组分块一一对应。位示图是一张可以反映磁盘空间是否被占有的模拟图,用一个二维数组表示磁盘的空间,数组内每一个元素表示磁盘内相应的分块,数组元素为“1”表示该块已被占, “0”表示该块为空。数组元素位置与磁盘分块一一对应,即可描述出磁盘空间的利用情况。 成组链接法
5、:首先定义磁盘分配数组并初始化,9 个一维数组分别表示 9 个空闲块,程序运行时,先将专用块 A0复制到内存中,然后进行功能选择,分配时,查MA,从中找出空闲块号,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号复制到专用块这,然后把该块分配给申请者,当一组7的空闲块分配完后则把专用块内容(下一组链接情况)复制到内存,再为申请者分配。 回收时,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组不满规定块数时,将归还块登记入该组,若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把内存中登记的一组链接情况 MA 复制到归还块中,然后在 MA 这重新登
6、记一个新组。显示分组情况。系统初始化时先将专用块内容读入 内存 ,当有申请空闲块要求时,就直接在内存专用块中找到哪些块是空闲的,每分配一块后把空闲块数减 1。但要把一组中第一块分配出去之前,可以先把登记在该块中的下一组的块号保存在专用块中(此时 ,原专用块中的信息巳经无用了 ,因它指示的一组空闲块都已分配掉)。当中文组空闲块分配完后,则将下一组内容读入内存专用块中,以便继续分配时查找。3. 实验结构图申请磁盘块查看位示图找位号等是否找到是:由字位号计算相对块号和柱面号,磁道号,物理记录号,并输出这些相应参数否:返回,磁盘已满,本次无法分配置位示图相应位为 1 返回84. 各模块的伪码算法1)
7、对位示图法 定义分配函数:void assign() unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid;for(i=0 ,k=0;i1) /*若该组不止一个空闲块*/ i=MA0;s=MAi;MA0-;printf(nnumber of the block:%d,s); else if(MA0=1) /*只剩一个空闲块*/if(MA1!=0) /*还有其它空闲块组*/ s=MA1;for(i=0;iunsigned int size5=1,1,1,1,1;/*保存位示图*/void out()/*输出位示图函数*/ unsigned int i,j,m;for
8、(j=0;jint MA4; /*空闲块数组*/intA94=3,1,2,3,3,4,5,6,0,0,0,0,0,0,0,0,3,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0; /*磁盘空间*/int mark9; /*存放已分配的块 */int No=0; /*已分配的块数 */void display1()int i,j,temp,count;No=0;if(MA1!=0)i=MA0;printf(ngroup1:);for(j=1;j0)printf(%d ,Atempj);mark+No=Atempj; elsei=MA0;if(i=1)printf(n
9、The blocks are all assigned);else printf(ngroup1:);for(j=2;j1) /*若该组不止一个空闲块*/ i=MA0;s=MAi;MA0-;printf(nnumber of the block:%d,s); else if(MA0=1) /*只剩一个空闲块*/if(MA1!=0) /*还有其它空闲块组*/ s=MA1;for(i=0;i=3;i+)A0i=Asi;MA0-;printf(nnumber of the block:%d,s); else /*没有其它空闲块组 */ printf(nThere isnt any space);re
10、turn; else /*当前组已分配完 */for(i=0;i=3;i+)MAi=A0i;assign(); display(); /*显示分组情况*/ 24void callback() /*回收空闲块*/ int i,j,temp;printf(ninput the No. of the block you want to callback:);scanf(%d,getchar(); /*得到待回收的空闲块号*/for(temp=1;temp=No;temp+) if(marktemp=j)break;if(tempNo+1) /*若该空闲块已在,退出*/ printf(nThe blo
11、ck is in the disk);return; if(MA03) /*当前组不满 3 块*/ i=MA0;MAi+1=j;MA0+;else /*已有 3 块*/for(i=0;i=3;i+)Aji=MAi;MA0=1;MA1=j; display(); /*显示*/ void menu() /*功能选择函数*/ int choice;char judge;25printf(n 做出选择:(1- 分配,2-回收):);scanf(%d,getchar();if(choice=1)assign();else if(choice=2)callback();elseprintf(n 错误请求!
12、);printf(ncontinue or not (y-Yes,n-Not):);scanf(%c,getchar();if(judge=y)menu();else printf(nNow the graph is:);display();printf(npress any key to quit); main() int i;for(i=0;i=3;i+)MAi=A0i;display();menu(); 26总 结经过本次课程设计,完成题目“磁盘空间管理模拟实验” , 熟悉了UNIX/LINUX 的常用基本命令,理解并掌握了 UNIX 提供的 vi 编辑器来编译 C 程序,学会利用 gcc、gdb 编译、调试 C 程序。做课程设计是为了对平时学习的理论知识与实际操作相结合,在理论和实践上进一步巩固已学基本理论及应用知识并加以综合提高,学会将知识应用于实际的方法,提高分析和解决问题的能力。在做课程设计