Giter VIP home page Giter VIP logo

cachefs's Introduction

Cachefs

მონაცემთა შენახვა

ფაილები ისევე როგორც დირექტორიები გაერთიანებულია ერთ დეიტა თაიფში inode-ში. ყოველ inode-ს აქვს უნიკალური აიდი. inode-ს სტრუქტურა ასე გამოიყურება :

struct inode {
    int id;                                     // უნიკალური id
    int open_cnt;                               // აინოუდის ჰოლდერების რაოდენობა, აინოუდი არ წაიშლება სანამ არ განულდება
    bool is_deleted;                            // ინდიკატორი იმისა წაიშალა თუ არა აინოუდი. როცა ჰოლდერების რაოდენობა განულდება მხოლოდ მაშინ წაიშლება.
    struct list_elem elem;                      // აინოუდების ლისტი
    int magic;
    pthread_mutex_t lock;                       // ლოქი აინოუდისთვის
    struct inode_disk_metadata metadata;
};


struct inode_disk_metadata {
    size_t length;                              // აინოუდში შენახული ბაიტების რაოდენობა
    bool is_dir;                                // ინახავს ფაილის ტიპს, დირექტორიაა თუ ჩვეულებრივი ფაილი
    __mode_t mode;                              // ინახავს ფაილის მოუდს, ფერმიშენებს და ა.შ
    __uid_t uid;                                // მომხმარებლის id
    __gid_t gid;                                // ჯგუფის id
    size_t link_cnt;                            // აიდოუდზე ლინკების რაოდენობა
    size_t xattrs_length;                       // custom ატრიბუტების დეითის სიგრძე
};

თითოეული აინოუდის შესახებ ინფორმაცია მემქეშში ასე ინახება. id#METADATA-ზე ვინახავ inode_disk_metadata სტრუქტურას. ხოლო შემდეგ id#0, id#1, id#2 წარმოადგენენ 4K სიგრძის ბლოკებს სადაც ფაილის შიგთავსი ინახება.

xattr ებს და დირექტორიებს ერთნაირი სტრუქტურებით ვინახავ. დირექტორია წარმოადგენს inode-ს რომლის კონტენტშიც წერია dir_entry სტრუქტურების მასივი

struct dir_entry {
    int inode_id;                               // inode-ს id
    char name[NAME_MAX + 1];                    // ფაილის სახელი
    bool is_deleted;                            // აჩვენებს წაშლილია თუ არა ფაილი
};

როგორც სტრუქტურიდან ჩანს ფაილურ სისტემას არ აქვს 23-ზე დიდი ფაილის სახელების მხარდაჭერა. როცა დირექტორიიდან ფაილის ენტრის წაშლა ხდება ის ფაილის კონტენტიდან არ იშლება, რადგან ამ შემთხვევაში დანარჩენი კონტენტის მარცხნივ გადმოკოპირება იქნებოდა საჭირო რაც ძვირი ოპერაციაა. მე გადავწყვიტე უბრალოდ წაშლილის ფლაგი დავუსვა და როცა ახალი ჩანაწერის გაკეთების დრო დგება, პირველივე წაშლილ ფლაგს თავზე გადავაწერო ახალი აინოუდი.

დამატებით, რეკურსიული ძებნის თავიდან ასარიდებლად ვინახავ ყოველი full path-სთვის შესაბამისი აინოუდის id-ს.

cachefs's People

Contributors

bakurits avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.