Friday, October 2, 2015

[7.9] in-memory file system

1. Example

For datablock allocation, we can use bitmask vector and linear search  or   B+ tree
1. bitmask vector and linear search
2. B+ tree




2.Implementation
http://www.farhadsaberi.com/linux_freebsd/image/unix_file_system.gif

//NOTE: 1. "Datablock" -> INode -> File -> Direcotry
struct DataBlock 
{  
  char data[DATA_BLOCK_SIZE]; 
};
DataBlock dataBlocks[NUM_DATA_BLOCKS];



//NOTE: 2. Datablock -> "INode" -> File -> Direcotry
struct INode 
{
  std::vector datablocks;
};



//NOTE: 3. Datablock -> INode -> "File" -> Direcotry
std::mapmapFromName;
struct MetaData
{
   int size;
   Date last_modified, created;
   char extra_attributes;
}
struct FSBase;
struct File : public FSBase
{
   private:
     std::vector * nodes; 
     MetaData metaData;
};




//NOTE: 4. Datablock -> INode -> File -> "Direcotry"
Srtuct Directory :public FSBase
{
    std::vector content;
};








std::vector dataBlockUsed();






struct FileSystem
{




    init();
    mount( FileSystem* );
    unmount( FileSystem* );

    

    File createFile( const char* name ){ ... }
    Directory createDirectory( const char* name ) { ... }
    



    // mapFromName to find INode corresponding to file
    void openFile( File *file, FileMode mode){ ... }




    void closeFile( File *file){ ... }
    void writeToFile( File* file, void *data , int num ) { ... }
    void readFromFile( File* file, void *res, int numBytes, int position ){ ... }




};





.3 Similar Ones

No comments:

Post a Comment