(完整word版)操作系统磁盘管理_第1页
(完整word版)操作系统磁盘管理_第2页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、11需求分析(1)设计内容和要求(包括原始数据、技术参数.条件、设计要求等)设计内容:1)采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收;2)采用空白块成组链接结构实现磁盘空间的分配和回收:3)采用位示图结构实现磁盘空间的分配和回收。基本要求:1)具有创建文件、空间分配、删除文件、释放空间等基本功能;2)把文件目录、磁盘空间管理的数据结构变化情况显示出來。(2)需求分析内容1)空白文件目录是管理磁盘空间的一种方法, 该方法将文件存储设备上的每个连续空闲 区看作一个空白文件,系统为所有空白文件单独建立一个目录,每个空白文件在这个目录中占 一个表目.表目的内容至少包括第一个空白块的地址

2、(物理块号),空白块的数目。2)位示图是另一种常用的管理磁盘空间的方法,该方法通过建立-张位示图來农示为1时表示该块己分配,当某位为0时表示该块空闲。3)位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时, 表示对应的盘块空闲;为“1”时,表示己经分配。有的系统把“0”作为盘块己分配的标记, 把“1”作为空闲标志(它们的本质上是相同的,都是用一位的两种状态标志空闲和已分配两 种情况)磁盘上的所有盘块都有个二进制位与之对应,这样,由所冇盘块所对应的位构成- 个集合,称为位示图。1.1小组分工温庭栋任务为:采用空白文件目录结构管理磁盘空间;魏子育任务为:采用空白块成组链接结

3、构实现磁盘空间的分配和回收;卫虹任务为:采用位示图结构实现磁盘空间的分配和回收;2.总体设计(1)磯盘存储空间管理是文件系统的重要内容采用空白文件目录结构管理磁盘空间,实现磁盘空间的分配和回收空白文件目录法进行 空何分配时,需要建立相关的数据结构,记录冃前空白区域和己使用区域,假设开始时全部 区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空2白文件目录表和己使用区域分配表。为此需建立两张表格.分别记录相关数据。插入文件程序流图如图2-1;3删除文件流程图如图2-2(2)采用空白块成组链接结构实现磁盘空间的分配和回收对于要求将磁盘存储空间的空闲块成组链接,我们可以

4、设计几个相应的一维数组,分别 表示磁盘的各个磁盘,数组中的元素表示每个磁盘的分块,分配时,通过查空闲表MA,从中 找出空闲块号,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号 复制到专用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块内容(卜. 一组链接情况)复制到内存,再为中请者分配。 回收时,输入待回收的块号,查找该块是 否己被分配,若未分配,退出,否则,当前组不满规定块数时,将归还块登记入该组,若当 前组已满,则另建-新组,这时归还块作为新一组的第-块,应把内存中登记的一组链接情 况MA复制到归还块中,然后在MA这重新登记一个新组。1)假定俺盘存储空间已

5、被划分成长度为n的等长块,共有M块M供使用。UNIX系统 采用空闲块成组链接的方法來管理磁盘存储空间,将磁盘中的每N个空闲块(NM)分成- 组,最后一组可以删除该文件,调整空白块的大小,首位号输入文件务图2 4不足N块,每组的第一块中登记了下一组空闲块的块数和块号,第一组的块数和块号登记在专用块中,登记的格式如下:表2-30空闲块数k1空闲块号12空闲块号2K11MMK空闲块号kMM当第一项内容为“0”时,则第二项起指出的空闲块是瑕后一组。2)开始时,空闲块号是烦序排列的,但经若干次的分配和归还操作后,空闲块的链接就 未必按序排列了。用二维数组A: array 0M-1 of array 0*

