simpleFS icon indicating copy to clipboard operation
simpleFS copied to clipboard

关于初始化的地方bitmap的疑问

Open xiaoerlaigeid opened this issue 4 years ago • 1 comments

void initSystem() { /* 分配100M空间 / systemStartAddr = (char)malloc(system_size * sizeof(char)); //初始化盘块的位示图 for(int i = 0; i < block_count; i++) systemStartAddr[i] = '0'; //用于存放位示图的空间已被占用 int bitMapSize = block_count * sizeof(char) / block_szie;// for(int i=0; i<bitMapSize; i++)//从零开始分配 systemStartAddr[i] = '1'; //盘块已被使用 } 您好我对这里这个设置位图有些没理解,还有这个bitmapsize int bitMapSize = block_count * sizeof(char) / block_szie;// 这里已经是block_count 了 为什么还要除blocksize大小 我的理解是这里bitmap应该是一个char是8个bit 所以这块应该是进行位操作。

xiaoerlaigeid avatar Nov 21 '20 06:11 xiaoerlaigeid

首先这里的位实际上是字节位,而非比特位。 另外,bitMapSize 的名称有一些误导,它指的是已占用的盘块数量,位图的总大小其实是block_count=100*1024字节。 因为在整个100*1024*1024字节的内存中,前block_count=100*1024个字节是用于存放位图的,后续的100*1024*1023个字节是空闲可用的区域。 将位图的前bitMapSize=100个字节位设置为1,说明前100个盘块(盘块大小block_size=1024)已经被使用了。 总结:经过以上操作后,位图上为0的字节位共有100*1024-100=100*1023个,空闲盘块数量为100*1024-100=100*1023,刚好是对应的关系。

LeoHaoVIP avatar Apr 19 '22 11:04 LeoHaoVIP