位示图方法模拟磁盘块的分配与回收_第1页
位示图方法模拟磁盘块的分配与回收_第2页
位示图方法模拟磁盘块的分配与回收_第3页
位示图方法模拟磁盘块的分配与回收_第4页
位示图方法模拟磁盘块的分配与回收_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、位示图方法模拟磁盘块的分配与回收题目的描述:1. 要求在LINUX环境用C语言编程2. 假设有一个500行500列的矩阵来表示磁盘块,状态位是1表示已经分配出去,状态位是0表示空闲块3. 给这个矩阵用随机函数初始化,让其布满0和14. 写程序统计有多少个空闲块?5. 有一个程序文件要申请20个磁盘块,能否分配?如果可以分配,给出分配块的块号地址,块号=字号500+位号,并修改 位示图,块号从0开始编址。6. 要回收第300块和第580块,如何实现?给出位示图修改的程序在linux系统中,我想很多的朋友使用的是虚拟机,这样的话,当我们将行和列都设置为500x500的话,操作就不是很方便了,所以呢

2、,小Q就将其修改为10X10的来演示就好了,其中的算法和思想是完全相同的。另外一点,必须声明,在linux中使用vi编辑器进行C语言的编程,其中是不允许含有中文的,即使是中文的注释也不行。为了,朋友们好理解,我再这里写注释的时候使用的是中文的注释,但是你在使用的时候一定要记住不能将其放入到linux环境下的vi编辑器中。好了,我想建立文件什么的我就不用讲了,下面看下,如何解决上述的问题吧,就算是抛砖引玉吧。/*使用变量:row表示行,col表示列*/#include #include #include #define row 10#define col 10 void init_random

3、() unsigned int ticks; struct timeval tv; int fd; gettimeofday (&tv, NULL); ticks = tv.tv_sec + tv.tv_usec; fd = open (/dev/urandom, O_RDONLY); if (fd 0) unsigned int r; int i; for (i = 0; i 0) read (fd, &n, sizeof (n); close (fd); return n; int statistics_free(unsigned int wst)int sum_free=0;/记录空闲块

4、个数,并初始化int i_row=0;int i_col=0;for(;i_rowrow;i_row+)for(i_col=0;i_colstatistics_free(wst)printf(The space dont enough);return;printf(The space address like this:n);for(;i_rowrow;i_row+)for(i_col=0;i_col0&wsti_rowi_col=0)wsti_rowi_col=1;ask-;/计算当前的分配块号的地址address=i_row*row+i_col;printf(%d ,address);el

5、se if(ask=0)printf(nThe ask had request,the array is changed:n);for(t_row=0;t_rowrow;t_row+)for(t_col=0;t_colrow-1)printf(Your ask to free space dont find.);return;wstt_rowt_col=0;printf(nThe ask had request,the array is changed:n);for(r_row=0;r_rowrow;r_row+)for(r_col=0;r_colcol;r_col+)printf(%d ,w

6、str_rowr_col);printf(n);printf(n);int main () /int n, i; /init_random ();/调用内部的接口进行设置随机种子。 /n = rand (); /printf (n=%d , n); /for(i=0;i10;i+) / printf (%un, new_rand()%2);/能够产生0 或 1的随机数。 /定义数组:500x500 int i_row=0; int i_col=0;/作为循环的变量 int recover_number=30;/要求释放的块号 int space=20;/申请的磁盘块 init_random(); unsigned int wstrowcol; /初始化数组为0,1 for(;i_rowrow;i_row+) for(i_col=0;i_colcol;i_col+) wsti_rowi_col=new_rand()%2; printf(%d ,wsti_rowi_col); printf(n); /统计空闲块个数 printf(There have free space:%d,statistics_free(wst); /申请20个磁盘块,能否分配?如果可以分配,给出分配块的块号地址,块号

温馨提示

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

评论

0/150

提交评论