Rumah > masalah biasa > apa itu fius linux

apa itu fius linux

青灯夜游
Lepaskan: 2023-02-28 09:59:24
asal
2976 orang telah melayarinya

Di Linux, fius merujuk kepada sistem fail ruang pengguna dan merupakan modul kernel yang digunakan untuk menyokong sistem fail ruang pengguna ialah rangka kerja sistem fail yang dilaksanakan dalam ruang pengguna modul kernel, gunakan Pengarang hanya perlu melaksanakan operasi fail tertentu mengikut antara muka yang disediakan oleh fius untuk melaksanakan sistem fail.

apa itu fius linux

Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.

penerangan fius

Apakah fius linux

Modul kernel yang digunakan oleh Linux untuk menyokong sistem fail ruang pengguna dipanggil FUSE , istilah FUSE kadangkala merujuk secara khusus kepada sistem fail ruang pengguna di bawah Linux.

ialah bahagian penting dalam sistem pengendalian umum. Sistem pengendalian secara tradisinya menyediakan sokongan untuk sistem fail pada peringkat kernel. Secara amnya, kod mod kernel sukar untuk dinyahpepijat dan mempunyai produktiviti yang rendah.

Linux menyokong pelaksanaan sistem fail dalam ruang pengguna melalui modul FUSE bermula dari versi 2.6.14.

Melaksanakan sistem fail dalam ruang pengguna boleh meningkatkan produktiviti dan memudahkan beban kerja menyediakan sistem fail baharu untuk sistem pengendalian Ia amat sesuai untuk pelbagai sistem fail maya dan sistem fail rangkaian. ZFS dan glusterfs yang disebutkan di atas adalah kedua-dua sistem fail rangkaian. Walau bagaimanapun, melaksanakan sistem fail dalam mod pengguna pasti akan memperkenalkan overhed tambahan yang disebabkan oleh mod kernel/pensuisan mod pengguna, yang akan memberi kesan tertentu ke atas prestasi.

Fungsi utama fius: Pantau perubahan dalam fail atau folder dan tambah maklumat tersuai pada perkara yang ditulis atau dibaca oleh proses lain dalam folder atau fail ini.

Ringkasan:

FUSE (sistem fail mod pengguna) ialah rangka kerja sistem fail yang dilaksanakan dalam ruang pengguna Dengan sokongan modul kernel FUSE, pengguna hanya perlu The antara muka yang disediakan oleh fius melaksanakan operasi fail khusus untuk melaksanakan sistem fail.

Komposisi dan pelaksanaan fungsi fius

FUSE terdiri daripada tiga bahagian, modul kernel FUSE, perpustakaan FUSE dan beberapa alatan gantung. Modul kernel FUSE melaksanakan dok dengan VFS Ia kelihatan seperti modul sistem fail biasa Selain itu, modul kernel FUSE melaksanakan peranti yang boleh dibuka oleh proses ruang pengguna Apabila VFS menghantar permintaan operasi fail ke dalam format tertentu dan hantar ke proses ruang pengguna melalui peranti Selepas memproses permintaan, proses ruang pengguna mengembalikan hasilnya kepada modul kernel FUSE Modul kernel kemudian memulihkannya kepada format yang diperlukan oleh Kernel Linux kepada VFS.

apa itu fius linux

Pustaka FUSE bertanggungjawab untuk berkomunikasi dengan ruang kernel Ia menerima permintaan daripada /dev/fuse, menukarnya kepada satu siri panggilan fungsi dan menulis semula hasilnya. kepada /dev/fuse.

Rajah struktur operasi FIUS

apa itu fius linux

antara muka perpustakaan fius

operasi_fius struct {

int (*getattr) (const char *, struct stat *, struct fuse_file_info *fi);

int (*readlink) (const char *, char *, size_t);

int (*mknod) (const char *, mode_t, dev_t);

int (*mkdir) (const char *, mode_t);

int (*nyahpaut) (const char *);

int (*rmdir) (const char *);

int (*symlink) (const char *, const char *);

int ( *namakan semula) (const char *, const char *, unsigned int);

int (*pautan) (const char *, const char *);

int (*chmod) (const char *, mode_t, struct fuse_file_info *fi);

int (*chown) (const char *, uid_t, gid_t, struct fuse_file_info *fi);

int (*truncate) (const char *, off_t, struct fuse_file_info *fi);

int (*open) (const char *, struct fuse_file_info *);

int (*read) (const char *, char * , size_t, off_t, struct fuse_file_info *);

int (*write) (const char *, const char *, size_t, off_t, struct fuse_file_info *);

int (*statfs) (const char *, struct statvfs *);

int (*flush) (const char *, struct fuse_file_info *);

        int (*release) (const char *, struct fuse_file_info *);

        int (*fsync) (const char *, int, struct fuse_file_info *);

     setxattr) (const char *, const char *, const char *, size_t, int);

        int (*getxattr) (const char *, const char *, char *, size_t);

         int (*listxattr) (const char *, char *, size_t);

        int (*removexattr) (const char *, const char *);

                                        (const char *, struct fuse_file_info *);

         int (*readdir) (const char *, void *, fuse_fill_dir_t, off_t,

        struct fuse_file_info_read *, enum fuse_file_infos_read *, enum fuse_file_infos_read *, enum fuse_file_infos_read *, 🎜

         int (*releasedir) (const char *, struct fuse_file_info *);

        int (*fsyncdir) (const char *, int, struct fuse_file_info *);

(init) (struct fuse_conn_info *conn,struct fuse_config *cfg);

        void (*musnahkan) (void *);

        int (*access) (const char * , int);

        int (*cipta) (const char *, mode_t, struct fuse_file_info *);

        int (*lock) (const char *, struct fuse_file_info *, int cmd, int cmd struct flock *);

        int (*utimens) (const char *, const struct timespec tv[2], struct fuse_file_info *fi);

         int (*bmap) (const char * , size_t blocksize, uint64_t *idx);

        int (*ioctl) (const char *, int cmd, void *arg,

        struct fuse_file_info *), unsigned int *bendera * ;

         int (*poll) (const char *, struct fuse_file_info *,

        struct fuse_pollhandle *ph, unsigned *reventsp);

        (           char *, struct fuse_bufvec *buf, off_t off,struct fuse_file_info *);

        int (*read_buf) (const char *, struct fuse_bufvec **bufp,

   t_t off, saiz dimatikan     struct fuse_file_info *);

         int (*flock) (const char *, struct fuse_file_info *, int op);

        int (*fallocate) (const char *, int_, off_t, ,struct fuse_file_info *);

};

fius库编译

1.安装:

(1)./ configure --prefix=/usr

(2)make

(3)make install

2.加载驱动

 加“潽坡 fuse.ko fius modprobe”,然后在切换到example目录下编译fusexmp.c

内核源码解析

  >        (1)fius_fs_init() ; 注册fius文件系统,创建fuse_inode高速缓存。

        (2)fuse_dev_init(); 创建 fuse_req 高速 缓存, 加载 fuse 设备 驱动, 用于 用户 空间 与 内核 空间 交换 信息。

(3) fuse_sysfs_init (); 在/sys/fs目录下增加fuse节点,在fuse节点下增加connections节点。

apa itu fius linux        (4)fuse_ctl_init(); Fius gt;

        (1)fuse_ctl_cleanup(); 注销fius控制文件系统

        (2)fuse_sysfs_cleanup(); 移除fius、connections节点。

        (3)fuse_fs_cleanup(); 注销fius文件系统,释放fius_inode高速缓存。

        (4)fuse_dev_cleanup(); 注销fius设备驱动程序,释放fuse_req高速缓存。

3. fuse_conn mewakili sambungan fius Struktur ini dijana apabila sistem fail pengguna dipasang dan dilepaskan apabila sistem fail dinyahlekapkan sistem fail yang dipasang mengekalkan senarai terpaut fuse_conn (sistem fail fius boleh dipasang beberapa kali).

