虛擬文件系統(tǒng)VFS總結(jié)_第1頁(yè)
虛擬文件系統(tǒng)VFS總結(jié)_第2頁(yè)
虛擬文件系統(tǒng)VFS總結(jié)_第3頁(yè)
虛擬文件系統(tǒng)VFS總結(jié)_第4頁(yè)
虛擬文件系統(tǒng)VFS總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

虛擬文件系統(tǒng)VFS總結(jié)虛擬文件系統(tǒng)VFS介紹鄭萍萍03991目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件Linux文件系統(tǒng)組件的體系結(jié)構(gòu)總體上說(shuō)Linux下的文件系統(tǒng)主要可分為三大塊一是上層的文件系統(tǒng)的系統(tǒng)調(diào)用二是虛擬文件系統(tǒng)VFS(VirtualFilesystemSwitch)三是掛載到VFS中的各實(shí)際文件系統(tǒng),例如ext2,jfs等

Linux文件系統(tǒng)組件的體系結(jié)構(gòu)Linux文件系統(tǒng)組件包括用戶空間和內(nèi)核空間兩部分組成

用戶空間包含一些應(yīng)用程序(例如,文件系統(tǒng)的使用者)和GNUC庫(kù)(glibc),它們?yōu)槲募到y(tǒng)調(diào)用(打開(kāi)、讀取、寫(xiě)和關(guān)閉)提供用戶接口內(nèi)核空間由加載在系統(tǒng)內(nèi)核中的系統(tǒng)調(diào)用接口、虛擬文件系統(tǒng)(VFS)、實(shí)際文件系統(tǒng)(ext2、JFS等)以及文件系統(tǒng)緩存和設(shè)備驅(qū)動(dòng)程序組成Linux文件系統(tǒng)組件的體系結(jié)構(gòu)Linux文件系統(tǒng)組件的體系結(jié)構(gòu)系統(tǒng)調(diào)用接口的作用就像是交換器,它將系統(tǒng)調(diào)用從用戶空間發(fā)送到內(nèi)核空間中的適當(dāng)端點(diǎn)

VFS是底層文件系統(tǒng)的主要接口,這個(gè)組件導(dǎo)出一組接口,然后將它們抽象到各個(gè)文件系統(tǒng),各個(gè)文件系統(tǒng)的行為可能差異很大每個(gè)文件系統(tǒng)實(shí)現(xiàn)(比如ext2、JFS等等)導(dǎo)出一組通用接口,供VFS使用緩沖區(qū)緩存會(huì)緩存文件系統(tǒng)和相關(guān)塊設(shè)備之間的請(qǐng)求。以最近使用(LRU)列表的形式管理緩沖區(qū)緩存

主要結(jié)構(gòu)Linux以一組通用對(duì)象的角度看待所有文件系統(tǒng),這些對(duì)象是超級(jí)塊(superblock)、inode、dentry和文件超級(jí)塊結(jié)構(gòu)表示一個(gè)文件系統(tǒng)。它包含管理文件系統(tǒng)所需的信息,包括文件系統(tǒng)名稱(比如ext2)、文件系統(tǒng)的大小和狀態(tài)、塊設(shè)備的引用和元數(shù)據(jù)信息(比如空閑列表等等)VFS作為L(zhǎng)inux文件系統(tǒng)接口的根層,也包括超級(jí)塊(superblock)、inode、dentry等對(duì)象

目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件VirtualFileSystem(或者被稱為VirtualFilesystemSwitch)

