版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、文件系統(tǒng)VFS VFS的作用 基于VFS的文件訪問 VFS重要數(shù)據(jù)結(jié)構(gòu)文件系統(tǒng)的注冊與安裝ext2、ext3文件系統(tǒng)文件操作proc文件系統(tǒng)CRAMFS文件系統(tǒng),,Linux File System,,各種各樣的文件系統(tǒng),Windows FAT16,FAT32, NTFS傳統(tǒng)UNIX: UFS (Unix File System)BSD文件系統(tǒng)FFS(Fast File System)Pro
2、c File System:只存在于內(nèi)存中Linux File Systemext2 ( is first introduced in kernel 2.0.x )reiserfs ( is first introduced in kernel 2.2.x )ext3 ( is first introduced in kernel 2.4.x ,default in RedHat now)xfs (from SGI )Jf
3、s (from IBM )嵌入式小型文件系統(tǒng)CRAMFSJFFS2,,linux文件系統(tǒng)目錄布局,To comply with FSSTND(File System STaNDard):/ - first of mount point in linux/etc - keep linux default configuration/boot - keep important linux bootin
4、g files(can be a separate file system)/bin - Essential command binaries for both root and ord. users /sbin - Essential system binaries for administrator /dev - keep all device files/usr - keep all use
5、r binary and X library /home - keep user home directory/proc - is pseudo file system for tracking running process and state of linux system/var - keeping mail, log file and printer spooling/lib - contain
6、shared library that is required by system program/tmp - contain system temporary file/opt - Add-on application software packages,Directory --> catalogue of file nameNormal file --> format of data source
7、file text fileSymbolic link --> a pointer to another fileSpecial file --> use for device controller in kernelNamed pipe --> communication channel which can be used by serveral processes(may be irrelevant) i
8、n order to exchange data,,UNIX文件系統(tǒng)文件類型,,硬鏈接(Hard Link),,[root@localhost link]# ls -ltotal 1-rw-r--r-- 1 root root 667 Oct 15 13:39 a[root@localhost link]# ln a b[root@localhost link]# ls -ltotal 2-rw
9、-r--r-- 2 root root 667 Oct 15 13:39 a-rw-r--r-- 2 root root 667 Oct 15 13:39 b[root@localhost link]# rm arm: remove `a'? y[root@localhost link]# ls -ltotal 1-rw-r--r-- 1 root
10、 root 667 Oct 15 13:39 b,,符號鏈接(Symbolic link),,[root@localhost symlink]# ls -ltotal 1-rw-r--r-- 1 root root 667 Oct 15 13:39 a[root@localhost symlink]# ln -s a b[root@localhost symlink]# ls -
11、ltotal 1-rw-r--r-- 1 root root 667 Oct 15 13:39 alrwxrwxrwx 1 root root 1 Oct 15 14:20 b -> a[root@localhost yy]# rm arm: remove `a'? y[root@localhost symlink]# ls -ltotal 0
12、lrwxrwxrwx 1 root root 1 Oct 15 14:20 b -> a[root@localhost symlink]# cat bcat: b: No such file or directory,,,VFS(Virtual FileSystem)的作用,,,,,Virtual File System,Ext2,Ext3,...,Buffer Cache,Device Dr
13、iver,,,,,,,,,,Process Control Subsystem,System Call Interface,User Programs,Inter-process communication,Scheduler,Memory management,,Hardware,,基于VFS的文件訪問,,,VFS的目錄項(dentry),VFS的dentry定義在include/linux/dcache.h中為了加快文件的查找,每
14、一個曾被讀取的目錄或文件都可能在目錄高速緩存(directory cache)中有一個dentry項;dentry描述了目錄與文件的關(guān)系樹。,,VFS的目錄項(dentry),struct dentry {/*include/linux/dcache.h*/atomic_t d_count;unsigned int d_flags;struct inode * d_inode; /* Where the name
15、belongs to - NULL is negative */struct dentry * d_parent;/* parent directory */struct list_head d_hash;/* lookup hash list */struct list_head d_lru;/* d_count = 0 LRU list */struct list_head d_child;/* child
16、of parent list */struct list_head d_subdirs;/* our children */struct list_head d_alias;/* inode alias list */int d_mounted;struct qstr d_name;unsigned long d_time;/* used by d_revalidate */struct dentry_op
17、erations *d_op;struct super_block * d_sb;/* The root of the dentry tree */unsigned long d_vfs_flags;void * d_fsdata;/* fs-specific data */unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */};,,打開文件表,l
18、inux系統(tǒng)運行期間維護一張以struct file (在include/linux/fs.h 中)作為節(jié)點的雙向鏈表(系統(tǒng)打開文件表)。表頭由first_file給出。 struct file *first_file = NULL; /* fs/file_table.c */對于每個進程,struct task_struct中的files指向的files_struct結(jié)構(gòu)中有一個fd指針數(shù)組,即維護一張進程打開文件表。數(shù)組
19、元素即是指向系統(tǒng)打開文件表中某一節(jié)點的指針。,,VFS重要數(shù)據(jù)結(jié)構(gòu),files_struct (在sched.h);file (在fs.h);dentry (在 dcache.h); superblock(在 fs.h);inode (在 fs.h),,文件系統(tǒng)類型,static struct file_system_type *file_systems = (struct file_system_type *) NULL
20、;struct file_system_type {struct super_block *(*read_super)(); /* 讀出該文件系統(tǒng)在外存的super_block */const char *name; /* 文件系統(tǒng)的類型名 */int requires_dev; /* 支持文件系統(tǒng)的設(shè)備 */struct file_system_type * next; /* 文件系統(tǒng)類型鏈表的后續(xù)指針 */
21、};,文件系統(tǒng)類型的注冊和注銷函數(shù)int register_filesystem(struct file_system_type * fs)int unregister_filesystem(struct file_system_type * fs),,文件系統(tǒng)注冊與注銷,file_systems,file_system_type,file_system_type,file_system_type,,文件系統(tǒng)的安裝(mount),
22、/,bin,etc,dev,usr,Root filesystem,/usr filesystem,Complete hierarchy after mounting /usr,/,bin,man,lib,/,bin,etc,dev,usr,usr,bin,man,lib,,文件系統(tǒng)的安裝(mount),安裝點dentry,,已安裝文件系統(tǒng)的描述,static LIST_HEAD(vfsmntlist);struct vfsmoun
23、t{ struct list_head mnt_hash; struct vfsmount *mnt_parent; /* fs we are mounted on */ struct dentry *mnt_mountpoint; /* dentry of mountpoint */ struct dentry *mnt_root; /* root of the mounted tree */ str
24、uct super_block *mnt_sb; /* pointer to superblock */ struct list_head mnt_mounts; /* list of children, anchored here */ struct list_head mnt_child; /* and going through their mnt_child */ atomic_t mnt_count;
25、 int mnt_flags; char *mnt_devname; /* Name of device e.g. /dev/dsk/hda1 */ struct list_head mnt_list;};,,已安裝文件系統(tǒng)的描述,,,,,,,,,,,,,,,vfsmntlist,vfsmount,super_block,file_system_type,file_systems,系統(tǒng)調(diào)用open、mkdir、renam
26、e、stat等要查找路徑open_namei()path_init()path_walk() link_path_walk();返回時,struct nameidata中的dentry和mnt標(biāo)識找到的文件或目錄struct nameidata { /*include/linux/fs.h*/struct dentry *dentry;/*找到的dentry指針*/struct vfsmount *mnt
27、;/*找到的文件所在文件系統(tǒng)*/struct qstr last;unsigned int flags;int last_type;};,,路徑查找,支持UNIX所有標(biāo)準(zhǔn)的文件系統(tǒng)特征,包括正文、目錄、設(shè)備文件和連接文件等,這使得它很容易被UNIX程序員接受。事實上,ext2的絕大多數(shù)的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)調(diào)用與經(jīng)典的UNIX一致能夠管理海量存儲介質(zhì)。支持多達4TB的數(shù)據(jù),即一個分區(qū)的容量最大可達4TB支持長文件名,
28、最多可達255個字符,并且可擴展到1012個字符允許通過文件屬性改變內(nèi)核的行為;目錄下的文件繼承目錄的屬性支持文件系統(tǒng)數(shù)據(jù)“即時同步”特性,即內(nèi)存中的數(shù)據(jù)一旦改變,立即更新硬盤上的數(shù)據(jù)使之一致實現(xiàn)了“快速連接”(fast symbolic links)的方式,使得連接文件只需要存放inode的空間允許用戶定制文件系統(tǒng)的數(shù)據(jù)單元(block)的大小,可以是 1024、2048 或 4096 個字節(jié),使之適應(yīng)不同環(huán)境的要求使用專用
29、文件記錄文件系統(tǒng)的狀態(tài)和錯誤信息,供下一次系統(tǒng)啟動時決定是否需要檢查文件系統(tǒng),,ext2文件系統(tǒng),,ext2體系結(jié)構(gòu),,ext2_inode_info (在include/linux/ext2_fs_i.h)struct ext2_inode_info { __u32 i_data[15]; __u32 i_flags; __u32 i_faddr; __u8 i_frag_no; __u8 i
30、_frag_size; __u16 i_osync; __u32 i_file_acl; __u32 i_dir_acl; __u32 i_dtime; __u32 i_block_group; __u32 i_next_alloc_block; __u32 i_next_alloc_goal; __u32 i_prealloc_block; __u32 i_pre
31、alloc_count; __u32 i_dir_start_lookup; int i_new_inode:1; /* Is a freshly allocated inode */};,,內(nèi)存中的ext2 inode,struct ext2_inode(在include/linux/ext2_fs.h)內(nèi)、外存inode的讀寫:ext2_read_inode()ext2_update_inode(),,
32、外存中的ext2 inode,,Ext2_inode,,read()和write()int read(int fd, void *buf,size_t nbytes);int write(int fd, void *buf,size_t nbytes);read()調(diào)用generic_file_read(),再調(diào)用do_generic_file_read()讀入內(nèi)核緩沖區(qū),然后調(diào)用file_read_actor()將讀入
33、內(nèi)容傳入用戶空間。最后調(diào)用update_atime()修改inodewrite()調(diào)用generic_file_write()寫數(shù)據(jù)入緩沖區(qū),如果是同步寫(O_SYNC置位),則調(diào)用generic_osync_inode()將緩沖區(qū)中數(shù)據(jù)寫入磁盤文件。直接讀寫(read、write時將O_DIRECT置位) generic_file_read()先讀page cache generic_file_write()先寫入
34、緩沖區(qū) generic_file_direct_IO()直接讀寫(self-caching),,文件讀寫,日志文件系統(tǒng)(journaling file system)利用數(shù)據(jù)庫的日志技術(shù)(log, checkpoint)3種日志方式:journal, ordered, writeback日志記錄在/.journal中(隱藏的文件)Kjournald—5sReiserfs,,ext3文件系統(tǒng),,proc文件系統(tǒng),/pro
35、c:一個虛擬文件系統(tǒng),只存在于內(nèi)存中,通過它可以查詢、設(shè)置系統(tǒng)的運行情況及各種系統(tǒng)參數(shù)。系統(tǒng)中的很多應(yīng)用都依賴于proc文件系統(tǒng),如命令lsmod等同于 cat /proc/modules。文件的大小為0;很多文件名體現(xiàn)了內(nèi)核的相應(yīng)參數(shù),可以通過這個文件名修改參數(shù)值。如#echo 2048 > /proc/sys/shmmni,修改共享內(nèi)存段的限制。/proc下的“數(shù)字目錄”指代了相應(yīng)pid的進程,如目錄“1”下的內(nèi)容就是
36、1#進程的各種信息。,,CRAMFS,由Linus Torvalds 參與開發(fā)的小型只讀壓縮文件系統(tǒng)Inode、文件名稱和目錄信息不壓縮單個文件最大為16MB數(shù)據(jù)壓縮存放適合不需要寫、且體積較大的文件系統(tǒng),如/lib,/opt等與JFFS2、Cloop相比,讀取速度快壓縮率可以超過50%讀取文件時,每次讀取4k內(nèi)容,解壓縮到cache中Linux內(nèi)核已提供了對cramfs的支持,只要編譯時選中創(chuàng)建文件系統(tǒng)(生成imag
37、e文件) #mkcramfs /lib lib.cramfs #mkcramfs /usr usr.cramfs掛載文件系統(tǒng) #mount –t cramfs lib.cramfs /lib –o loop #mount –t cramfs usr.cramfs /usr –o loop,,CRAMFS,Super_block:76bytes, cramfs_inode:12bytes
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- linux文件系統(tǒng)管理-
- linux文件存取權(quán)限
- linux文件和目錄的屬性
- linux系統(tǒng)各文件、目錄介紹
- Linux文件系統(tǒng)應(yīng)用.pdf
- linux系統(tǒng)文件類型及文件的擴展名
- 如何恢復(fù) linux 上刪除的文件
- linux存儲管理
- Linux文件加密系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于Linux的透明加密文件系統(tǒng).pdf
- 基于linux內(nèi)核驅(qū)動的文件系統(tǒng)監(jiān)控.pdf
- linux下xfs文件系統(tǒng)修復(fù)指導(dǎo)書
- Linux加密文件系統(tǒng)的設(shè)計和實現(xiàn).pdf
- Linux內(nèi)核文件系統(tǒng)的分析與研究.pdf
- 基于Linux的文件實時備份系統(tǒng)設(shè)計與實現(xiàn).pdf
- linux虛擬文件系統(tǒng)的研究與應(yīng)用.pdf
- 基于linux加密文件系統(tǒng)的設(shè)計與實現(xiàn).pdf
- Linux私有文件動態(tài)加解密的研究與實現(xiàn).pdf
- 淺談更新linux-3.2.5(6)文件系統(tǒng)的加載
- Linux下快照文件系統(tǒng)的設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論