欢迎来到天天文库
浏览记录
ID:47044304
大小:39.01 KB
页数:9页
时间:2019-07-07
《位示图方法模拟磁盘块的分配与回收》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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#include3、.h>#definerow10#definecol10voidinit_random(){ unsignedintticks; structtimevaltv; intfd; gettimeofday(&tv,NULL); ticks=tv.tv_sec+tv.tv_usec; fd=open("/dev/urandom",O_RDONLY); if(fd>0) { unsignedintr; inti; for(i=0;i<512;i++) { read(fd,&r,sizeof(r)); t4、icks+=r; } close(fd); } srand(ticks); //printf("initfinished");}unsignedintnew_rand(){ intfd; unsignedintn=0; fd=open("/dev/urandom",O_RDONLY); if(fd>0) { read(fd,&n,sizeof(n)); } close(fd); returnn;}intstatistics_free(unsignedintwst[][]){intsum_free=0;//记录空闲块个数,并初始化inti_5、row=0;inti_col=0;for(;i_rowstatistics_free(wst)){printf("Thespacedon'tenough");return;}printf("The6、spaceaddresslikethis:");for(;i_row0&&wst[i_row][i_col]==0){wst[i_row][i_col]=1;ask--;//计算当前的分配块号的地址address=i_row*row+i_col;printf("%d",address);}elseif(ask==0){printf("Theaskhadrequest,thearrayischanged:");for(t_row=7、0;t_rowrow-1){printf("Yourasktofreespacedo
3、.h>#definerow10#definecol10voidinit_random(){ unsignedintticks; structtimevaltv; intfd; gettimeofday(&tv,NULL); ticks=tv.tv_sec+tv.tv_usec; fd=open("/dev/urandom",O_RDONLY); if(fd>0) { unsignedintr; inti; for(i=0;i<512;i++) { read(fd,&r,sizeof(r)); t
4、icks+=r; } close(fd); } srand(ticks); //printf("initfinished");}unsignedintnew_rand(){ intfd; unsignedintn=0; fd=open("/dev/urandom",O_RDONLY); if(fd>0) { read(fd,&n,sizeof(n)); } close(fd); returnn;}intstatistics_free(unsignedintwst[][]){intsum_free=0;//记录空闲块个数,并初始化inti_
5、row=0;inti_col=0;for(;i_rowstatistics_free(wst)){printf("Thespacedon'tenough");return;}printf("The
6、spaceaddresslikethis:");for(;i_row0&&wst[i_row][i_col]==0){wst[i_row][i_col]=1;ask--;//计算当前的分配块号的地址address=i_row*row+i_col;printf("%d",address);}elseif(ask==0){printf("Theaskhadrequest,thearrayischanged:");for(t_row=
7、0;t_rowrow-1){printf("Yourasktofreespacedo
此文档下载收益归作者所有