女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Linux文件系統(tǒng)組件的體系結構介紹

h1654155282.3538 ? 來源:嵌入式領域知識分享 ? 作者:嵌入式領域知識分 ? 2020-11-03 15:31 ? 次閱讀

文件系統(tǒng)是對一個存儲設備上的數(shù)據(jù)和元數(shù)據(jù)進行組織的機制。這種機制有利于用戶和操作系統(tǒng)的交互。

盡管內(nèi)核是 Linux 的核心,但文件卻是用戶與操作系統(tǒng)交互所采用的主要工具。這對 Linux 來說尤其如此,這是因為在 UNIX 傳統(tǒng)中,它使用文件 I/O 機制管理硬件設備和數(shù)據(jù)文件

這句話我是這樣理解的,在Linux沒有文件系統(tǒng)的話,用戶和操作系統(tǒng)的交互也就斷開了,例如我們使用最多的交互shell,包括其它的一些用戶程序,都沒有辦法運行。在這里可以看到文件系統(tǒng)相對于Linux操作系統(tǒng)的重要性。

下面是Linux文件系統(tǒng)組件的體系結構:

用戶空間包含一些應用程序(例如,文件系統(tǒng)的使用者)和 GNU C 庫(glibc),它們?yōu)槲募到y(tǒng)調(diào)用(打開、讀取、寫和關閉)提供用戶接口。系統(tǒng)調(diào)用接口的作用就像是交換器,它將系統(tǒng)調(diào)用從用戶空間發(fā)送到內(nèi)核空間中的適當端點。

VFS 是底層文件系統(tǒng)的主要接口。這個組件導出一組接口,然后將它們抽象到各個文件系統(tǒng),各個文件系統(tǒng)的行為可能差異很大。有兩個針對文件系統(tǒng)對象的緩存(inode 和 dentry)。它們緩存最近使用過的文件系統(tǒng)對象。

每個文件系統(tǒng)實現(xiàn)(比如 ext2、JFS 等等)導出一組通用接口,供 VFS 使用。緩沖區(qū)緩存會緩存文件系統(tǒng)和相關塊設備之間的請求。例如,對底層設備驅(qū)動程序的讀寫請求會通過緩沖區(qū)緩存來傳遞。這就允許在其中緩存請求,減少訪問物理設備的次數(shù),加快訪問速度。以最近使用(LRU)列表的形式管理緩沖區(qū)緩存。注意,可以使用 sync 命令將緩沖區(qū)緩存中的請求發(fā)送到存儲媒體(迫使所有未寫的數(shù)據(jù)發(fā)送到設備驅(qū)動程序,進而發(fā)送到存儲設備)。

當我們在Windows下,提到文件系統(tǒng)時,你的第一反應是想到的是什么?是不是Windows下的一些Fat32、NTFS等的文件系統(tǒng)的類型。而在Linux中,你可能會想到Ext2、Ext3,但你還必須要有一個根文件系統(tǒng)的概念。根文件系統(tǒng)首先是一種文件系統(tǒng),該文件系統(tǒng)不僅具有普通文件系統(tǒng)的存儲數(shù)據(jù)文件的功能,但是相對于普通的文件系統(tǒng),它的特殊之處在于,它是內(nèi)核啟動時所mount的第一個文件系統(tǒng),內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中,系統(tǒng)引導啟動程序會在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如rcS,inittab)和服務加載到內(nèi)存中去運行。我們要明白文件系統(tǒng)和內(nèi)核是完全獨立的兩個部分。在嵌入式中移植的內(nèi)核下載到開發(fā)板上,是沒有辦法真正的啟動Linux操作系統(tǒng)的,會出現(xiàn)無法加載文件系統(tǒng)的錯誤。

那么根文件系統(tǒng)在系統(tǒng)啟動中到底是什么時候掛載的呢?先將/dev/ram0掛載,而后執(zhí)行/linuxrc.等其執(zhí)行完后。切換根目錄,再掛載具體的根文件系統(tǒng)。根文件系統(tǒng)執(zhí)行完之后,也就是到了Start_kernel()函數(shù)的最后,執(zhí)行init的進程,也就第一個用戶進程。對系統(tǒng)進行各種初始化的操作。如果要能明白這里的過程的話,可要好好的看看Linux內(nèi)核源碼了。

根文件系統(tǒng)之所以在前面加一個”根“,說明它是加載其它文件系統(tǒng)的”根“,既然是根的話,那么如果沒有這個根,其它的文件系統(tǒng)也就沒有辦法進行加載的。它包含系統(tǒng)引導和使其他文件系統(tǒng)得以mount所必要的文件。根文件系統(tǒng)包括Linux啟動時所必須的目錄和關鍵性的文件,例如Linux啟動時都需要有init目錄下的相關文件,在 Linux掛載分區(qū)時Linux一定會找/etc/fstab這個掛載文件等,根文件系統(tǒng)中還包括了許多的應用程序bin目錄等,任何包括這些Linux 系統(tǒng)啟動所必須的文件都可以成為根文件系統(tǒng)。

Linux啟動時,第一個必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設備上掛載根文件系統(tǒng),則系統(tǒng)會出錯而退出啟動。成功之后可以自動或手動掛載其他的文件系統(tǒng)。因此,一個系統(tǒng)中可以同時存在不同的文件系統(tǒng)。

在 Linux 中將一個文件系統(tǒng)與一個存儲設備關聯(lián)起來的過程稱為掛裝(mount)。使用 mount 命令將一個文件系統(tǒng)附著到當前文件系統(tǒng)層次結構中(根)。在執(zhí)行掛裝時,要提供文件系統(tǒng)類型、文件系統(tǒng)和一個掛裝點。根文件系統(tǒng)被掛載到根目錄下“/”上后,在根目錄下就有根文件系統(tǒng)的各個目錄,文件:/bin /sbin /mnt等,再將其他分區(qū)掛接到/mnt目錄上,/mnt目錄下就有這個分區(qū)的各個目錄,文件。

1./bin目錄

該目錄下存放所有用戶都可以使用的、基本的命令,這些命令在掛接其它文件系統(tǒng)之前就可以使用,所以/bin目錄必須和根文件系統(tǒng)在同一個分區(qū)中。

/bin目錄下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,[,test等“[”命令其實就是test命令,我們在利用Busybox制作根文件系統(tǒng)時,在生成的bin目錄下,可以看到一些可執(zhí)行的文件,也就是可用的一些命令。

2./sbin 目錄

該目錄下存放系統(tǒng)命令,即只有管理員能夠使用的命令,系統(tǒng)命令還可以存放在/usr/sbin,/usr/local/sbin目錄下,/sbin目錄中存放的是基本的系統(tǒng)命令,它們用于啟動系統(tǒng),修復系統(tǒng)等,與/bin目錄相似,在掛接其他文件系統(tǒng)之前就可以使用/sbin,所以/sbin目錄必須和根文件系統(tǒng)在同一個分區(qū)中。

/sbin目錄下常用的命令有:shutdown reboot fdisk fsck等,本地用戶自己安裝的系統(tǒng)命令放在/usr/local/sbin目錄下。

3、/dev目錄

該目錄下存放的是設備文件,設備文件是Linux中特有的文件類型,在Linux系統(tǒng)下,以文件的方式訪問各種設備,即通過讀寫某個設備文件操作某個具體硬件。比如通過“dev/ttySAC0”文件可以操作串口0,通過“/dev/mtdblock1”可以訪問MTD設備的第2個分區(qū)。

4./etc目錄

該目錄下存放著各種配置文件,對于PC上的Linux系統(tǒng),/etc目錄下的文件和目錄非常多,這些目錄文件是可選的,它們依賴于系統(tǒng)中所擁有的應用程序,依賴于這些程序是否需要配置文件。在嵌入式系統(tǒng)中,這些內(nèi)容可以大為精減。

5./lib目錄

該目錄下存放共享庫和可加載(驅(qū)動程序),共享庫用于啟動系統(tǒng)。運行根文件系統(tǒng)中的可執(zhí)行程序,比如:/bin /sbin 目錄下的程序。

6、/home目錄

用戶目錄,它是可選的,對于每個普通用戶,在/home目錄下都有一個以用戶名命名的子目錄,里面存放用戶相關的配置文件。

7./root目錄

根用戶的目錄,與此對應,普通用戶的目錄是/home下的某個子目錄。

8./usr目錄

/usr目錄的內(nèi)容可以存在另一個分區(qū)中,在系統(tǒng)啟動后再掛接到根文件系統(tǒng)中的/usr目錄下。里面存放的是共享、只讀的程序和數(shù)據(jù),這表明/usr目錄下的內(nèi)容可以在多個主機間共享,這些主要也符合FHS標準的。/usr中的文件應該是只讀的,其他主機相關的,可變的文件應該保存在其他目錄下,比如/var。/usr目錄在嵌入式中可以精減。

9、 /var目錄

與/usr目錄相反,/var目錄中存放可變的數(shù)據(jù),比如spool目錄(mail,news),log文件,臨時文件。

10、/proc目錄

這是一個空目錄,常作為proc文件系統(tǒng)的掛接點,proc文件系統(tǒng)是個虛擬的文件系統(tǒng),它沒有實際的存儲設備,里面的目錄,文件都是由內(nèi)核臨時生成的,用來表示系統(tǒng)的運行狀態(tài),也可以操作其中的文件控制系統(tǒng)

11、 /mnt目錄

用于臨時掛載某個文件系統(tǒng)的掛接點,通常是空目錄,也可以在里面創(chuàng)建一引起空的子目錄,比如/mnt/cdram /mnt/hda1 。用來臨時掛載光盤、硬盤。

12. /tmp目錄

用于存放臨時文件,通常是空目錄,一些需要生成臨時文件的程序用到的/tmp目錄下,所以/tmp目錄必須存在并可以訪問。

那我們利用Busybox制作根文件系統(tǒng)就是創(chuàng)建這上面的這些目錄,和這些目錄下面的各種文件。

對于嵌入式Linux系統(tǒng)的根文件系統(tǒng)來說,一般可能沒有上面所列出的那么復雜,比如嵌入式系統(tǒng)通常都不是針對多用戶的,所以/home這個目錄在一般嵌入式Linux中可能就很少用到,而/boot這個目錄則取決于你所使用的BootLoader是否能夠重新獲得內(nèi)核映象從你的根文件系統(tǒng)在內(nèi)核啟動之前。一般說來,只有/bin,/dev,/etc,/lib,/proc,/var,/usr這些需要的,而其他都是可選的。

根文件系統(tǒng)一直以來都是所有類Unix操作系統(tǒng)的一個重要組成部分,也可以認為是嵌入式Linux系統(tǒng)區(qū)別于其他一些傳統(tǒng)嵌入式操作系統(tǒng)的重要特征,它給 Linux帶來了許多強大和靈活的功能,同時也帶來了一些復雜性。我們需要清楚的了解根文件系統(tǒng)的基本結構,以及細心的選擇所需要的系統(tǒng)庫、內(nèi)核模塊和應用程序等,并配置好各種初始化腳本文件,以及選擇合適的文件系統(tǒng)類型并把它放到實際的存儲設備的合適位置,下面是幾中比較常用的文件系統(tǒng)。

(1) jffs2

JFFS嵌入式系統(tǒng)文件系統(tǒng)最早是由瑞典 Axis Communications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。JFFS2是RedHat公司基于JFFS開發(fā)的閃存文件系統(tǒng),最初是針對RedHat公司的嵌入式產(chǎn)品eCos開發(fā)的嵌入式文件系統(tǒng),所以JFFS2也可以用在Linux, uCLinux中。

Jffs2: 日志閃存嵌入式系統(tǒng)文件系統(tǒng)版本2 (Journalling Flash FileSystem v2)主要用于NOR型閃存,基于MTD驅(qū)動層,特點是:可讀寫的、支持數(shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護,提供“寫平衡”支持等。缺點主要是當文件系統(tǒng)已滿或接近滿時,因為垃圾收集的關系而使jffs2的運行速度大大放慢。目前jffs3正在開發(fā)中。關于jffs系列文件系統(tǒng)的使用詳細文檔,可參考MTD補丁包中mtd-jffs-HOWTO.txt。

jffsx不適合用于NAND閃存主要是因為NAND閃存的容量一般較大,這樣導致jffs為維護日志節(jié)點所占用的內(nèi)存空間迅速增大,另外,jffsx文件系統(tǒng)在掛載時需要掃描整個FLASH的內(nèi)容,以找出所有的日志節(jié)點,建立文件結構,對于大容量的NAND閃存會耗費大量時間。

(2) yaffs:Yet Another Flash File System

yaffs/yaffs2是專為嵌入式系統(tǒng)使用 NAND型閃存而設計的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持數(shù)據(jù)壓縮),所以速度更快,掛載時間很短,對內(nèi)存的占用較小。另外,它還是跨平臺的文件系統(tǒng),除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。

yaffs/yaffs2自帶NAND芯片的驅(qū)動,并且為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統(tǒng)操作。當然,yaffs也可與MTD驅(qū)動程序配合使用。

yaffs與 yaffs2的主要區(qū)別在于,前者僅支持小頁(512 Bytes) NAND閃存,后者則可支持大頁(2KB) NAND閃存。同時,yaffs2在內(nèi)存空間占用、垃圾回收速度、讀/寫速度等方面均有大幅提升。

(3) Cramfs:Compressed ROM File System

Cramfs是Linux的創(chuàng)始人 Linus Torvalds參與開發(fā)的一種只讀的壓縮文件系統(tǒng)。它也基于MTD驅(qū)動程序。在cramfs文件系統(tǒng)中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統(tǒng)節(jié)省大量的Flash存儲空間,使系統(tǒng)可通過更低容量的FLASH存儲相同的文件,從而降低系統(tǒng)成本。

Cramfs文件系統(tǒng)以壓縮方式存儲,在運行時解壓縮,所以不支持應用程序以XIP方式運行,所有的應用程序要求被拷到RAM里去運行,但這并不代表比 Ramfs需求的RAM空間要大一點,因為Cramfs是采用分頁壓縮的方式存放檔案,在讀取檔案時,不會一下子就耗用過多的內(nèi)存空間,只針對目前實際讀取的部分分配內(nèi)存,尚沒有讀取的部分不分配內(nèi)存空間,當我們讀取的檔案不在內(nèi)存時,Cramfs文件系統(tǒng)自動計算壓縮后的資料所存的位置,再即時解壓縮到 RAM中。另外,它的速度快,效率高,其只讀的特點有利于保護文件系統(tǒng)免受破壞,提高了系統(tǒng)的可靠性。

由于以上特性,Cramfs在嵌入式系統(tǒng)中應用廣泛。但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內(nèi)容對進擴充。Cramfs映像通常是放在Flash中,但是也能放在別的文件系統(tǒng)里,使用 loopback 設備可以把它安裝別的文件系統(tǒng)里。

(4) 網(wǎng)絡文件系統(tǒng)NFS (Network File System)

NFS是由Sun開發(fā)并發(fā)展起來的一項在不同機器、不同操作系統(tǒng)之間通過網(wǎng)絡共享文件的技術。在嵌入式Linux系統(tǒng)的開發(fā)調(diào)試階段,可以利用該技術在主機上建立基于NFS 的根文件系統(tǒng),掛載到嵌入式設備,可以很方便地修改根文件系統(tǒng)的內(nèi)容。以上討論的都是基于存儲設備的文件系統(tǒng)(memory-based file system),它們都可用作Linux的根文件系統(tǒng)。實際上,Linux還支持邏輯的或偽文件系統(tǒng)(logical or pseudo file system),例如procfs(proc文件系統(tǒng)),用于獲取系統(tǒng)信息,以及devfs(設備文件系統(tǒng))和sysfs,用于維護設備文件。
責任編輯人:CC

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11446

    瀏覽量

    212678
  • 文件系統(tǒng)

    關注

    0

    文章

    293

    瀏覽量

    20271
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    帶你了解Linux內(nèi)核體系結構

    基本的功能,例如 read 和 write。系統(tǒng)調(diào)用接口之下是內(nèi)核代碼,可以更精確地定義為獨立于體系結構的內(nèi)核代碼。這些代碼是 Linux 所支持的所有處理器體系結構所通用的。在這些代
    發(fā)表于 08-27 10:31

    了解體系結構 - 介紹 Arm 體系結構

    。該體系結構為軟件開發(fā)人員公開了一個通用的指令集和工作流程,也稱為程序員模型。這有助于確保架構的不同實現(xiàn)之間的互操作性,以便軟件可以在不同的 Arm 設備上運行。本指南為任何對此感興趣的人介紹了 Arm
    發(fā)表于 08-01 14:35

    Arm的DRTM體系結構規(guī)范

    的原理和術語,但也包含了顯著的差異。 本規(guī)范的結構如下: ?第2節(jié),DRTM體系結構概述,概述了DRTM,并介紹了該體系結構如何將DRTM映射到基于Arm的
    發(fā)表于 08-08 07:45

    Linux文件系統(tǒng)課程

    本章學習目標理解什么是文件系統(tǒng)了解文件系統(tǒng)工作原理理解Fedora Core Linux文件系統(tǒng)結構掌握Fedora Core
    發(fā)表于 04-10 17:07 ?0次下載

    Linux設備驅(qū)動開發(fā)詳解》第5章、Linux文件系統(tǒng)與設備文件系統(tǒng)

    Linux設備驅(qū)動開發(fā)詳解》第5章、Linux文件系統(tǒng)與設備文件系統(tǒng)
    發(fā)表于 10-27 14:13 ?0次下載
    《<b class='flag-5'>Linux</b>設備驅(qū)動開發(fā)詳解》第5章、<b class='flag-5'>Linux</b><b class='flag-5'>文件系統(tǒng)</b>與設備<b class='flag-5'>文件系統(tǒng)</b>

    Linux 內(nèi)核/sys 文件系統(tǒng)介紹

    linux2.6內(nèi)核引入sysfs文件系統(tǒng),sysfs可以看成與proc,devfs和devpty同類別的文件系統(tǒng),該文件系統(tǒng)是虛擬的文件系統(tǒng)
    發(fā)表于 04-25 16:20 ?4440次閱讀
    <b class='flag-5'>Linux</b> 內(nèi)核/sys <b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>介紹</b>

    可以了解的Linux 文件系統(tǒng)結構

    Linux中的文件是什么?它的文件系統(tǒng)又是什么?那些配置文件又在哪里?我下載好的程序保存在哪里了?在 Linux
    發(fā)表于 04-27 14:06 ?794次閱讀
    可以了解的<b class='flag-5'>Linux</b> <b class='flag-5'>文件系統(tǒng)</b><b class='flag-5'>結構</b>

    Linux最新UBI文件系統(tǒng)介紹

    嵌入式linux中文站關注嵌入式linux文件系統(tǒng)的發(fā)展。在linux-2.6.27以前,談到Flash文件系統(tǒng),大家很多時候多會想到cra
    發(fā)表于 04-27 19:37 ?6515次閱讀

    詳細介紹Linux文件系統(tǒng)是怎樣構成的

    Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許
    發(fā)表于 04-29 16:56 ?1356次閱讀

    米爾科技ARM體系結構與編程介紹

    《ARM體系結構與編程》分14章對ARM處理器的體系結構、指令系統(tǒng)和開發(fā)工具作了比較全面的介紹
    的頭像 發(fā)表于 11-25 09:18 ?2253次閱讀
    米爾科技ARM<b class='flag-5'>體系結構</b>與編程<b class='flag-5'>介紹</b>

    Linux文件系統(tǒng)與持久性內(nèi)存

    1、Linux 虛擬文件系統(tǒng)介紹Linux 系統(tǒng)中一切皆文件,除了通常所說的狹義的
    的頭像 發(fā)表于 11-26 14:34 ?2713次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統(tǒng)</b>與持久性內(nèi)存

    嵌入式Linux開發(fā)之文件系統(tǒng)目錄結構介紹

    前言Linux文件系統(tǒng),顧名思義:文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)
    發(fā)表于 11-01 16:31 ?3次下載
    嵌入式<b class='flag-5'>Linux</b>開發(fā)之<b class='flag-5'>文件系統(tǒng)</b>目錄<b class='flag-5'>結構</b><b class='flag-5'>介紹</b>

    Linux 文件系統(tǒng)層的主要結構

    Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許
    的頭像 發(fā)表于 06-22 11:48 ?1236次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>文件系統(tǒng)</b>層的主要<b class='flag-5'>結構</b>

    Linux文件系統(tǒng)特點

    ,近期經(jīng)常被讀取和寫入,文件系統(tǒng)應該有緩存層。 文件應該用文件夾的形式組織起來,方便管理和查詢。 Linux內(nèi)核要在自己的內(nèi)存里面維護一套數(shù)據(jù)結構
    的頭像 發(fā)表于 11-09 14:48 ?1501次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>文件系統(tǒng)</b>特點

    Linux文件系統(tǒng)層的主要結構

    Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許
    的頭像 發(fā)表于 11-10 10:37 ?746次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統(tǒng)</b>層的主要<b class='flag-5'>結構</b>