⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 super.c~

📁 参照MINIX3写的操作系统 用GCC+NASM+BOCHS开发
💻 C~
字号:
#include "../kernel.h"
#include "FileSystem.h"

 //第0 块为引导扇区块
   //第一块为超级块
   //接下来是Inode位图
   //再接下来是区段位图(一区段2个磁盘块)
   //之后是Inode
   //剩下就是Block
extern LPBuffer GetPhysicalBlock(int Block ,int Device);
extern void FreeBufferBlock(LPBuffer pFileBuffer);
#define HARD_DISK 0
Super glSuper;
PUBLIC LPSuper GetSuper()
{
	return &glSuper;
}
PUBLIC LPSuper GetSuperFromDisk()
{  
	int i=0,j=0;
   LPBuffer pBlock;
   LPSuper pSuperBlock; 
   pBlock=GetPhysicalBlock(2 ,HARD_DISK);
   pSuperBlock=(LPSuper)pBlock->Data;
   glSuper.Magic=pSuperBlock->Magic;
   glSuper.TotalInode=pSuperBlock->TotalInode;
   glSuper.TotalFreeInode=pSuperBlock->TotalFreeInode;
   glSuper.TotalBlock=pSuperBlock->TotalBlock;
   glSuper.TotalFreeBlock=pSuperBlock->TotalFreeBlock;
   glSuper.FirstFreeBlock=pSuperBlock->FirstFreeBlock;
   glSuper.FirstFreeInode=pSuperBlock->FirstFreeInode;

}
PUBLIC void CreateFileSystem()
//建造文件系统,在磁盘上填写相关数据
{
 

  
   LPBuffer pBlock;
   LPSuper pSuperBlock; 
   int i=0,j=0;
   pBlock=GetPhysicalBlock(2 ,HARD_DISK);
   pSuperBlock=(LPSuper)pBlock->Data;
   pSuperBlock->Magic=0x7654;
   pSuperBlock->TotalInode=VIRTUAL_HD_SIZE/1024;
   pSuperBlock->TotalFreeInode=VIRTUAL_HD_SIZE/1024;
   pSuperBlock->TotalBlock=VIRTUAL_HD_SIZE/1024;
   pSuperBlock->TotalFreeBlock=VIRTUAL_HD_SIZE/1024;
   pSuperBlock->FirstFreeBlock=2+(VIRTUAL_HD_SIZE/1024/1024/8+1)*2+(VIRTUAL_HD_SIZE/1024/(1024/128));
   pSuperBlock->FirstFreeInode=3;
   //将剩余部分清零
  for(j=SUPER_SIZE;j<1024;j++)
		pBlock->Data[j]='j';
   pBlock->Dirty=DIRTY;
   FreeBufferBlock(pBlock);
   pBlock=GetPhysicalBlock(1,HARD_DISK);
   pSuperBlock=(LPSuper)pBlock->Data;
   printk("%d\n",pSuperBlock->TotalInode);


   //将Inode Bitmap,zone Bitmap,Inode本身清零
 /*  for(i=3;i<(VIRTUAL_HD_SIZE/1024/1024/8+1)*2+//Inode Bitmap+zone Bitmap
	   (VIRTUAL_HD_SIZE/1024/(1024/128));i++)
   {
	   pBlock=GetPhysicalBlock(i ,HARD_DISK);
	   for(j=0;j<1024;j++)
		  pBlock->Data[j]=0;
		pBlock->Dirty=DIRTY; 
		FreeBufferBlock(pBlock); 

   }

   printk("Error!");

*/
}

PUBLIC void DumpFS_Super()
{LPSuper pSuper;
	printk("**************DumpFS_Super*******************\n");
	printk("TotalInode  TotalBlock  TotalFreeBlock TotalFreeInode  Magic   FirstFreeBlock\n");
	printk("%-13x%-13x%-13x%-13x%-13x%-13x\n",
	glSuper.TotalInode,glSuper.TotalBlock,glSuper.TotalFreeBlock,glSuper.TotalFreeInode,glSuper.Magic,glSuper.FirstFreeBlock);
pSuper=GetSuper();
printk("%x\n",pSuper->Magic);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -