日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 FreeBSD 核心

FreeBSD核心探討.5.驅(qū)動程序篇

2.2 虛擬文件系統(tǒng)和v-node
FreeBSD在disk上的除了ffs以外還可以操作各種各樣的文件系統(tǒng) 。主要的如
下:
。cd9660
可以對ISO9660形式的cd-rom的目錄/文件構(gòu)造的文件系統(tǒng)進行mount,
locate等目錄層的操作
。ms-Dos
對ms-dos文件系統(tǒng)進行目錄層次的mount,定位等操作
。mfs
通過使用虛擬內(nèi)存對swap區(qū)的一部分進行Unix文件系統(tǒng)的構(gòu)造,定位
作為目錄的一部分進行讀寫
。nfs
由nfs server提供的remote目錄級進行mount,定位的目錄層操作 。
。null
對已經(jīng)存在的目錄層的使用別名
。union
對已有的目錄A(上層)在下層目錄B上進行重疊 (不大理解這的意思
,大概是在下層目錄里面又嫁接了上層目錄的意思:譯者) 。文件名的查
找由上層優(yōu)先進行 。沒有的話就轉(zhuǎn)道下層 。如果對下層的文件進行寫操作
,它的拷貝就在上層上進行 。舉例說明,作業(yè)目錄在上層,但cd-rom的源
在下層,兩個目錄重疊,那么編譯source的時候,就相當(dāng)方便了 。
。procfs
對于進程號的目錄作成mount point 。通過文件名對各個目錄的進程進行
控制 。
。kernfs
為了對動作中的kernel有關(guān)的信息進行參考,而作成的mount point
。fdesc
對于各個進程,用它所打開的文件柄對應(yīng)的文件作成的mount point

實際上,在核心內(nèi)部,為了對它們進行統(tǒng)一操作,就對文件系統(tǒng)和v-node
進行抽象化,實際的處理過程就是調(diào)用各類的文件系統(tǒng)的模塊進行處理 。

2.2.1對虛擬文件系統(tǒng)的操作
各個文件系統(tǒng)可以提供的操作的一覽如下,它在struct vfsops
(@sys/mount.h)里面定義:
。對文件系統(tǒng)進行mount的操作
。本文件系統(tǒng)的開始動作的操作
。本文件系統(tǒng)的umount操作
。表達文件系統(tǒng)的根的v-node的查找操作
。對一般用戶的權(quán)限控制
。取得文件系統(tǒng)的狀態(tài)
。內(nèi)存內(nèi)的管理信息寫入介質(zhì)中
。從i-node到v-node的取得操作
。v-node和nfs的文件柄的相互變換的操作
。文件系統(tǒng)實際的模塊的初始化

對于文件系統(tǒng),各個實際的操作routine在vfsops的形式提供準(zhǔn)備工作 。各個文件系
統(tǒng)的vfsops,在以下的表里的source進行定義:

--------------------------------------------------------------
file system vfsops的定義 source
--------------------------------------------------------------
ufs ufs_vfsops ufs/ffs/ffs_vfsops.c
cd9660 cd9660_vfsops isofs/cd9660/cd9660_vfsops.c
msdos msdosfs_vfsops msdosfs/msdosfs_vfsops.c
mfs mfs_vfsops ufs/mfs/mfs_vfops.c
nfs nfs_vfsops nfs/nfs_vfsops.c
null null_vfsops miscfs/nullfs/null_vfsops.c
nuion union_vfsops miscfs/union/union_vfsops.c
procfs procfs_vfsops miscfs/procfs/procfs_vfsops.c
kernfs kernfs_vfsops miscfs/kernfs/kernfs_vfsops.c
fdesc fdesc_vfsops miscfs/fdesc/fdesc_vfsops.c
devfs devfs_vfsops miscfs/devfs/devfs_vfsops.c
ext2fs ext2fs_vfsops gnu/ext2fs/ext2_vfsops.c
lfs lfs_vfsops ufs/lfs/lfs_vfsops.c
portal portal_vfsops miscfs/portal.portal_vfsops.c
umap umap_vfsops miscfs/umapfs/umap_vfsops.c
---------------------------------------------------------------
這些就是文件系統(tǒng)的實際模塊(*_vfsops.c),文件系統(tǒng)名稱,文件系統(tǒng)號等等
在struct vfsconf(@sys/mount.h)里面匯總,各個模塊里用宏VFS_SET()進入核
心 。
根據(jù)main()(@kern/init_main.c),在kernel初始化的過程中,vfsinit()
(@kern/vfs_init.c)里面有
struct vfsconf *vfsconf[MOUNT_MAXTYPE 1];
struct vfsops *vfssw[MOUNT_MAXTYPE 1];
各種東西的設(shè)定,這些是,管理mount信息的struct mount(@sys/mount.h)的成員
mnt_vfc和mnt_op要指定所對應(yīng)的文件系統(tǒng)的vfsconf,vfssw 。還有宏VFS_操作名
(struct mount *,..)里,可以各個操作的調(diào)用 。

推薦閱讀