6、-nl来模拟管理磁盘空间, 用Ai表示第I块,第0块A0作为专用块。3)成组链接的分组情况记录在磁盘物理块中,为了査找链接情况,必须把它们读入主存, 故当磁盘初始化后, 系统先将专用块内容复制到主存中。 定义一个数组MA存放专用块内容, 即MA =A0o申请一块磁盘空间时,查MA,从中找出空闲块兮,当一组的空闲块只剩第一块 时,则应把该块中指出的卜一组的空闲块数和块号复制到专用块中,然后把该块分配给申请 若。当一组的空闲块分配完后则把专用块内容(下一组链接情况)复制到主存,再为申请者 分配。4)归还一块时给出归还的块号,若当前组不满规定块数时,将归还块登记入该组:若当 前组已满,则另建-新组,

7、这时归还块作为新-组的第一块,应把主存中登记的一组链接情 况MA复制到归还块中,然后在MA旋新登记一个新组。(3)采用位示图结构实现磁盘空间的分配和回收磁盘存储空间的分配有两种方式,一种足分配连续的存储空间,另一种是可以分配不连续 的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。 位示图由若干字节构成,每-位9磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。5算法流程图如下:分配流程图如卜图2-4:图2-16(2)释放流程图如图:2-4输入文件爼删除该文件调整空口块的大小,首位号73.详细设计1采用空白文件目录结构管理磁盘空间,实现磁盘

8、空间的分配和回收文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块 链法和位示图法。本实验采用前两种方法进行空间分配。空白文件目录法进行空间分配时, 需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当 有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表 和己使用区域分配表。为此需建立两张表格,分别记录相关数据。表3T:空白文件目录表(初始)序号首空白块号空白块个数物理块号标志085& 9,10,11,12未分配115415, 16, 17, 18未分配220720,21,22, 23, 24, 25,

9、26,27未分配330830, 31, 32, 33, 34, 35,36,37, 38未分配4601360, 61, 62, 63, 64, 65, 66,6, 68, 69, 70, 71, 72, 73未分配表3-2;空白文件目录(中间)文件名首空白块号空白快个数物理块号备注核心代码int alloc(int applyarea)/为文件分配存储块的函数,磁盘空间的分配int i, tag=0, j=0, flag=l;for( i=0 ; i applyarea & flag=l &freeblockZi name wtd二二NULL)8freeblockti. sta

10、rtaddress = freeblock.i- startaddress + applyarea;freeblockti. size=freeblocki sizeapplyarea;tag二1;/*佝满足条件的空闲区时,tag置1*/flag=0;freeblockij. namewtd=fname;printf ($ %c. n, freeblocki name);return freeblockEi. startaddressapplyarea;elseif (freeblockEi. state=l & freeblockEi. size=applyarea & fl

11、ag=l & freeblockli namewtd=NULL) freeblockEi. startaddress = freeblockEi. startaddress + applyarea;freeblockTi, size=freeblocki sizeapplyarea:freeblockEi state二0;flag=0;tag二1;/*有满足条件的空闲区时,tag置1*freeblocki name wtdj=fnameif (tag二二0)return一1;void set free ()/实现磁盘空间的回收int i, j, k;char s;printf(*输入要

12、删除的文件名:/);getchar0;scanf&s);for(j=0;j100 ;j+)if(FMenuLj. Fname=s)9 break; for(i=0;iN;i+)for(k=0;k100;k+)printf($ %c %d n, freeblockti. name, i);if(freeblocki. namek=s) freeblocki. state=l;freeblocki. startaddress=freeblockLi.startaddress -(int)ceil(FMenuj. size*l. 0/100);freeblocki. size=freeblo

13、cki. size + (:int)ceil(FMenuj. size*l. 0/100);void print ()/打印输出衷int i;printf (*nO ;printf (I序号.第一个空白块. 连续空闲块个数.状态.I); printf(n);printf(”I.I); printf(*n*);for(i=0;i0)13int mark9 ;/*存放己分配的块*/int No=0;/*已分配的块数*/void displayl 0打E卩显示结构 int i, j, temp, count;No=0;if(MAl!=0)i=MA01;printf(n组1:t);for(j=l;j=

14、i;j+) printf (*%d,MAj);mark+NoZ=MAt j;)temp二MA1;count=2;while(AtempZ1!=0)printf (n组d: t , coun:);i二Atemp0;for(j=l;j=i;j+) printf (*%d, Atemp j);mark+No=Atempj;count+;temp=Atempi1;printf (n组d: t, count);i=Atemp0;for(j=2;j=i+l;j+) int s, i ;14 printf (%d, Atemp j);markI+No=AtempZj;elsei=MA01;if(i=l)pr

