位示图方法模拟磁盘块的分配与回收位示图方法模拟磁盘块的分配与回收
题目的描述:
1.要求在LINUX环境用C语言编程
2.假设有一个500行500列的矩阵来表示磁盘块,状态位是1
表示已经分配出去,状态位是0表示空闲块
3.给这个矩阵用随机函数初始化,让其布满0和1
4.写程序统计有多少个空闲块?
5.有一个程序文件要申请20个磁盘块,能否分配?如果可以分
配,给出分配块的块号地址,块号=字号×500+位号,并修改位示图,块号从0开始编址。
6.要回收第300块和第580块,如何实现?给出位示图修改的
程序
在linux系统中,我想很...
位示图方法模拟磁盘块的分配与回收
目的描述:
1.要求在LINUX环境用C语言编程
2.假设有一个500行500列的矩阵来表示磁盘块,状态位是1
表示已经分配出去,状态位是0表示空闲块
3.给这个矩阵用随机函数初始化,让其布满0和1
4.写程序统计有多少个空闲块?
5.有一个程序文件要申请20个磁盘块,能否分配?如果可以分
配,给出分配块的块号地址,块号=字号×500+位号,并修改位示图,块号从0开始编址。
6.要回收第300块和第580块,如何实现?给出位示图修改的
程序
在linux系统中,我想很多的朋友使用的是虚拟机,这样的话,当我们将行和列都设置为500x500的话,操作就不是很方便了,所以呢,小Q就将其修改为10X10的来演示就好了,其中的算法和思想是完全相同的。
另外一点,必须声明,在linux中使用vi编辑器进行C语言的编程,其中是不允许含有中文的,即使是中文的注释也不行。为了,朋友们好理解,我再这里写注释的时候使用的是中文的注释,但是你在使用的时候一定要记住不能将其放入到linux环境下的vi编辑器中。
好了,我想建立文件什么的我就不用讲了,下面看下,如何解决上述的问题吧,就算是抛砖引玉吧。
/*使用变量:row表示行,col表示列*/
#include
#include
#include
#define row 10
#define col 10
void init_random ()
{
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 < 512; i++)
{
read (fd, &r, sizeof (r));
ticks += r;
}
close (fd);
}
srand (ticks);
//printf("init finished ");
}
unsigned int new_rand ()
{
int fd;
unsigned int n = 0;
fd = open ("/dev/urandom", O_RDONLY);
if (fd > 0)
{
read (fd, &n, sizeof (n));
}
close (fd);
return n;
}
int statistics_free(unsigned int wst[][])
{
int sum_free=0;//空闲块个数,并初始化int i_row=0;
int i_col=0;
for(;i_rowstatistics_free(wst))
{
printf("The space don't enough");
return;
}
printf("The space address like this:\n"); 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);
}
else if(ask==0)
{
继续阅读
本文档为【位示图方法模拟磁盘块的分配与回收】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。