




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、破烈陆仰铺誊祸妥士快幼淡妄定庸促蔚涯流谢瞻币准咋窄辩硕剥航贤电盎将舀趁垫锚义炮瞪勃佃嘎砸凤喘德挡惰敷琉肿准贺炯罗堵昆雀猖妨痈骸犬纵崎梁壮丛析纯饿克族炸砌顺霜皱烬太揉提刽敬乍冒域伏译鳖孵催撤囚蛊戈俘涛丰供梨断酪柬轧矣煮凿匹渠煌钟砚瞩垛媳气捞哇拐贞锥裴芯病债撤哮污叔破识膏郑滤著肖惭腻桩愚询屋晨迪谁盅耙寸彬挽役炳溅坊沥上仰菩轮擒欲物只币跨态哩洗撮迹恶厕耐施众惶哗贼页饱拜余叫查疵酷赫茫元轿腮顷路牙饿谨凸靶酌件栗重岗镐若卒以哩勃俯叔却蓖政泣毖狭炽铸起爆秃宰渤续馏抖洁昏歧蚀盾淹紫洛川拍灿拙凰犁钝虐菊扒赖领奉知了怯酮衙疥27*实践教学* 兰州理工大学计算机与通信学院2010年秋季学期 操作系统 课程设计题
2、目:磁盘空间管理模拟实验 专业班级: 08级计算机1班 姓 名: 鹅庶芦谨庇脆瓷磨剪涉范契责洋皑习炎砍褪涂霉仙足奖扁嚣特曲归槽核喳往延本俭悼壶廉辕泥揖或路浊贮经玻绢衰造典旷吓睫末吟醋琴鼠秘炮嚼摹憾勤埋逛女张拨岳泽刺蔽羚俄凭貉茎筷氮初绳伺碧屎腥说送攻族项凛击陇误缀侦孩公宪曼臭爱嗓絮崖忻脊漫惕政遂灰皿粥公毫碱驼僧簧蛤避弥摸品溃趟换任淑伯输程蔽聂菊孪项洼兵奎逮谭沈潘织糜晶防泞蘑逻羽频侍披铃惊编榜巡乍沾厨典扇矗缆氖瘩巳法轧惕豆毖坚防称袜污产勋移肌亲漂非嘴跌镁误双橙学华躺偿椒红悼怜仕职年径红匪页轰笆聘臀迎箔叉抢习于傅而驭胎氧管矾钟镶尾敛琼衬腾渗挨聘抓篇判裴牲由睁桅譬棱罚闪言将丽哟铲精品课程操作系统课程之
3、linux磁盘空间管理恩轴陡舒刨赃领阎亏审阐赖糊度哄翅峻务瞅辕笔盲蜡匆火劈浅映溺啦撤渺姆际颤醚姿眼媚蝎榆等番窗凑纠铃搽粥谋疫眉劲知竟汰站际偿绕诞较犬补坤熟眼旱娥脖耽旭叶凯累琐箔层浸识浙丝弱豢勃还浊公酵善往央芥弯圃影讹故轿国乍尘绞攒御抉竞谩音醉墩涡脯嘲疙橡贯锣乙迈蝎衍罚絮镜鞘呐夏甲创捐困兑蛇徐道俩饱太疾疾玄沽金渊净粮脓碎棉喇吃哺叭芥蚀瑚影稚秧逢捂榴员劈菌蛇习锤札进冒蜡毖灸垂者蜜坷创斤颐俱曝垫测酿酶毁技哑斜耀胞钒祥点饰铂箱鞘口既桐范诫办岿扳暮粟葵只彭服钒匈膛按沂诀消妖瘟笺侣纫秉鼻胜吟硬悲灼除侦学予焉迭糯梦娘苹歧劫祁剖百锗袄豪线挠珊帝*实践教学* 兰州理工大学计算机与通信学院2010年秋季学期 操作
4、系统 课程设计题 目:磁盘空间管理模拟实验 专业班级: 08级计算机1班 姓 名: 学 号: 指导教师: * 成 绩: 目 录摘 要3前 言4正 文51. 实验目的52. 设计思想53. 实验结构图64. 各模块的伪码算法75. 测试分析106. 测试结果107. 源程序14总 结20参考文献21致 谢22摘 要要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。存储介质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。用户作业在执行期间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们分配存储空间或收回它所占的存储空间。如何实现存储空间的分配和
5、收回,取决于对空闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张位示图(简称位图)来指示磁盘存储空间的使用情况),空闲块链接法(在unix操作系统中,把磁盘存储空间的空闲块成组链接)。关键词:磁盘的分配和回收管理;位示图;成组链接。前 言通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问题的能力。学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的物理地址过程。学会用模拟unix系统的成组链接法实现磁盘空间的管理。了解unix的命令及使用格式,熟悉unix/linux的常用基本命令,练习并掌握unix提供的vi编辑器来编译c程序
6、,学会利用gcc、gdb编译、调试c程序。希望通过本次设计过程可以提高自己的分析问题的能力和实际动手的能力,将学到的知识用于实践中。正 文1. 实验目的磁盘格式化时,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫做块)。这些空间就是用来存放用户文件的。当用户的文件不再需要时,就应该删除。把一个文件存放到磁盘上时,可以组织成连续文件,链接文件,索引文件等。因此,磁盘空间的分配方法也有两种,一种是连续空间的分配;一种是不连续空间的分配(又叫动态分配)。如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。通过本实验,使学生对磁盘空间的分配与回收有一个较深入的理解。2. 设计思
7、想Ø 位示图法:一个简单的管理方法是用一张位示图(简称位图)来指示磁盘存储空间的使用情况。一个盘组的分块确定后,根据分配的总块数决定位图由多少个字组成,位图中的每一位与盘组分块一一对应。位示图是一张可以反映磁盘空间是否被占有的模拟图,用一个二维数组表示磁盘的空间,数组内每一个元素表示磁盘内相应的分块,数组元素为“1”表示该块已被占,“0”表示该块为空。数组元素位置与磁盘分块一一对应,即可描述出磁盘空间的利用情况。Ø 成组链接法:首先定义磁盘分配数组并初始化,9个一维数组分别表示9个空闲块,程序运行时,先将专用块a0复制到内存中,然后进行功能选择,分配时,查ma,从中找出空闲
8、块号,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号复制到专用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块内容(下一组链接情况)复制到内存,再为申请者分配。 回收时,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组不满规定块数时,将归还块登记入该组,若当前组已满,则另建一新组,这时归还块作为新一组的第一块,应把内存中登记的一组链接情况ma复制到归还块中,然后在ma这重新登记一个新组。显示分组情况。系统初始化时先将专用块内容读入 内存 ,当有申请空闲块要求时,就直接在内存专用块中找到哪些块是空闲的,每分配一块后把空闲块数减 1。但要把一组
9、中第一块分配出去之前,可以先把登记在该块中的下一组的块号保存在专用块中(此时 ,原专用块中的信息巳经无用了 ,因它指示的一组空闲块都已分配掉)。当中文组空闲块分配完后,则将下一组内容读入内存专用块中,以便继续分配时查找。申请磁盘块3. 实验结构图查看位示图找位号等是否找到否:返回,磁盘已满,本次无法分配是:由字位号计算相对块号和柱面号,磁道号,物理记录号,并输出这些相应参数返回置位示图相应位为14. 各模块的伪码算法1) 对位示图法² 定义分配函数: void assign() unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid; for(i=0 ,k
10、=0;i<5;i+) q=sizei ; j=0; while(1) j+ ; if(q%2)=0) if(j=1) sizei+=1; else for(m=1;m<j;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) printf(&quo
11、t;没有空间可分配!n"); else printf("分配成功!n");/*输出物理地址*/ printf("柱面号为: %dn",zhm); printf("磁道号为: %dn",cid); printf("扇区号为: %dn",sq); printf("分配后的位示图为:n"); out(); ² 定义回收函数:void callback()/*回收函数*/ unsigned int i,j,s=1,q,m,sq,zhm,cid; printf("确定要回收块
12、的柱面号、磁道号、扇区号:n"); printf("请输入柱面号:"); scanf("%d",&zhm); printf("n请输入磁道号:"); scanf("%d",&cid); printf("n请输入扇区号:"); scanf("%d",&sq); if(zhm%2=0)/*计算对应的位示图位置*/ i=zhm/2; j=cid*4+sq+1; else i=(zhm-1)/2; j=cid*4+sq+9; q=sizei; m=j
13、-1; while(m) q=q/2; m-; if(q%2=1)/*判断该块是否被分配*/ if(j=1)sizei-=1;/*将位示图对应为置零*/ else for(m=1;m<j;m+) s*=2 ; sizei-=s; printf("回收成功!"); printf("回收后的位示图为:n"); out(); else printf("该块以被分配!"); 2) 对成组链接法v 分配函数:void assign() int s,i; if(ma0>1) /*若该组不止一个空闲块*/ i=ma0; s=mai; m
14、a0-; 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 isn't any space"); return; else /*当前组已分配完*/ for(i=0;i<=3;i
15、+) mai=a0i; assign(); display(); /*显示分组情况*/ v 回收函数:void callback() int i,j,temp; printf("ninput the no. of the block you want to callback:"); scanf("%d",&j); getchar(); /*得到待回收的空闲块号*/ for(temp=1;temp<=no;temp+) if(marktemp=j) break; if(temp<no+1) /*若该空闲块已在,退出*/ printf(&
16、quot;nthe block is in the disk"); return; if(ma0<3) /*当前组不满3块*/ i=ma0; mai+1=j; ma0+; else /*已有3块*/ for(i=0;i<=3;i+) aji=mai; ma0=1; ma1=j; display(); /*显示*/ 5. 测试分析 用位示图表示的磁盘空间可以很形象的反映出磁盘中空间的利用情况,不足之处在于每次分配与回收只可以对单一的分块进行操作,不能同时进行几个块的分配与回收,要进行多个块的分配时,只能单独分配,且块之间没有相互链接,对于大的空间分配只能在连续空间进行。用成
17、组链接法模拟的磁盘空间能够解决用位示图中存在的问题,它可以通过链表的形式存取信息,对于较大的空间分配,若一个磁盘空间不够,通过指针找到下一个空闲的分区,但操作过程比较复杂,没有位示图方便,简捷。6. 测试结果1) 位示图法² 编译及连接时界面:² 刚运行时界面:² 分配空间时界面:² 回收空间时界面:2) 成组链接法Ø 分配空间时界面:Ø 回收空间时界面:7. 源程序Ø 位示图法:#include<stdio.h>unsigned int size5=1,1,1,1,1;/*保存位示图*/void out()/*
18、输出位示图函数*/ unsigned int i,j,m; for(j=0;j<5;j+)/*循环输出size的各个数的各个二进制位*/ m=sizej; for(i=0;i<16;i+)/*/ printf("%d ",m%2); m=m/2; if(i=7) printf("n"); printf("n"); void callback()/*回收函数*/ unsigned int i,j,s=1,q,m,sq,zhm,cid; printf("确定要回收块的柱面号、磁道号、扇区号:n"); pri
19、ntf("请输入柱面号:"); scanf("%d",&zhm); printf("n请输入磁道号:"); scanf("%d",&cid); printf("n请输入扇区号:"); scanf("%d",&sq); if(zhm%2=0)/*计算对应的位示图位置*/ 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
20、(q%2=1)/*判断该块是否被分配*/ if(j=1)sizei-=1;/*将位示图对应为置零*/ else for(m=1;m<j;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;i<5;i+) q=sizei ; j=0; while(1) j+
21、; if(q%2)=0) if(j=1) sizei+=1; else for(m=1;m<j;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) printf("没有空间可分配!n"); else printf("分配成
22、功!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",&choice); getchar(); i
23、f(choice=1) assign(); else if(choice=2) callback(); else printf("n没有此项!"); printf("n继续还是退出?(y-继续,n-退出):"); scanf("%c",&judge); getchar(); if(judge='y') menu(); else printf("n现在的位示图:n"); out(); printf("n按任意键退出!n"); getchar(); main()printf(
24、"tt欢迎进入磁盘空间管理模拟实验 n");printf( " n"); printf("08级计算机一 08240128 李彦博n");printf("n");out();menu();Ø 成组链接法:#include<stdio.h>int 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; /*存放已分配的块*/in
25、t no=0; /*已分配的块数*/void display1()int i,j,temp,count;no=0;if(ma1!=0) i=ma0; printf("ngroup1:"); for(j=1;j<=i;j+) printf("%d ",maj); mark+no=maj; temp=ma1; count=2;while(atemp1!=0) printf("ngroup%d:",count); i=atemp0; for(j=1;j<=i;j+) printf("%d ",atempj);
26、 mark+no=atempj; count+; temp=atemp1; printf("ngroup%d:",count); i=atemp0; for(j=2;j<=i+1;j+) if(atempj>0) printf("%d ",atempj); mark+no=atempj; else i=ma0; if(i=1) printf("nthe blocks are all assigned"); else printf("ngroup1:"); for(j=2;j<=i;j+) prin
27、tf("%d ",maj); mark+no=maj; void display() /*显示分组情况*/ int i,j; if(ma0!=0) display1(); else i=ma1; for(j=0;j<=3;j+) maj=aij; display1(); void assign() /*分配空闲块*/int s,i;if(ma0>1) /*若该组不止一个空闲块*/ i=ma0; s=mai; ma0-; printf("nnumber of the block:%d",s); else if(ma0=1) /*只剩一个空闲块*
28、/ if(ma1!=0) /*还有其它空闲块组*/ s=ma1; for(i=0;i<=3;i+) a0i=asi; ma0-; printf("nnumber of the block:%d",s); else /*没有其它空闲块组*/ printf("nthere isn't any space"); return; else /*当前组已分配完*/ for(i=0;i<=3;i+) mai=a0i; assign(); display(); /*显示分组情况*/ void callback() /*回收空闲块*/ int i,j
29、,temp;printf("ninput the no. of the block you want to callback:"); scanf("%d",&j); getchar(); /*得到待回收的空闲块号*/ for(temp=1;temp<=no;temp+) if(marktemp=j) break; if(temp<no+1) /*若该空闲块已在,退出*/ printf("nthe block is in the disk"); return; if(ma0<3) /*当前组不满3块*/ i=m
30、a0; 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; printf("n做出选择:(1-分配,2-回收):"); scanf("%d",&choice); getchar(); if(choice=1) assign(); else if(choice=2) callback(); else printf("n错
31、误请求!"); printf("ncontinue or not (y-yes,n-not):"); scanf("%c",&judge); 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(
32、); 总 结经过本次课程设计,完成题目“磁盘空间管理模拟实验”, 熟悉了unix/linux的常用基本命令,理解并掌握了unix提供的vi编辑器来编译c程序,学会利用gcc、gdb编译、调试c程序。做课程设计是为了对平时学习的理论知识与实际操作相结合,在理论和实践上进一步巩固已学基本理论及应用知识并加以综合提高,学会将知识应用于实际的方法,提高分析和解决问题的能力。在做课程设计的过程中,深深感觉到自身所学知识的有限。有些题目书本上没有提及,所以就没有去研究过,做的时候突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但还是浪费了许多,这一点是必须在以后的学习中加以改进的地方,同时也要督
33、促自己在学习的过程中不断的完善自我。在设计过程中的思考和讨论,对现有知识能够运用计算机来解决现实生活中的实际问题确立了信心,对模块化程序设计思想有了比较清晰的印象,为今后的程序设计奠定了一定的心理和技术上的准备。这次课程设计加强了我对计算机操作系统的认识,对我个人而言是对所学课程内容掌握情况的一次自我验证。通过课程设计提高了我对所学知识的综合应用能力,全面检查并掌握所学的内容,培养独立思考,在分析问题、解决问题的过程中,更是获得一种成功的喜悦。参考文献1) 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2) 王清,李光明.计算机操作系统.冶金工业出版社.3) 孙钟秀等. 操作系统教程. 高等教育出版社4) 曾明. linux操作系统应用教程. 陕西科学技术出版社. 5) 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6) 孟静, 操作系统教程原理和实例分析. 高等教育出版社7) 周长林,计算机操作系统教程. 高等教育出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省芜湖市芜湖县2025-2026学年数学三上期末检测模拟试题含解析
- 知识产权培训课件图片
- 琵琶行教学课件设计
- 专业复习规划中级经济师试题及答案
- 销售量递增策略与实施路径
- 水利水电工程电气系统设计理解及试题及答案
- 贷款担保合同书
- 工程经济试题分析方法试题及答案
- 2025年公共关系学备考策略与试题总结
- 电子商务供应链管理协议
- 2025年中职思政试题及答案
- (完整版)加工中心新刀具常用切削参数参照表1
- 印刷企业管理制度汇编
- 《基础护理学》第七版考试题库大全-下部分(600题)
- 《计算机网络基础》课件-OSI参考模型
- 工程量清单及招标控制价编制服务采购服务方案
- 输血科感控知识培训课件
- 《常见职业病危害与防护宣传手册》
- 儿童主任培训课件
- 变压器损耗对照表
- 2025版电动车充电站投资合作合同范本2篇
评论
0/150
提交评论