rendered paste body/** * SmallFS.java - template for a file-system driver for the "small file-system" * * @author Your Name Here */public class SmallFS implements FSIF{ private DiskScheduler dsched; private byte sblk[]; private int nblocks; public static final int SFS_NTABLES = 16; /** * called to initialise the file-system driver * * @param dsched disk scheduler used to interface with the underlying device * * @return 0 on success, non-zero on failure */ public int initFS (DiskScheduler dsched) { int i; int itotal, iused; int imagic; this.dsched = dsched; sblk = dsched.readBlock (0); if (sblk == null) { System.err.println ("failed to read superblock!"); return -1; } nblocks = (int)BM.read_uint32 (sblk, 12); imagic = (int)BM.read_uint32 (sblk, 0); if (imagic != 0xefbeadde) { System.err.println ("bad file-system magic! expected [deadbeef], found [" + BM.tohexbuf (sblk, 0, 4) + "]"); return -1; } System.out.println ("File-system magic : " + BM.tohexbuf (sblk, 0, 4)); System.out.println ("File-system version : " + BM.read_uint16 (sblk, 4) + "." + BM.read_uint16 (sblk, 6)); System.out.println ("Superblock age : " + BM.read_uint32 (sblk, 8)); System.out.println ("Total blocks : " + nblocks); System.out.println ("Block bitmap at : " + BM.read_uint32 (sblk, 16)); System.out.print ("Inode tables at : "); for (i=0; i<SFS_NTABLES; i++) { int itblk = (int)BM.read_uint32 (sblk, 20 + (i * 4)); int itlen = (int)BM.read_uint32 (sblk, 20 + (SFS_NTABLES * 4) + (i * 4)); System.out.print ("(" + itblk + "-" + (itblk + (itlen - 1)) + ") "); } System.out.println (""); itotal = (int)BM.read_uint32 (sblk, 20 + (SFS_NTABLES * 8)); iused = (int)BM.read_uint32 (sblk, 24 + (SFS_NTABLES * 8)); System.out.println ("Total inodes : " + itotal); System.out.println ("Used inodes : " + iused); System.out.println ("Free inodes : " + (itotal - iused)); System.out.println ("Root inode : " + BM.read_uint32 (sblk, 28 + (SFS_NTABLES * 8))); return 0; } /** * prints out a block summary for the small file-system by examining * the contents of the block bitmap and counting up the 4 states. Only * examines physically present blocks (i.e. not those in the bitmap which * are past the end of the file-system). Assumes that the file-system has * already been initialised (by calling initFS() above) * * @return 0 on success, non-zero on failure */ public int fsBlockSummary () { //variables declared int unused = 0; int reserved = 0; int used = 0; int valid = 0; byte gblk[]; int bits; //reading block gblk = dsched.readBlock((int)BM.read_uint32(sblk,16)); for(int i = 0; i<nblocks*2; i=i+2) { //read bits from block bits = read_ubits(gblk,i,2); switch(map) { case 0: unused++; break; case 1: reserved++; break; case 2: used++; break; case 3: valid++; break; default:System.out.println("Wrong block\n"); return -1; } } //prints Block summary System.out.println("Block summary:" +unused+ "unused, " +reserved+ "reserved," +used+ "used," +valid+ "valid"); return 0; }}