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

📄 d-super-block.h

📁 用于汇编领域的,运用于OS的MAIN函数.基于硬件基础的源代码
💻 H
字号:
//fsstruct d_super_block{};char d_ibm[512]; // handle 511 inodeschar d_dbm[512]; // handle 512 blocks. 1 block=512 bytestruct d_inode { // each inode has 32 bytes.   long blk[8]; // max 8 blocks per file};struct d_inode d_itable[16]; // 16 inodes in inode table                             // but we don't use inode 0,1struct dir_ent{ // directory entry. 16 bytes per entry   long ino: // 4 bytes for inode number   char fname[12]; // 12 bytes for file name};struct dir_block{ // max 32 entry per dir file   struct dir_ent entries[32];};// functions for ibmvoid init_d_ibm(){   d_ibm[0]=1; // we reserve inode 0   d_ibm[1]=1; // we reserve inode 1 }int get_free_inode(){// find free inode    int i;   for(i=0;i<512;i++) //       if (d_ibm[i]==0) {		  return i;	  }   panic("no more inode");}void set_inode_in_ibm(int x){   d_ibm[x]=1;}// functions for dbmvoid init_d_dbm(){// block 0: boot code, blk 1: super block, blk 2: ibm, blk 3: dbm// blk 4: inode table, blk 5: root dir   d_dbm[0]=d_dbm[1]=d_dbm[2]=d_dbm[3]=d_dbm[4]=d_dbm[5]=1;}int get_free_block(){// find free block    int i;   for(i=0;i<512;i++)      if (d_dbm[i]==0) {		  return i;	  }   panic("no more block");}void set_block_in_dbm(int x){   d_dbm[x]=1;}// functions for directoryint get_free_dir_ent(struct dir_block *d){// get free entry in directory block d   int i;   for(i=0;i<32;i++)      if (empty_dir_ent(&(d->entries[i])))	      return i;   panic("no more entry in dir_ent");}int empty_dir_ent(struct dir_ent *dent){   if (dent->ino==0)      return 1;   else return 0;}// functions for inodestruct d_inode init_root_inode(){   struct d_inode r;   // root dir has . and .. whose inode is 2 both.   r.blk[0]=5;   return r;}// functions for d_itablevoid init_ditable(){// inode 0,1 is reserved. inode 2 is for root dir   d_itable[2]=init_root_inode();}// functions for directorystruct dir_block  make_empty_dir_block(int me, int parent){// make empty dir block. me is this dir's inode; parent its parent inode   struct dir_block blk;   strcpy(blk->entries[0].fname, ".");   blk->entries[0].ino=me;   strcpy(blk->entries[1].fname, "..");   blk->entries[1].ino=parent;   return blk;}// system functions   void format_disk(){// format disk   struct dir_block rdir;   wait_for_disk_insertion();   init_d_ibm();   init_d_dbm();   init_d_itable();   rdir=make_empty_dir_block(2,2);   WriteRelativeSector(2, d_ibm, d_ibm);   WriteRelativeSector(3, d_dbm, d_dbm);   WriteRelativeSector(4, (char *)d_itable, (char *)d_itable);   WriteRelativeSector(5, (char *)&rdir, (char *)&rdir);}

⌨️ 快捷键说明

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