15、intf(n所有的快都已被分配! ”);else printf(*n组1:);for(j=2;j=i;j+) printf (*%dmark +No =MA 1 j ;void display0/*显示分组情况*/ int i, j;if(MA0!=0)displayl0;else i=MAl;for(j=0;j=3;j+)MAj二Aij;displayl0;void assign0分配空闲块*/ int s, i ;1516/*若该组不止一个空闲块*/ i=MAO;s二MAi;MAO ;printf (*n被分配的块号:n%dn, s);else if(MAO=l)/*只剩一个空闲块*/ i

16、f(MAl !=0)/*还有其它空闲块组*/ s=MAll;for(i=0;i=3;i+)A0i二Asi;MA01 ;printf (*n被分配的块号:n%dn, s);)else/*没有其它空闲块组*/printf(*n没有空闲空间!”);return;else/*当前组已分配完*/for(i=0;i=3;i+)MAi=A0i;assignO ;displayO;/*显示分组情况*/void callback0/*回收空闲块*/ int i, j, temp;17printf (n请输入你想回收的块号:n);18for (temp=l; temp二No; temp卄)if(marktemp二

17、二j)break;if(tempNo+l)/*若该空闲块已在,退出5*7 printfCn该块还未被分配! ”);return;)if(MA03)/*当前组不满3块权i=MA01;MAi+l=j:MA0+;)else/*己有3块*/for(i=0;i=3;i卄)Aji二MAi;MAO=1;MA1二j;displayO ;/*显示*/scanf&j);getchar0;/*得到待回收的空闲块号*/guest-muvK2Mubuntu: -/Desktop guest muvK20jbuntu: $ pwd/tRp/guest-RuvKZMguest-muvK2Mubuntu:*$ cd

18、Desktopguest*muvK2Hubuntu:-/Desktops gcc 321 i321.c: in function dtsplayl:321 v:13:12: warning: forRat *%dfexpects a matching *int* arguRent prlntf(MnfflXd:f);guest-nuvK2iubuntu:*/0esktop$ gcc 321.c guest muvK?Mubuntu:-/Desktops /a out初始轻接團为:组123t&2:456组3:78请进行相应操件:(显入分配空间UiA c-回收空间):图3 8:初始化視图g

19、uest-nuvK2Mubuntu:-/Desktops ./a.out初始链接图为:组123组2:456组3:78请进行相应操作:(镇入 V,分配空间,键入 p,回收空间: 被分配的块号:3组1:12组2:456组3:78遷否纟隹续操作?(键入V继续,键入退岀):图3 9:分配块磁道号=V 20被分配的块号:3是否继续操作?(键入继续崔入退岀):y请进行相应操作:(Afa*分配空间後入回收空间): a被分配的块号:2组 1:1组 2:456组 3:78是否维续操作?(准入维续.健入 5,退出):是否继续拆作?(A y 续後入“退岀):頁进行相应猱作:(掇入分配空间,13 入回收空间):请输入

20、你想回收的块号:是否堆续按作?(當入维续.證入 F 退出):图3-12:何收块3.采用位示图结构实现磁盘空间的分配和回收(1)为了提高磁盘存储空间的利用率,町在磁盘上组织成链接文件、索引文件,这类文件 可以把逻辑记录存放在不连续的存储空间。为了表示哪些磁盘空间己被占用,哪些磁盘空间 是空闲的,可用位示图來指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。但要注意,对于主存储空间和磁盘存储 空间应该用不同的位示图來管理,绝不可混用。(2)申请一块磁盘空间时,由分配程序査位示图,找出一个为“0”的位,计算出这一位对 应块的磁盘物理地址,且把

21、该位豐成占用状态“1”。假设现在有一个盘组共8个柱面,毎个 柱面有两个磁道,每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位 为“0”时,这个空闲块对应的磁盘物理地址为:1414 7 71212 3 3UIJ LLLJ纟纟1212 3 3rirjrirj riTjriTj21柱而号-字节号物理记录号二 位数mod4(3)归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的 对应位,把该位叠成“0”。按照(2)中假设的盘组,归还块在位示图中的位置计算如下:字节号二柱面号位数二磁道号x4+物理记录号(4)设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显

22、示或打印程序运行前运行 后的位示图:分配时把分配到的磁盘空间的物理地址显示或打印出來,归还时把归还块对应 于位示图的字节号和位数显示或打印出来。源代码void showbitmap (void) /showbitmap函数,功能打印位示图信息printfC当前系统磁盘位示图(0表示块可用):n) ;/用來和位示图bitmap相与得到某位的状态printf (*第一磁道第二磁道n*);printf (0扇区1扇区2扇区3扇区0扇区1扇区2扇区3扇区);for( int i = 0 ;ibitmapi);printf(n);system(pause);void diskallocate (void

23、) diskallocate函数,分配物理块给22由用户输入需要的物理块数:int neednum;int i ;int busy = 0;char filestor32 ;/用户名printf(*输入需要分配的块数:n);scanf&neednum);printf (*输入文件名:n);scanffilestor);for( i二0;iC0UNT;i+)/统计已占用的物理块busy =busy + bitinfo-bitmapi;if( 64busyneednum )printf(zz没冇足够的空闲磁盘,分配失败!);elseprintf(开始分配.n);for (i=o : ibi

24、tmapi)/ printf (-分配块物理地址为:第%d个柱面,t第%d个磁道,t第%d个 扇区n, i/8+1, i%8/4, (i%8)%4);bitinfobitmapi = 1;strcpy(bitinfofilenameli , filestor);neednum;if( 0二二neednum)23break;printf(*分配成功!n);showbitmap();system(pause);void diskreturn (void) /回收物理块char filereturn.32;int i;printf (”输入要回收的文件4T);scanffilereturn);for

25、( i二O;ibitmapi二0;showbitmap 0;system(pause*);24G王页l Ubuntu巾c F guest-muvK2Mubuntu: /Desktopguest-nuvK2Mubuntu:*$ n组i:wd n组l:wd: command not found guest-nuvK2Mubuntu:-$ pwd /trp/guest-nuvK2Mguest nuvK?Mubuntu:-$ cd Desktop guest-nuvK2Mubuntu:-/Desktops gcc 3.c guest HuvK2Mubuntu:/Desktops / out1:S2:分

26、配3:回收心退aiWff所雯执行的功图3-13:初的化图3-lh位示图25Terminalc guest.muvK2M)ubuntu: -/Desktop所立执行的功能2询入需要分配的块数:18输入文件名:1:査看2:分配3:回收4:退岀稈序W 3-16:物理块回收wenitan幵垢分配 分Si成功!mu0扃区煽区2扇区3扇区6拄面11111拄面1111M.11003柱直060ft4柱面00005住面006柱面0e097拄面009第二曲道1扇区2屈区3扇区111111 960060060eoeo9601:査含2:分配3:回收4:退岀程序图3-15:物理块分配:1: cis: not found】:査看2:分配3:回收4:退岀秤序第-盅逍0扇区1区2JR区3扇区B柱面e00e1柱面60

温馨提示

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

最新文档

评论

0/150

提交评论