file system framework virtual file system framework n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
FILE SYSTEM FRAMEWORK —— virtual file system framework PowerPoint Presentation
Download Presentation
FILE SYSTEM FRAMEWORK —— virtual file system framework

Loading in 2 Seconds...

play fullscreen
1 / 35

FILE SYSTEM FRAMEWORK —— virtual file system framework - PowerPoint PPT Presentation


  • 286 Views
  • Uploaded on

FILE SYSTEM FRAMEWORK —— virtual file system framework. Outline. Solaris File System Framework The vnode The vfs Object. Solaris FILE SYSTEM FRAMEWORK. Solaris virtual file system framework the virtual file system framework implementes multiple file system types.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'FILE SYSTEM FRAMEWORK —— virtual file system framework' - isadora-jacobson


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
outline
Outline
  • Solaris File System Framework
  • The vnode
  • The vfs Object
solaris file system framework
SolarisFILE SYSTEM FRAMEWORK
  • Solaris virtual file system framework
    • the virtual file system framework implementes multiple file system types.
    • It allows Sun’s distributed computing file system (NFS) to coexist with the UFS file system in SunOS 2.0
  • Solaris file systems can be categorized into the following types:
    • Storage based — Regular file systems . The Solaris UFS and PC/DOS file systems are examples.
    • Network file systems—for example, NFS
    • Pseudo file systems —The /proc pseudo file systemis example.
unified file system interface
Unified File System Interface
  • The framework provides a single set of well-defined interfaces .
  • Two key objects represent these interfaces:
    • the virtual file, or vnode: The vnode interfaces implement file-related functions.
    • the virtual file system, or vfs objects:the vfs interfaces implement file system management functions.
the file system layers is shown below
the file system layers is shown below

T

O

P

E

N

D

B

O

T

T

O

M

E

N

D

Figure 13.1 shows the file system layers.

file system framework facilities
File System Framework Facilities
  • The vnode/vfs interfaces
    • The “top end” of the file system module implement vnode and vfs objects.
    • The “bottom end” of the file system uses other kernel interfaces to access, store, and cache the data they represent.
    • Disk-based file systems interface to device drivers to provide persistent storage of their data.
    • they interface to network file systems access the networking subsystem to transmit and receive data to remote systems.
    • Pseudo file systems typically access local kernel functions and structures to gather the information they represent.
file system framework facilities2
File System Framework Facilities
  • Loadable file system modules are dynamically loaded at the time each file system type is first mounted.
  • The vnode/vfs framework implementes file functions and file system management functions.
  • File system caching implements caching interface with the HAT layer of the virtual memory system to map, unmap, and manage the memory used for caching.
  • Path-name managementconverts paths into vnode pointers.
  • Directory name cachingprovides a mechanism to cache pathname-to-vnode mappings.
the vnode
The vnode
  • A vnode is a representation of a file in the Solaris kernel.
  • The vnode is said to be objectlike .
  • it is an encapsulation of a file’s state and the methods that can be used to perform operations on that file.
  • The vnode hides the implementation of the file system and exposes file system-independent data and methods for that file to the rest of the kernel.
a vnode object
A vnode object

Figure 13.2A vnode object

a vnode object contains three important items
A vnode object contains three important items
  • File-system-independent data
    • the type of vnode :file, directory, character device, Block device, Hard link,Named pipe, etc.
    • flags of vnode : state, pointers to the file system that contains the vnode, a reference count to the vnode.
  • Functions to implement file methods
    • A structure of pointers to file-system-dependent functions, to implement file’s open(),close(), read(), and write().
  • File-system-specific data
    • Data that is used internally by each file system implementation; typically the in-memory inode . UFS uses an inode, NFS uses an rnode,and tmpfs uses a tmpnode.
a vnode object1
A vnode object
  • For example, to read from a file without knowing that it resides on a UFS file system, the kernel would simply call the file-system-independent macro for read(), VOP_READ(), which would call the vop_read() method of the vnode, which in turn calls the UFS function, ufs_read().
the data structure of a vnode
The data structure of a vnode
  • typedef struct vnode {
  • kmutex_t v_lock; /* protects vnode fields */ushort_t v_flag; /* vnode flags (see below) */uint_t v_count; /* reference count */struct vfs *v_vfsmountedhere; /* ptr to vfs mounted here */struct vnodeops *v_op; /* vnode operations */struct vfs *v_vfsp; /* ptr to containing VFS */struct stdata *v_stream; /* associated stream */struct page *v_pages; /* vnode pages list */enum vtype v_type; /* vnode type */dev_t v_rdev; /* device (VCHR, VBLK) */caddr_t v_data; /* private data for fs */struct filock *v_filocks; /* ptr to filock list */struct shrlocklist *v_shrlocks; /* ptr to shrlock list */kcondvar_t v_cv; /* synchronize locking */} vnode_t;
vnode methods
Vnode Methods
  • The vnode interfaceprovides the set of file system object methods
  • The Vnode Methods perform all file-system-specific file operations.
  • The figure is shown below.
vnode reference count
vnode Reference Count
  • A vnode is created by the file system at the time a file is first opened or created and stays active until the file system decides the vnode is no longer needed.
  • The vnode framework provides an infrastructure that keeps track of the number of references to a vnode.
  • It is important to distinquish a vnode reference from a lock:
    • A lock ensures exclusive access to the data,
    • the reference count ensures persistence of the object.
interfaces for paging vnode cache
Interfaces for Paging vnode Cache
  • Solaris unifies file and memory management by using a vnode to represent the backing store for virtual memory.
  • A page of memory represents a particular vnode and offset.
  • The file system uses the memory relationship to implement caching for vnodes within a file system.
  • The virtual memory system provides a set of functions for cache management and I/O for vnodes.
block i o on vnode pages
Block I/O on vnode Pages
  • The block I/O subsystem provides Three functions for initiating I/O to and from vnode pages.
  • The table shows to initiate I/O between a physical page and a device:
the vfs object
The vfs Object
  • The vfs layer provides an administrative interface into the file system to support commands like mount and umount in a file-system-independent manner.
  • The interface achieves independence by means of a virtual file system (vfs) object.
  • The vfs object represents an encapsulation of a file system’s state and a set of methods for each of the file system administrative interfaces.
structure per mounted file system
Structure per mounted file system

typedef struct vfs {

struct vfs *vfs_next; /* next VFS in VFS list */

struct vfsops *vfs_op; /* operations on VFS */

struct vnode *vfs_vnodecovered; /* vnode mounted on */

uint_t vfs_flag; /* flags */

uint_t vfs_bsize; /* native block size */

int vfs_fstype; /* file system type index */

fsid_t vfs_fsid; /* file system id */

caddr_t vfs_data; /* private data */

dev_t vfs_dev; /* device of mounted VFS */

ulong_t vfs_bcount; /* I/O count (accounting) */

ushort_t vfs_nsubmounts; /* immediate sub-mount count */

struct vfs *vfs_list; /* sync list pointer */

struct vfs *vfs_hash; /* hash list pointer */

ksema_t vfs_reflock; } /* mount/unmount/sync lock */

operations supported on virtual file system
Operations supported on virtual file system
  • typedef struct vfsops {
  • int (*vfs_mount)(struct vfs *, struct vnode *, struct mounta *,
  • struct cred *);
  • int (*vfs_unmount)(struct vfs *, struct cred *);
  • int (*vfs_root)(struct vfs *, struct vnode **);
  • int (*vfs_statvfs)(struct vfs *, struct statvfs64 *);
  • int (*vfs_sync)(struct vfs *, short, struct cred *);
  • int (*vfs_vget)(struct vfs *, struct vnode **, struct fid *);
  • int (*vfs_mountroot)(struct vfs *, enum whymountroot);
  • int (*vfs_swapvp)(struct vfs *, struct vnode **, char *);
  • }