是Linux內(nèi)核中的一個(gè)軟件層用于給用戶空間的程序提供文件系統(tǒng)接口提供了內(nèi)核中的一個(gè)抽象功能,把各種差異很大的文件系統(tǒng)抽象成Linux能識(shí)別的文件系統(tǒng)有兩個(gè)針對(duì)文件系統(tǒng)對(duì)象的緩存(inode和dentry)VFS文件系統(tǒng)概述VFS超級(jí)塊VFS超級(jí)塊:VFS和ext2文件系統(tǒng)一樣也使用超級(jí)塊和索引節(jié)點(diǎn)來(lái)描述和管理系統(tǒng)中的文件。每個(gè)被注冊(cè)的文件系統(tǒng)都會(huì)有一個(gè)VFS超級(jí)塊信息設(shè)備標(biāo)識(shí)符。這是存儲(chǔ)文件系統(tǒng)的物理塊設(shè)備的設(shè)備標(biāo)識(shí)符,如系統(tǒng)中第一個(gè)IDE磁盤(pán)/dev/hda1的標(biāo)識(shí)符是0x301索引節(jié)點(diǎn)指針。安裝索引節(jié)點(diǎn)指針指向被安裝的子文件系統(tǒng)的第一個(gè)索引節(jié)點(diǎn);覆蓋索引節(jié)點(diǎn)指針指向安裝文件系統(tǒng)目錄(安裝點(diǎn))的索引節(jié)點(diǎn)。根文件系統(tǒng)的VFS超級(jí)塊中沒(méi)有覆蓋索引節(jié)點(diǎn)指針數(shù)據(jù)塊大小。文件系統(tǒng)中數(shù)據(jù)塊的字節(jié)數(shù)VFS超級(jí)塊超級(jí)塊操作集。指向一組超級(jí)塊操作例程的指針,VFS利用它們可以讀寫(xiě)索引節(jié)點(diǎn)和超級(jí)塊文件系統(tǒng)類型。指向所安裝的文件系統(tǒng)類型的指針文件系統(tǒng)的特殊信息。指向文件系統(tǒng)所需要信息的指針可以看出,VFS超級(jí)塊的結(jié)構(gòu)比ext2文件系統(tǒng)的超級(jí)塊簡(jiǎn)單,主要增加的是超級(jí)塊操作集,它用于對(duì)不同文件系統(tǒng)進(jìn)行操作,對(duì)于超級(jí)塊本身并無(wú)作用。VFS超級(jí)塊inode介紹inode表示文件系統(tǒng)中的一個(gè)對(duì)象,它具有惟一標(biāo)識(shí)符文件系統(tǒng)中管理的每個(gè)對(duì)象(文件或目錄)在Linux中表示為一個(gè)inodeinode包含管理文件系統(tǒng)中的對(duì)象所需的所有元數(shù)據(jù)(包括可以在對(duì)象上執(zhí)行的操作)各個(gè)文件系統(tǒng)提供將文件名映射為惟一inode標(biāo)識(shí)符和inode引用的方法inode介紹dentry介紹dentry是個(gè)目錄緩存(包括父路徑parentdirectory和子節(jié)點(diǎn)childofparentlist信息)主要用于維護(hù)目錄和文件之間的關(guān)系,從而支持在文件系統(tǒng)中移動(dòng)對(duì)于inode緩存中的每個(gè)inode,在目錄緩存中都有一個(gè)對(duì)應(yīng)的dentry

dentry介紹structdentry{structinode*d_inode;/*Wherethenamebelongsto-NULLisstructhlist_noded_hash;/*lookuphashlist*/structdentry*d_parent;/*parentdirectory*/上一級(jí)的目錄

structqstrd_name;structlist_headd_lru;/*LRUlist*//**d_childandd_rcucansharememory*/union{structlist_headd_child;/*childofparentlist*/structrcu_headd_rcu;}d_u;structlist_headd_subdirs;/*ourchildren*/節(jié)點(diǎn)下面的所有文件和目錄};目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件VFS目錄樹(shù)VFS是一種軟件機(jī)制,也許稱它為L(zhǎng)inux的文件系統(tǒng)管理者更確切點(diǎn),與它相關(guān)的數(shù)據(jù)結(jié)構(gòu)只存在于物理內(nèi)存當(dāng)中在每次系統(tǒng)初始化期間,Linux都首先要在內(nèi)存當(dāng)中構(gòu)造一棵VFS的目錄樹(shù)(在Linux的源代碼里稱之為namespace),實(shí)際上便是在內(nèi)存中建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu)VFS中的各目錄其主要用途是用來(lái)提供實(shí)際文件系統(tǒng)的掛載點(diǎn)

VFS目錄樹(shù)下圖是一種可能的目錄樹(shù)在內(nèi)存中的影像