4. Medan bersambung fuse_conn digunakan untuk menunjukkan status sambungan Ia adalah 1 selepas berjaya dipasang Apabila sistem fail dinyahlekap, sambungan terganggu atau pemacu peranti dilepaskan, medan ialah 0. Pada masa ini Sambungan ini (sistem fail dipasang) tidak dapat menyediakan perkhidmatan biasa. Medan ini akan diperiksa dalam fuse_request_send, dan permintaan akan dihantar hanya apabila sistem fail fius biasa disambungkan.                                                                                                                                                                                                                                                                        Setiap permintaan dalam fius diwakili oleh struktur fuse_req, yang mengandungi parameter input dan output permintaan fius, inod, fail, dsb. objek permintaan.

6. Parameter input dan output bagi setiap fius menyokong tiga parameter Lihat definisi struktur fius_masuk dan_keluar Parameter dihantar dalam bentuk . Apabila Apabila mengisi struktur fuse_req, tetapkan bilangan parameter (numargs) fuse_in mengikut jenis permintaan dan parameter permintaan, dan isikan parameter ke dalam array args Pada masa yang sama, tetapkan bilangan parameter output fuse_out, dan simpan alamat hasil keluaran (pembolehubah tempatan outarg) diisi ke dalam tatasusunan args.

7. Selepas sistem fail fius menetapkan parameter input dan output permintaan, semua antara muka akhirnya akan memanggil fuse_request_send untuk menetapkan bendera status struktur fuse_req yang mewakili permintaan ini kepada FUSE_REQ_PENDING, dan menambah permintaan kepada tertunda yang belum selesai. senarai fuse_conn , dan panggil request_wait_answer untuk menunggu permintaan selesai (selepas baris gilir menunggu dibangkitkan, anda perlu menyemak sama ada status permintaan adalah FUSE_REQ_FINISHED). Apabila permintaan ini dijawab, hasilnya telah disimpan dalam pembolehubah tempatan outarg, dan fius melakukan pemprosesan yang sepadan untuk mengembalikan hasil ke lapisan atas.

8. Setiap struktur fuse_req permintaan mengandungi medan waitq bagi wait_queue_head_t Selepas setiap permintaan dikeluarkan, ia akan membangkitkan baris gilir menunggu fuse_conn dan memberitahu daemon mod pengguna bahawa permintaan telah tiba; akan Wait_event_interruptible akan dipanggil untuk tidur pada waitq req dan menunggu keadaan FUSE_REQ_FINISHED menjadi benar.

9. Pemacu peranti fius ialah pemacu peranti blok mudah, digunakan oleh fius untuk menukar data antara mod pengguna dan mod kernel mengandungi daemon ruang pengguna, yang berfungsi dalam satu gelung baca untuk membaca permintaan daripada peranti fius apabila tiada permintaan, ia akan tidur dan menunggu pada masa tunggu fuse_conn (sepadan dengan baris gilir menunggu fuse_conn yang terjaga selepas permintaan dikeluarkan dalam perenggan sebelumnya terdapat permintaan, ia akan menunggu dari baris gilir pengding fuse_conn Keluarkan permintaan pertama (sepadan dengan senarai terpaut yang belum selesai ditambah ke fuse_conn selepas permintaan dalam perenggan sebelumnya), dan alihkan permintaan ke baris gilir daemon membaca maklumat fuse_req yang berkaitan ke dalam keadaan pengguna, ia memanggil pengguna mengikut permintaan yang dilaksanakan oleh fungsi panggil balik, dan menulis hasilnya kepada pemacu peranti fius melalui fuse_dev_write Selepas permintaan keadaan pengguna selesai, cari fuse_req yang sepadan daripada baris gilir pemprosesan, salin hasilnya ke parameter keluar fuse_req, dan tetapkan keadaan fuse_req kepada FUSE_REQ_FINISHED , dan kemudian bangunkan waitq fuse_req. Pada ketika ini, fuse_req diproses dan sistem fail fius kembali ke lapisan atas.

Cadangan berkaitan: "

Tutorial Video Linux

"

Atas ialah kandungan terperinci apa itu fius linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan