资讯库 厂家库 产品库 / 咨询专线:400-6668-369 / 服务时间:8:00-18:00(非节假日)
中国办公家具产业基地,专业助力办公家具单位采购。

进程1备份超级块数据

进程1继续完成本节第二部分的内容。此时超级块中的内容已经被载入缓冲区中,于是系统将超级块的内容进行备份,并释放掉该缓冲块,如图2-56中的第一步和第二步所示,图中可以看出,超级块的内容备份到了位于进程1管理结构所在页面的进程1内核栈中。执行代码如下:
 
//代码路径:kernel/blk_dev/ramdisk.c:
 
voidrd_load(void)
 
{
 
……
 
*((structd_super_block*)&s)=*((structd_super_block*)bh->b_data);
 
brelse(bh);
 
……
 
}
 
之后,分析超级块信息,包括判断这个文件系统是不是minix文件系统;包括接下来要载入的根文件系统的数据块数,会不会比整个虚拟盘区都大等,这些条件都通过,才能继续加载根文件系统,否则返回。如图2-56中的第三步所示。
 
 
 
图2-56 备份超级块并检测数据
 
分析超级块信息的代码如下,从代码中可以看出,在得到代表根文件系统中数据块总数的变量nblocks的过程中,超级块发挥了作用:
 
//代码路径:kernel/blk_dev/ramdisk.c:
 
voidrd_load(void)
 
{
 
……
 
if(s.s_magic!=SUPER_MAGIC)
 
/*Noramdiskimagepresent,assumenormalfloppyboot*/
 
return;
 
nblocks=s.s_nzones<<s.s_log_zone_size;
 
if(nblocks>(rd_length>>BLOCK_SIZE_BITS)){
 
printk("Ramdiskimagetoobig!(%dblocks,%davail)\n",
 
nblocks,rd_length>>BLOCK_SIZE_BITS);
 
return;
 
}
 
……
 
}
 

相关资讯