rootfs文件系統(tǒng)rootfs文件系統(tǒng)是VFS存在的基礎(chǔ),是一個(gè)特殊的基于內(nèi)存的文件系統(tǒng),只提供一個(gè)空目錄以及為其他真實(shí)的文件系統(tǒng)提供一個(gè)初始的掛載點(diǎn)在Linux中,rootfs是必不可少的,主要是便于更換掛載的根“/”文件系統(tǒng)文件系統(tǒng)是指可能會(huì)被掛載到目錄樹(shù)中的各個(gè)實(shí)際文件系統(tǒng),"rootfs"、"proc"、"ext2"

目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件Linux下掛載的文件系統(tǒng)[root@zpp~]#cat/proc/mountsrootfs/rootfsrw00/proc/procprocrw,nodiratime00none/devtmpfsrw00/dev/root/ext3rw00none/devtmpfsrw00none/selinuxselinuxfsrw00/proc/procprocrw,nodiratime00/proc/bus/usb/proc/bus/usbusbfsrw00/sys/syssysfsrw00none/dev/ptsdevptsrw00/dev/sda1/bootext3rw00none/dev/shmtmpfsrw00none/proc/sys/fs/binfmt_miscbinfmt_miscrw00sunrpc/var/lib/nfs/rpc_pipefsrpc_pipefsrw00[root@zpp~]#

文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)在Linux源代碼中,每種實(shí)際的文件系統(tǒng)用以下的數(shù)據(jù)結(jié)構(gòu)表示structfile_system_type{ constchar*name; intfs_flags; structsuper_block*(*get_sb)(structfile_system_type*,int,constchar*,void*); void(*kill_sb)(structsuper_block*); structmodule*owner; structfile_system_type*next; structlist_headfs_supers;};文件系統(tǒng)注冊(cè)文件系統(tǒng)的注冊(cè)過(guò)程實(shí)際上就是將表示各實(shí)際文件系統(tǒng)的structfile_system_type數(shù)據(jù)結(jié)構(gòu)的實(shí)例化,然后形成一個(gè)鏈表,并在內(nèi)核中用一個(gè)名為file_systems的全局變量來(lái)表示。

structvfsmount{structlist_headmnt_hash;structvfsmount*mnt_parent;/*fswearemountedon*/structdentry*mnt_mountpoint;/*dentryofmountpoint*/structdentry*mnt_root;/*rootofthemountedtree*/structsuper_block*mnt_sb;/*pointertosuperblock*/structlist_headmnt_mounts;/*listofchildren,anchoredhere*/structlist_headmnt_child;/*andgoingthroughtheirmnt_child*/intmnt_flags;/*4bytesholeon64bitsarches*/constchar*mnt_devname;/*Nameofdevicee.g./dev/dsk/hda1*/structlist_headmnt_list;};rootfs文件系統(tǒng)注冊(cè)rootfs文件系統(tǒng)是VFS存在的基礎(chǔ)rootfs的注冊(cè)過(guò)程是Linux內(nèi)核初始化階段不可分割的一部分通過(guò)init_rootfs()這一初始化函數(shù)來(lái)完成一般文件系統(tǒng)(ext2,ext3)的注冊(cè)都是通過(guò)module_init宏以及do_initcalls()函數(shù)來(lái)完成rootfs文件系統(tǒng)注冊(cè)int__initinit_rootfs(void){returnregister_filesystem(&rootfs_fs_type);}intregister_filesystem(structfile_system_type*fs){intres=0;structfile_system_type**p;if(!fs)return-EINVAL;if(fs->next)return-EBUSY;INIT_LIST_HEAD(&fs->fs_supers);write_lock(&file_systems_lock);p=find_filesystem(fs->name);if(*p)res=-EBUSY;else*p=fs;write_unlock(&file_systems_lock);returnres;}rootfs文件系統(tǒng)注冊(cè)rootfs文件系統(tǒng)注冊(cè)完成后的file_systems鏈表結(jié)構(gòu)如下圖所示

目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件

VFS目錄樹(shù)的建立Linux在初始化階段是如何建立根結(jié)點(diǎn)的,即“/”目錄的建立過(guò)程:

