色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Linux文件系統組件的體系結構介紹

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

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

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

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

下面是Linux文件系統組件的體系結構:

用戶空間包含一些應用程序(例如,文件系統的使用者)和 GNU C 庫(glibc),它們為文件系統調用(打開、讀取、寫和關閉)提供用戶接口。系統調用接口的作用就像是交換器,它將系統調用從用戶空間發送到內核空間中的適當端點。

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

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

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

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

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

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

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

1./bin目錄

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

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

2./sbin 目錄

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

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

3、/dev目錄

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

4./etc目錄

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

5./lib目錄

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

6、/home目錄

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

7./root目錄

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

8./usr目錄

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

9、 /var目錄

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

10、/proc目錄

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

11、 /mnt目錄

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

12. /tmp目錄

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

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

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

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

(1) jffs2

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

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

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

(2) yaffs:Yet Another Flash File System

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

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

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

(3) Cramfs:Compressed ROM File System

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

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

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

(4) 網絡文件系統NFS (Network File System)

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

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

    關注

    87

    文章

    11320

    瀏覽量

    209849
  • 文件系統
    +關注

    關注

    0

    文章

    287

    瀏覽量

    19927
收藏 人收藏

    評論

    相關推薦

    帶你了解Linux內核體系結構

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

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

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

    Arm的DRTM體系結構規范

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

    Linux文件系統課程

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

    Linux設備驅動開發詳解》第5章、Linux文件系統與設備文件系統

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

    Linux 內核/sys 文件系統介紹

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

    可以了解的Linux 文件系統結構

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

    Linux最新UBI文件系統介紹

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

    詳細介紹Linux文件系統是怎樣構成的

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

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

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

    Linux文件系統與持久性內存

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

    嵌入式Linux開發之文件系統目錄結構介紹

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

    Linux 文件系統層的主要結構

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

    Linux文件系統特點

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

    Linux文件系統層的主要結構

    Linux 文件系統體系結構是一個對復雜系統進行抽象化的有趣例子。通過使用一組通用的 API 函數,Linux 可以在許多種存儲設備上支持許
    的頭像 發表于 11-10 10:37 ?591次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>層的主要<b class='flag-5'>結構</b>
    主站蜘蛛池模板: 秘密教学93话恩爱久等了免费| 九九99热久久精品在线6| 男子扒开美女尿口做羞羞的事| AV久久久囯产果冻传媒| 午夜AV亚洲一码二中文字幕青青| 精品人妻伦九区久久AAA片69| 国产亚洲色婷婷久久精品99| 国产在线观看黄| 精品欧美18videosex欧美| 好男人好资源在线播放| 久久ZYZ资源站无码中文动漫| 久久久精品久久久久三级| 两个女人互添下身高潮自视频| 男人插女人逼逼| 日本三级黄色大片| 国产精品久久vr专区| 久久黄色网| 老师你奶真大下面水真多| 热久久2018亚洲欧美| tube69hdxxxx日本| 色多多旧版污污破解版| 亚洲不卡高清免v无码屋| 99热久久这里只精品国产WWW| 国产成人教育视频在线观看| 棉袜足j吐奶视频| 无码人妻99久久密AV| 中文字幕成人免费高清在线| 动漫美女被h动态图| 免费在线观看国产| 亚州日韩精品AV片无码中文| 亚洲熟妇无码乱子AV电影| 91久久偷偷看嫩草影院无费| 成人国产在线看不卡| 看电影就来5566先锋av| 乌克兰xxxxx| 99香蕉视频| 久久久无码AV精品亚洲A片软件| 三级网站视频| 99视频在线精品免费观看18| 久久婷婷久久一区二区三区| 亚洲免费观看|