文件系统(文件系统目录结构、磁盘分区、虚拟文件系统)、linux内核结构框图
什么是文件系統(tǒng)?
常規(guī)認知就是根目錄下那些文件,但其實并不是那樣。文件系統(tǒng)是操作系統(tǒng)用于明確存儲設(shè)備(常見的是磁盤,也有基于NAND Flash的固態(tài)硬盤)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu);即在存儲設(shè)備上組織文件的方法。操作系統(tǒng)中負責管理和存儲文件信息的軟件機構(gòu)稱為文件管理系統(tǒng),簡稱文件系統(tǒng)。也指用于存儲文件的磁盤或分區(qū),或文件系統(tǒng)種類。因此,可以說"我有2個文件系統(tǒng)"意思是他有2個分區(qū),一個存文件,或他用 “擴展文件系統(tǒng)”,意思是文件系統(tǒng)的種類。 比如在linux源碼下文件下的文件系統(tǒng)代碼存放在fs文件夾(由此可知文件系統(tǒng)是一個程序):
-
文件系統(tǒng)(文件管理系統(tǒng))的種類有哪些? 既然文件系統(tǒng)是管理磁盤文件的方法,那么肯定不止一種,比如說:FAT、vfat 、NTFS、EXT(ext2、ext3、ext4)、HFS,Linux常用的是EXT系列的文件系統(tǒng),windows使用的文件系統(tǒng)是NTFS,樹莓派查看文件系統(tǒng)的命令是:df -T,如下如所示,type就是文件系統(tǒng)類型。tmpfs:是臨時文件系統(tǒng)也叫作內(nèi)存文件系統(tǒng)是基于內(nèi)存的。vfat和ext4是基于磁盤的,也就是我們的SD卡,就是之前掛載到虛擬機的兩個分區(qū),fat分區(qū)存放boot(BootLoader)相關(guān)文件,ext4分區(qū)存放的是根目錄文件。有圖可以看出都是根目錄下的文件但是可能來自不同的分區(qū)。
-
什么是分區(qū)? 對于windows來說,像是驅(qū)動器盤符,C盤是裝系統(tǒng)的分區(qū),D盤存放其他文件,但是C盤也可以放其他文件,比較隨意,但是C盤、D盤的內(nèi)存都是聯(lián)連續(xù)的一大塊。對于Linux來說,叫做文件系統(tǒng)結(jié)構(gòu),按照功能來分區(qū),每個分區(qū)嚴格存放文件,內(nèi)存不一定連續(xù),也就是說我們在linux同一個路徑下看到的文件不一定是來自同一分區(qū)。Linux磁盤分區(qū): linux分區(qū)不同于windows,硬盤和硬盤分區(qū)在Linux都表示為設(shè)備。硬盤分區(qū)一共有三種:主分區(qū),擴展分區(qū)和邏輯分區(qū)。 硬盤的分區(qū)主要分為主分區(qū)(Primary Partion)和擴展分區(qū)(Extension Partion)兩種,主分區(qū)和擴展分區(qū)的數(shù)目之和不能大于四個。主分區(qū)(Primary Partion):可以馬上被使用但不能再分區(qū)。擴展分區(qū)(Extension Partion):必須再進行分區(qū)后才能使用,也就是說它必須還要進行二次分區(qū)。邏輯分區(qū)((Logical Partion)):由擴展分區(qū)建立起來的分區(qū),邏輯分區(qū)沒有數(shù)量上限制。擴展分區(qū)只不過是邏輯分區(qū)的“容器”,實際上只有主分區(qū)和邏輯分區(qū)進行數(shù)據(jù)存儲。嵌入式系統(tǒng)可以分為4個區(qū),分別是bootloader(啟動代碼)、para(啟動代碼向內(nèi)核傳遞參數(shù)的位置)、kernel(內(nèi)核分區(qū))、根分區(qū)(文件系統(tǒng)結(jié)構(gòu))等,與Windows、Linux分區(qū)不同 。①在嵌入式系統(tǒng)中,沒有swap分區(qū),只有實際的物理空間。②bootloader、para、kernel這三個分區(qū)的功能類似于Linux系統(tǒng)中的/boot分區(qū),這三個分區(qū)分別存放嵌入式系統(tǒng)的啟動代碼和內(nèi)核。注: Linux系統(tǒng)中/boot分區(qū)內(nèi)存放著linux啟動代碼和內(nèi)核源碼。③根分區(qū)(/)可以構(gòu)造,其功能類似于Linux系統(tǒng)中的根分區(qū)在這個分區(qū)中可以創(chuàng)建許多目錄,比如/root、/home、/usr等,但不能創(chuàng)建/boot目錄。④分區(qū)bootloader、para、kernel只能由地址來區(qū)分,而根分區(qū)只能由目錄來區(qū)分。⑤嵌入式系統(tǒng)的驅(qū)動程序、上層軟件都放在根分區(qū).在嵌入式系統(tǒng)啟動后,系統(tǒng)無法查看到bootloader、para、kernel這三個分區(qū)。
-
什么是文件系統(tǒng)目錄結(jié)構(gòu)? 文件系統(tǒng)是存儲設(shè)備上組織文件的方法,那么常規(guī)認知的根目錄是什么呢?其實根目錄就是文件系統(tǒng)目錄結(jié)構(gòu)。在Linux系統(tǒng)中,目錄被組織成一個:單根倒置樹結(jié)構(gòu),文件系統(tǒng)目錄結(jié)構(gòu)從根目錄開始,用/來表示。文件名稱區(qū)分大小寫( 大小寫敏感還需要看具體的文件系統(tǒng)格式 ),以.開頭的為隱藏文件,路徑用/來進行分割(windows中使用\來分割),文件有兩個種類:元數(shù)據(jù)與數(shù)據(jù)本身.在操作linux系統(tǒng)時,通常會遵循以下的分層結(jié)構(gòu)規(guī)則:LSB (Linux Standard Base) / FHS(Filesystem Hierarchy Standard)。
-
除了分區(qū)需要按照功能來劃分,文件系統(tǒng)的目錄結(jié)構(gòu)也是按照功能劃分的:
-
/ 所有l(wèi)inux操作系統(tǒng)的頂點目錄,不像windows,每個分區(qū)都有一個頂點目錄
-
/boot 存放系統(tǒng)啟動時相關(guān)的文件,比如kernel內(nèi)核,grub引導(dǎo)菜單.(不要刪除.)
-
/bin 存放的都是命令,但僅普通用戶能執(zhí)行
-
/sbin 超級管理員能執(zhí)行的命令.
-
/home 存放普通用戶的家目錄
-
/root 超級管理員的家目錄,普通用戶是無法進入
-
/etc 存放配置文件的目錄
-
/etc/hostname 主機名
-
/etc/hosts 本地解析域名一種方式
-
/etc/sysconfig/network-script/ifcfg-* 網(wǎng)卡的配置文件
-
/dev 設(shè)備目錄,設(shè)備驅(qū)動,硬盤\硬盤的分區(qū)\光盤\串口…
-
/dev/null 黑洞,接收所有的東西,只進不出
-
/dev/zero 搖錢樹,可以生產(chǎn)源源不斷的數(shù)據(jù)
-
/dev/random 產(chǎn)生隨機數(shù)的一個設(shè)備
-
/dev/pts/0 虛擬的Bash Shell終端,提供給遠程用戶使用 ,0代表一個終端, 1代表2個終端 以此類推
-
/usr 類似于windows的C盤下面的windows目錄
-
/usr/lib 共享庫文件,后綴都是so結(jié)尾, share object
-
/usr/lib64 共享庫文件64位,后綴都是so結(jié)尾, share object
-
/usr/local 早期大家都把軟件放在這個目錄下,和windows C:\ProgramFile
-
/usr/bin 、/usr/sbin、 /var
存放一些可變化的內(nèi)容,比如/var/log日志,可以人為讓其發(fā)生變化,也或者是隨著時間推移產(chǎn)生變化 -
/tmp 存放臨時文件,無論哪個用戶都可以放
-
/proc 反饋當前運行的進程的狀態(tài)信息,還有提供給用戶的一些信息,比如說cpu和內(nèi)存。
-
/run 存放程序運行后所產(chǎn)生的pid文件
-
/media 、/mnt 提供掛載的一個目錄
-
/opt 早期第三方廠商的軟件存放的目錄.
-
/srv 物理設(shè)備產(chǎn)生的一些文件
-
在 Linux 系統(tǒng)中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內(nèi)部文件。/etc: 這個是系統(tǒng)中的配置文件,如果你更改了該目錄下的某個文件可能會導(dǎo)致系統(tǒng)不能啟動。/bin, /sbin, /usr/bin, /usr/sbin: 這是系統(tǒng)預(yù)設(shè)的執(zhí)行文件的放置目錄,比如 ls 就是在/bin/ls 目錄下的。值得提出的是,/bin, /usr/bin 是給系統(tǒng)用戶使用的指令(除root外的通用戶),而/sbin, /usr/sbin 則是給root使用的指令。/var: 這是一個非常重要的目錄,系統(tǒng)上跑了很多程序,那么每個程序都會有相應(yīng)的日志產(chǎn)生,而這些日志就被記錄到這個目錄下,具體在/var/log 目錄下,另外mail的預(yù)設(shè)放置也是在這里。
-
可以在proc文件下查看CPU相關(guān)的情況cat /proc/cpuinfo從下面可以看出processor是從0到3,表示cpu是四核的,然后Hardware是cpu的型號BCM2835
-
使用指令:cat /proc/meminfo可以查看內(nèi)存相關(guān)信息,由下圖可以看出總內(nèi)存是948280KB
-
使用指令:sudo cd root發(fā)現(xiàn)進不去root這個文件夾,可以使用指令sudo passwd root先為root設(shè)置密碼然后:su root再輸入密碼即可進入。退出使用指令:exit或者su pi(是要進入普通用戶,pi是用戶名)
-
etc下面是配置文件,若想要開機啟動某個程序可以在/etc/init這個文件夾下去配置某些文件,使之開機自啟。比如打開bootmisc.sh.conf:vi /etc/init/bootmisc.sh.conf然后將指令添加到腳本的最后即可。
-
但是一般不那么做,一般是在init文件夾下去模仿這個文件夾下面的文件自己去新建一個文件,然后再文件里面寫入相關(guān)的指令,只需文件以.conf結(jié)尾即可。除此之外還可以修改etc下面的rc .local也是添加相關(guān)的指令即可。
什么是虛擬文件系統(tǒng)?
vfs(虛擬文件系統(tǒng))就是對各種文件系統(tǒng)的一個抽象,它為各種文件系統(tǒng)提供了一個通用接口,由指令df -T可以看出不同的文件來源于不同分區(qū),然而每個分區(qū)都有自己的文件系統(tǒng),所以訪問文件的方式因為文件系統(tǒng)的不同而不同,因為不同的文件系統(tǒng)文件、數(shù)據(jù)存儲的方式不一樣。這樣訪問不同分區(qū)的文件就比較麻煩,而linux通過叫做VFS的中間層對這些文件系統(tǒng)提供了完美的支持。在大部分情況下,用戶通過libc和kernel的VFS交互,不需要關(guān)心底層文件系統(tǒng)的具體實現(xiàn)。這樣就使我們使用open、read、write等函數(shù)對文件展開操作,不需要關(guān)心它底層的文件系統(tǒng)。虛擬文件系統(tǒng)的目的: 將接口暴露給用戶,屏蔽底層文件系統(tǒng)的差異性,它是對所有不同文件系統(tǒng)的抽象。
- 虛擬文件系統(tǒng)的分層結(jié)構(gòu):上層:虛擬文件系統(tǒng),底層:特定文件系統(tǒng)模塊,例如:網(wǎng)絡(luò)文件系統(tǒng)(nfs、smb)等其他類型文件系統(tǒng)。虛擬文件系統(tǒng)存在于內(nèi)核態(tài),用戶在用戶態(tài)使用open、read等函數(shù)操作文件或驅(qū)動的時候,先到vfs,然后就可以操作處于不同文件系統(tǒng)的文件。
- VFS在用戶和文件系統(tǒng)之間提供了一個交換層,在 VFS 上面,是對諸如open、close、read 和 write 之類的函數(shù)的一個通用 API 抽象。在 VFS 下面是文件系統(tǒng)抽象,它定義了上層函數(shù)的實現(xiàn)方式。它們是給定文件系統(tǒng)(超過 50 個)的插件,文件系統(tǒng)的源代碼可以在 ./linux/fs 中找到。文件系統(tǒng)層之下是緩沖區(qū)緩存,它為文件系統(tǒng)層提供了一個通用函數(shù)集(與具體文件系統(tǒng)無關(guān))。這個緩存層通過將數(shù)據(jù)保留一段時間(或者隨即預(yù)先讀取數(shù)據(jù)以便在需要是就可用)優(yōu)化了對物理設(shè)備的訪問。緩沖區(qū)緩存之下是設(shè)備驅(qū)動程序,它實現(xiàn)了特定物理設(shè)備的接口。因此,用戶和進程不需要知道文件所在的文件系統(tǒng)類型,而只需要象使用 Ext2 文件系統(tǒng)中的文件一樣使用它們。
linux內(nèi)核結(jié)構(gòu)框圖:
-
Unix和Linux系統(tǒng)內(nèi)核都采用的都是如下圖所示的結(jié)構(gòu),其中可以看到三個層次:硬件級、內(nèi)核級和用戶級。用戶程序通過陷入完成由用戶態(tài)到內(nèi)核態(tài)的轉(zhuǎn)換。系統(tǒng)調(diào)用作為用戶級與內(nèi)核級交互方式,分為2部分:與文件子系統(tǒng)的交互和與進程控制子系統(tǒng)的交互。文件子系統(tǒng)管理文件。包括:分配文件空間、管理空閑空間、控制對文件的存取以及為用戶檢索數(shù)據(jù)。進程控制子系統(tǒng)負責進程同步、進程間通信、進程調(diào)度和存儲管理。其中用戶應(yīng)用程序由基礎(chǔ)C和程序庫組成,程序庫提供應(yīng)用程序支配內(nèi)核干活的接口,程序庫通過系統(tǒng)調(diào)用接口然后操控底層各種東西,比如:程序里面調(diào)用open、read、write函數(shù),通過程序庫到達系統(tǒng)調(diào)用,然后會在系統(tǒng)調(diào)用那里會調(diào)用sys_open、sys_read、sys_write等函數(shù),然后sys_open、sys_read、sys_write等函數(shù)會根據(jù)程序里面函數(shù)的參數(shù)判斷你要打開什么類型的文件會產(chǎn)生不一樣的指令信息,然后系統(tǒng)調(diào)用那里的函數(shù)會去分析打開文件的類型(磁盤上的文或者串口等設(shè)備文件),然后進行操作。
-
還有一種結(jié)構(gòu)圖如下圖所示:
-
shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應(yīng)用程序具有同樣的效果。目前主要有下列版本的shell:① Bourne Shell:是貝爾實驗室開發(fā)的。② BASH:是GNU的Bourne Again Shell,是GNU操作系統(tǒng)上默認的shell,大部分linux的發(fā)行套件使用的都是這種shell。③ Korn Shell:是對Bourne SHell的發(fā)展,在大部分內(nèi)容上與Bourne Shell兼容。④ C Shell:是SUN公司Shell的BSD版本。
-
Linux內(nèi)核主要包括5個模塊:進程調(diào)度模塊、內(nèi)存管理模塊、文件系統(tǒng)模塊、進程間通信模塊和網(wǎng)絡(luò)接口模塊。
-
進程調(diào)度模塊用來負責控制進程對CPU資源的使用。
-
內(nèi)存管理模塊用于確保所有進程能夠安全地共享機器主內(nèi)存區(qū)。
-
文件系統(tǒng)模塊用于支持對外部設(shè)備的驅(qū)動和存儲。(一些皆文件)
-
進程間通信模塊用于支持多種進程間的信息交換方式。通過系統(tǒng)調(diào)用實現(xiàn)進程間的信息交換。
-
網(wǎng)絡(luò)接口模塊提供多種網(wǎng)絡(luò)通信標準的訪問并提供對多種網(wǎng)絡(luò)硬件的支持。所有的模塊都要通過進程調(diào)度來運行。
Linux 系統(tǒng)結(jié)構(gòu):
Linux系統(tǒng)一般有4個主要部分:內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序。內(nèi)核、shell和文件系統(tǒng)一起形成了基本的操作系統(tǒng)結(jié)構(gòu),它們使得用戶可以運行程序、管理文件并使用系統(tǒng)。linux內(nèi)核:內(nèi)核是操作系統(tǒng)的核心,具有很多最基本功能,它負責管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。系統(tǒng)調(diào)用接口:SCI 層提供了某些機制執(zhí)行從用戶空間到內(nèi)核的函數(shù)調(diào)用。這個接口依賴于體系結(jié)構(gòu),甚至在相同的處理器家族內(nèi)也是如此。SCI 實際上是一個非常有用的函數(shù)調(diào)用多路復(fù)用和多路分解服務(wù)。在 ./linux/kernel 中您可以找到 SCI 的實現(xiàn),并在 ./linux/arch 中找到依賴于體系結(jié)構(gòu)的部分。如圖:
- 內(nèi)存管理: 對任何一臺計算機而言,其內(nèi)存以及其它資源都是有限的。為了讓有限的物理內(nèi)存滿足應(yīng)用程序?qū)?nèi)存的大需求量,Linux 采用了稱為“虛擬內(nèi)存”的內(nèi)存管理方式。Linux 將內(nèi)存劃分為容易處理的“內(nèi)存頁”(對于大部分體系結(jié)構(gòu)來說都是 4KB)。Linux 包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機制。不過內(nèi)存管理要管理的可不止 4KB 緩沖區(qū)。Linux 提供了對 4KB 緩沖區(qū)的抽象,例如 slab 分配器。這種內(nèi)存管理模式使用 4KB 緩沖區(qū)為基數(shù),然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁使用情況,比如哪些內(nèi)存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據(jù)系統(tǒng)需要來動態(tài)調(diào)整內(nèi)存使用。為了支持多個用戶使用內(nèi)存,有時會出現(xiàn)可用內(nèi)存被消耗光的情況。由于這個原因,頁面可以移出內(nèi)存并放入磁盤中。這個過程稱為交換,因為頁面會被從內(nèi)存交換到硬盤上。內(nèi)存管理的源代碼可以在 ./linux/mm 中找到。
- 進程管理: 進程實際是某特定應(yīng)用程序的一個運行實體。在 Linux 系統(tǒng)中,能夠同時運行多個進程,Linux 通過在短的時間間隔內(nèi)輪流運行這些進程而實現(xiàn)“多任務(wù)”。這一短的時間間隔稱為“時間片”,讓進程輪流運行的方法稱為“進程調(diào)度” ,完成調(diào)度的程序稱為調(diào)度程序。進程調(diào)度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調(diào)度程序選擇最值得運行的進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其它資源,則該進程是不可運行進程。Linux使用了比較簡單的基于優(yōu)先級的進程調(diào)度算法選擇新的進程。通過多任務(wù)機制,每個進程可認為只有自己獨占計算機,從而簡化程序的編寫。每個進程有自己單獨的地址空間,并且只能由這一進程訪問,這樣,操作系統(tǒng)避免了進程之間的互相干擾以及“壞”程序?qū)ο到y(tǒng)可能造成的危害。 為了完成某特定任務(wù),有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序?qū)ξ谋具M行排序。為此,操作系統(tǒng)還提供進程間的通訊機制來幫助完成這樣的任務(wù)。Linux 中常見的進程間通訊機制有信號、管道、共享內(nèi)存、信號量和套接字等。內(nèi)核通過 SCI 提供了一個應(yīng)用程序編程接口(API)來創(chuàng)建一個新進程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函數(shù)),停止進程(kill、exit),并在它們之間進行通信和同步(signal 或者 POSⅨ 機制)。
- 設(shè)備驅(qū)動程序: 設(shè)備驅(qū)動程序是 Linux 內(nèi)核的主要部分。和操作系統(tǒng)的其它部分類似,設(shè)備驅(qū)動程序運行在高特權(quán)級的處理器環(huán)境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設(shè)備驅(qū)動程序的錯誤都可能導(dǎo)致操作系統(tǒng)的崩潰。設(shè)備驅(qū)動程序?qū)嶋H控制操作系統(tǒng)和硬件設(shè)備之間的交互。設(shè)備驅(qū)動程序提供一組操作系統(tǒng)可理解的抽象接口完成和操作系統(tǒng)之間的交互,而與硬件相關(guān)的具體操作細節(jié)由設(shè)備驅(qū)動程序完成。一般而言,設(shè)備驅(qū)動程序和設(shè)備的控制芯片有關(guān),例如,如果計算機硬盤是 SCSI 硬盤,則需要使用 SCSI 驅(qū)動程序,而不是 IDE 驅(qū)動程序。
- 網(wǎng)絡(luò)接口(NET): 提供了對各種網(wǎng)絡(luò)標準的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動程序。網(wǎng)絡(luò)協(xié)議部分負責實現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。眾所周知,TCP/IP 協(xié)議是 Internet 的標準協(xié)議,同時也是事實上的工業(yè)標準。Linux 的網(wǎng)絡(luò)實現(xiàn)支持 BSD 套接字,支持全部的TCP/IP協(xié)議。Linux內(nèi)核的網(wǎng)絡(luò)部分由BSD套接字、網(wǎng)絡(luò)協(xié)議層和網(wǎng)絡(luò)設(shè)備驅(qū)動程序組成。網(wǎng)絡(luò)設(shè)備驅(qū)動程序負責與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動程序。
參考博文:Linux文件系統(tǒng)目錄結(jié)構(gòu)、虛擬文件系統(tǒng)、虛擬文件系統(tǒng)、linux框圖、Linux 系統(tǒng)結(jié)構(gòu)
總結(jié)
以上是生活随笔為你收集整理的文件系统(文件系统目录结构、磁盘分区、虚拟文件系统)、linux内核结构框图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nero刻录软件下载
- 下一篇: Mac 链接达梦数据库 DmJdbcD