首先,init_rootfs()初始化函數(shù)通過(guò)調(diào)用register_filesystem(&rootfs_fs_type)函數(shù)來(lái)完成rootfs文件系統(tǒng)注冊(cè)然后,init_mount_tree()函數(shù)調(diào)用do_kern_mount(“rootfs”,0,“rootfs”,NULL)來(lái)掛載前面已經(jīng)注冊(cè)了的rootfs文件系統(tǒng)最后,init_mount_tree()函數(shù)會(huì)為系統(tǒng)最開(kāi)始的進(jìn)程(即init_task進(jìn)程)準(zhǔn)備它的進(jìn)程數(shù)據(jù)塊中的namespace域(內(nèi)存空間),主要目的是將do_kern_mount()函數(shù)中建立的mnt和dentry信息記錄在了init_task進(jìn)程的進(jìn)程數(shù)據(jù)塊中,這樣所有以后從init_task進(jìn)程fork出來(lái)的進(jìn)程(子進(jìn)程)也都先天地繼承了這一信息

VFS目錄樹(shù)的建立init_mount_tree()

調(diào)用do_kern_mount(“rootfs”,0,“rootfs”,NULL)

掛載已注冊(cè)的rootfs文件系統(tǒng),初始化mnt、sb、dentry等2init_rootfs()初始化rootfs

register_filesystem(&rootfs_fs_type)函數(shù)完成rootfs文件系統(tǒng)注冊(cè)

1調(diào)用3init_task()準(zhǔn)備進(jìn)程數(shù)據(jù)塊中的namespace域,將do_kern_mount()函數(shù)中建立的mnt和dentry信息記錄在了init_task進(jìn)程的進(jìn)程數(shù)據(jù)塊中

調(diào)用4掛載VFS目錄樹(shù)的建立問(wèn)題應(yīng)該先有掛載目錄,然后再在其上掛載相應(yīng)的文件系統(tǒng),然而此時(shí)VFS似乎并沒(méi)有建立其根目錄?

VFS目錄樹(shù)的建立沒(méi)關(guān)系,這是因?yàn)檫@里我們調(diào)用的是do_kern_mount(),這個(gè)函數(shù)內(nèi)部自然會(huì)創(chuàng)建我們最關(guān)心也是最關(guān)鍵的根目錄(在Linux中,目錄對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是structdentry)

VFS目錄樹(shù)的建立

do_kern_mount()做的主要工作1)調(diào)用alloc_vfsmnt()函數(shù)在內(nèi)存里申請(qǐng)了一塊該類型的內(nèi)存空間(structvfsmount*mnt),并初始化其部分成員變量2)調(diào)用get_sb_nodev()函數(shù)在內(nèi)存中分配一個(gè)超級(jí)塊結(jié)構(gòu)(structsuper_block)sb,并初始化其部分成員變量,將成員s_instances(文件系統(tǒng)的超級(jí)塊實(shí)例化成內(nèi)核中的文件系統(tǒng)超級(jí)塊信息)插入到rootfs文件系統(tǒng)類型結(jié)構(gòu)中的fs_supers指向的雙向鏈表中3)通過(guò)rootfs文件系統(tǒng)中的read_super函數(shù)指針調(diào)用ramfs_read_super()函數(shù)

VFS目錄樹(shù)的建立4)ramfs_read_super()函數(shù)調(diào)用ramfs_get_inode()在內(nèi)存中分配了一個(gè)inode結(jié)構(gòu)(structinode)inode,并初始化其部分成員變量其中比較重要的有i_op、i_fop和i_sb:

inode->i_op=&ramfs_dir_inode_operations;inode->i_fop=&dcache_dir_ops;inode->i_sb=sb;

這使得將來(lái)通過(guò)文件系統(tǒng)調(diào)用對(duì)VFS發(fā)起的文件操作等指令將被rootfs文件系統(tǒng)中相應(yīng)的函數(shù)接口所接管5)ramfs_read_super()函數(shù)在分配和初始化了inode結(jié)構(gòu)之后,會(huì)調(diào)用d_alloc_root()函數(shù)來(lái)為VFS的目錄樹(shù)建立起關(guān)鍵的根目錄(structdentry)dentry,并將dentry中的d_sb指針指向sb,d_inode指針指向inode6)將mnt中的mnt_sb指針指向sb,mnt_root和mnt_mountpoint指針指向dentry,而mnt_parent指針則指向自身VFS目錄樹(shù)的建立1alloc_vfsmnt()申請(qǐng)內(nèi)存空間structvfsmount*mnt

2調(diào)用get_sb_nodev()在內(nèi)存中分配一個(gè)超級(jí)塊結(jié)構(gòu),將成員s_instances插入到rootfs文件系統(tǒng)類型結(jié)構(gòu)中do_kern_mount

()調(diào)用rootfs文件系統(tǒng)中的read_super函數(shù)指針調(diào)用ramfs_read_super()

函數(shù)3調(diào)用4ramfs_get_inode()

在內(nèi)存中分配了一個(gè)inode結(jié)構(gòu),并初始化其部分成員變量d_alloc_root()

函數(shù)來(lái)為VFS的目錄樹(shù)建立起關(guān)鍵的根目錄dentry調(diào)用5調(diào)用mnt中的mnt_sb指針指向sb,mnt_root和mnt_mountpoint指針指向dentry,而mnt_parent指針則指向自身。66

VFS目錄樹(shù)的建立圖中mnt、sb、inode、dentry結(jié)構(gòu)塊下方的數(shù)字表示它們?cè)趦?nèi)存里被分配的先后順序。目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件VFS下目錄的建立Linux下用系統(tǒng)調(diào)用sys_mkdir來(lái)在VFS目錄樹(shù)中增加新的節(jié)點(diǎn)。同時(shí)為配合路徑搜索,引入了下面數(shù)據(jù)結(jié)構(gòu):

structnameidata{structdentry*dentry;//要建目錄的父目錄的信息

structvfsmount*mnt;//文件系統(tǒng)掛載點(diǎn)

structqstrlast;//所查找路徑的最后一個(gè)節(jié)點(diǎn)(即待建目錄或文件)的信息

unsignedintflags;intlast_type;};這個(gè)數(shù)據(jù)結(jié)構(gòu)在路徑搜索的過(guò)程中用來(lái)記錄相關(guān)信息,起著類似"路標(biāo)"的作用。

VFS下目錄的建立"皮之不存,毛將焉附"

要在VFS中建立一個(gè)新的目錄,首先要對(duì)該目錄進(jìn)行搜索,搜索的目的是找到將要建立的目錄的父目錄的相關(guān)信息比如要建立目錄/home/ricard,那么首先必須沿目錄路徑進(jìn)行逐層搜索:從根目錄找起,然后在根目錄下找到目錄home,然后再往下,便是要新建的目錄名ricardVFS下目錄的建立在VFS的根目錄下建立一個(gè)新的目錄"/dev"的過(guò)程:1)為建立目錄“/dev”調(diào)用sys_mkdir(“/dev”,0700),其中參數(shù)0700只是限定將要建立的目錄的某種模式2)調(diào)用path_lookup發(fā)現(xiàn)“/dev”是以“/”開(kāi)頭,所以從當(dāng)前進(jìn)程的根目錄開(kāi)始往下查找3)然后調(diào)用函數(shù)path_walk接著往下查找,找到最后返回的信息=“dev”,nd.last.len=3,nd.last_type=LAST_NORM。其nd是指structnameidata返回的dentry,mnt等信息VFS下目錄的建立4)調(diào)用lookup_create()函數(shù),新分配了一個(gè)structdentry結(jié)構(gòu)的內(nèi)存空間,用于記錄dev目錄所對(duì)應(yīng)的信息,該dentry結(jié)構(gòu)將會(huì)掛接到其父目錄中,也就是“/”目錄對(duì)應(yīng)的dentry結(jié)構(gòu)中,由鏈表實(shí)現(xiàn)這一關(guān)系5)接下來(lái)會(huì)再分配一個(gè)structinode結(jié)構(gòu)6)在同一文件系統(tǒng)下建立新的目錄時(shí)并不需要重新分配一個(gè)超級(jí)塊結(jié)構(gòu),因?yàn)楫吘顾鼈兌紝儆谕晃募到y(tǒng),因此一個(gè)文件系統(tǒng)只對(duì)應(yīng)一個(gè)超級(jí)塊Inode中的i_sb和dentry中的d_sb需要強(qiáng)調(diào)一點(diǎn)的是,既然rootfs文件系統(tǒng)被mount到了VFS樹(shù)上了,那么它在sys_mkdir的過(guò)程中必然會(huì)參與進(jìn)來(lái)

VFS下目錄的建立建立目錄"/dev"sys_mkdir("/dev",0700)調(diào)用1調(diào)用2path_lookup("/dev",LOOKUP_PARENT,&nd)do_path_lookup()

從當(dāng)前進(jìn)程的"/"根目錄開(kāi)始往下查找

調(diào)用3path_walk()接著往下查找,返回的信息是="dev",nd.last.len=3,nd.last_type=LAST_NORM

調(diào)用45為接下來(lái)建立新的節(jié)點(diǎn)收集了必要的信息lookup_create()建立新目錄節(jié)點(diǎn)

structdentry()分配內(nèi)存空間,用于記錄dev目錄所對(duì)應(yīng)的信息,該dentry結(jié)構(gòu)將會(huì)掛接到其父目錄中

調(diào)用6分配一個(gè)structinode結(jié)構(gòu),Inode中的i_sb和dentry中的d_sb分別都指向rootfs的sb

7在同一文件系統(tǒng)下建立新的目錄時(shí)并不需要重新分配一個(gè)超級(jí)塊結(jié)構(gòu),因?yàn)楫吘顾鼈兌紝儆谕晃募到y(tǒng),因此一個(gè)文件系統(tǒng)只對(duì)應(yīng)一個(gè)超級(jí)塊。成功地在VFS的目錄樹(shù)中新建立目錄"/dev"

8VFS下目錄的建立目錄Linux文件系統(tǒng)組件的體系結(jié)構(gòu)VFS文件系統(tǒng)概述VFS目錄樹(shù)文件系統(tǒng)注冊(cè)VFS目錄樹(shù)的建立VFS下目錄的建立在VFS樹(shù)中掛載文件系統(tǒng)打開(kāi)一個(gè)文件在VFS樹(shù)中掛載文件系統(tǒng)將hda2上的根文件系統(tǒng)(文件系統(tǒng)類型為ext2)安裝到“/dev”目錄上初始過(guò)程由sys_mount()系統(tǒng)調(diào)用函數(shù)發(fā)起該函數(shù)原型聲明如下:asmlinkagelongsys_mount(char*dev_name,char*dir_name,char*type,unsignedlongflags,void*data);

其中,參數(shù)char*type為標(biāo)識(shí)將要安裝的文件系統(tǒng)類型字符串,對(duì)于ext2文件系統(tǒng)而言,就是“ext2”。參數(shù)flags為安裝時(shí)的模式標(biāo)識(shí)數(shù)sys_mount()函數(shù)將來(lái)自用戶內(nèi)存空間(userspace)的參數(shù)sys_mount("hda2","/dev","ext2",…)拷貝到內(nèi)核空間調(diào)用do_mount()函數(shù)開(kāi)始真正的安裝文件系統(tǒng)的工作在VFS樹(shù)中掛載文件系統(tǒng)do_mount()函數(shù)會(huì)首先調(diào)用path_lookup()函數(shù)來(lái)得到安裝點(diǎn)的相關(guān)信息。path_lookup()函數(shù)的責(zé)任就是對(duì)文件路徑名進(jìn)行搜索,直到找到目標(biāo)文件所屬目錄所對(duì)應(yīng)的dentry或者目標(biāo)直接就是一個(gè)目錄,只要記住path_lookup()會(huì)返回一個(gè)目標(biāo)目錄即可。do_mount()函數(shù)會(huì)調(diào)用do_add_mount()函數(shù)來(lái)向VFS樹(shù)中安裝點(diǎn)“/dev”安裝一個(gè)實(shí)際的文件系統(tǒng)。主要完成了兩件重要事情:一是獲得一個(gè)新的安裝區(qū)域塊,二是將該新的安裝區(qū)域塊加入了安裝系統(tǒng)鏈表。在VFS樹(shù)中掛載文件系統(tǒng)sys_mount(char__user*dev_name,char__user*dir_name,char__user*type,unsignedlongflags,void__user*data)

將來(lái)自用戶內(nèi)存空間(userspace)的參數(shù)拷貝到內(nèi)核空間

sys_mount("hda2","/dev","ext2",…)

do_mount()開(kāi)始真正的安裝文件系統(tǒng)的工作

調(diào)用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論