slide25
启动时UFS的挂载分析
  • 在Solaris的整个文件系统体系结构中,所有对于具体文件系统的操作都是通过VFS来进行抽象的。为了分析UFS中的操作,就必须找到VFS与UFS的结合部 。
slide26
挂载相关函数
  • 在挂载UFS时,用到的最重要的两个函数是vfs_mountroot()和rootconf()。其中vfs_mountroot()的函数原型定义在src\uts\common\fs\vfs.c中
slide27
void vfs_mountroot(void);
    • 函数功能:挂载根文件系统
    • 函数参数:无
    • 函数返回值:无
  • rootconf()函数的原型也定义在src\uts\common\fs\vfs.c中:
  • int rootconf();
    • 函数功能:选取一种文件系统,作为vfs的根文件系统
    • 函数参数:无
    • 函数返回值:返回错误号
slide28
挂载过程分析
  • 在系统启动时,uts\common\os的main.c中调用了vfs_mountroot函数,这个函数的作用就是挂载根文件系统。
vfs mountroot
vfs_mountroot
  • if (rootconf())
  • cmn_err(CE_PANIC, "vfs_mountroot: cannot mount root");
  • /*
  • * Get vnode for '/'. Set up rootdir, u.u_rdir and u.u_cdir
  • * to point to it. These are used by lookuppn() so that it
  • * knows where to start from ('/' or '.').
  • */
  • vfs_setmntpoint(rootvfs, "/");
  • if (VFS_ROOT(rootvfs, &rootdir))
  • cmn_err(CE_PANIC, "vfs_mountroot: no root vnode");
  • u.u_cdir = rootdir;
  • VN_HOLD(u.u_cdir);
  • u.u_rdir = NULL;
rootconf
rootconf
  • 调用getrootfs();它判断启动的是否是一个无disk的客户端,如果不是,就返回”ufs”;
  • 调用modload(”fs”, fstype);它完成ufs模块的装载,其中的参数fstype就是上面getrootfs返回的”ufs”;
  • 调用vsw = vfs_getvfsswbyname(fstyp);
slide32
VSW
  • struct vfssw {
  • char *vsw_name; /* type name -- max len _ST_FSTYPSZ */
  • int (*vsw_init) (int, char *);
  • /* init routine (for non-loadable fs only) */
  • int vsw_flag; /* flags */
  • mntopts_t vsw_optproto; /* mount options table prototype */
  • uint_t vsw_count; /* count of references */
  • kmutex_t vsw_lock; /* lock to protect vsw_count */
  • vfsops_t vsw_vfsops; /* filesystem operations vector */
  • }
slide34
调用VFS_INIT(rootvfs, &vsw->vsw_vfsops, 0);这个宏完成的工作是将rootvfs这个vfs结构体中的相关函数指针与vsw->vsw_vfsops相关联。
  • 调用error = VFS_MOUNTROOT(rootvfs, ROOT_INIT);这里VFS_MOUNTROOT宏只是调用了rootvfs中的mountroot函数,由于刚才已经完成了rootvfs同UFS的关联,所以这里也就是调用了ufs_mountroot。
slide35

vfssw[]

0

1

2

3

4

5

6

7

….

struct vfssw

struct vfssw

struct vfssw

vsw_name: proc

vsw_name: nfs

vsw_name: ufs

vsw_vfsops

vsw_vfsops

vsw_vfsops

struct vfsops

struct vfsops

struct vfsops

vfs_mount

vfs_mount

vfs_mount

vfs_umount

vfs_umount

vfs_umount

….

….

….

struct vfs

struct vfs

struct vfs

vfs_op

vfs_op

vfs_op

vfs_next

vfs_next

vfs_next

vfs_prev

vfs_prev

vfs_prev

vfs_fstype: proc

vfs_fstype: nfs

vfs_fstype: ufs

vfs_vnodecovered

vfs_vnodecovered

vfs_vnodecovered

….

….

….

struct vnode

struct vnode

struct vnode

v_vfsmountedhere

v_vfsmountedhere

v_vfsmountedhere

….

….

….