操作系統(tǒng)課件-文件系統(tǒng).ppt
《操作系統(tǒng)課件-文件系統(tǒng).ppt》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)課件-文件系統(tǒng).ppt(62頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1 第五章文件管理 2 用戶總是把長期要保存的或暫時要保存的大量信息 組織成文件的形式存放在輔助存儲器中 成為計算機(jī)系統(tǒng)中的軟件資源 用戶希望的是能夠 按名存取 操作系統(tǒng)給我們提供了第五個功能 文件管理 主要有以下內(nèi)容 5 1文件管理基本理論5 2Linux文件系統(tǒng)5 3Ext系列文件系統(tǒng)5 4虛擬文件系統(tǒng) 3 5 1文件管理基本理論 文件是具有名字的一組相關(guān)信息的有序集合 存放在外部存儲器中 組成 文件名 屬性 文件體文件名 有限長度的字符串 注意DOS Windows Linux系統(tǒng)文件名 文件屬性 包括文件類型 大小 物理位置 存取控制 建立或修改日期 文件體 4 文件分類不同的系統(tǒng)對文件的管理方式不同 按文件的性質(zhì)和用途 系統(tǒng)文件 庫文件 用戶文件按文件中的數(shù)據(jù)形式 源文件 目標(biāo)文件 可執(zhí)行文件按存取權(quán)限 r w x按照文件的內(nèi)容 普通文件 目錄文件 特別文件 Linux系統(tǒng)中將設(shè)備也當(dāng)作文件對待 5 文件系統(tǒng)是操作系統(tǒng)的一個重要組成部分 實(shí)現(xiàn)文件管理的一組程序和所管理的全部文件 文件與目錄的集合 以及管理文件所需要的一些數(shù)據(jù)結(jié)構(gòu)的集合 文件系統(tǒng)通常以磁盤分區(qū)劃分 每個分區(qū)對應(yīng)一個獨(dú)立的文件系統(tǒng) 文件系統(tǒng)管理的對象 文件 目錄 磁盤存儲空間對對象操縱和管理的軟件集合 文件管理系統(tǒng)的核心部分 文件系統(tǒng)的功能 按名存取 存儲空間管理 共享和保護(hù)等 大多是在這一層實(shí)現(xiàn)的 6 1文件控制塊 為了管理文件 文件系統(tǒng)為每個文件建立一個文件控制塊 FileControlBlock FCB FCB記錄了其的使用者和管理者所關(guān)心的所有信息 PCB 包括文件名 大小 存儲位置 修改和訪問時間 權(quán)限等 一個FCB就是一個文件目錄項(xiàng) 創(chuàng)建新文件時 建立FCB 隨著文件的操作 FCB的內(nèi)容動態(tài)更新 文件被刪除時 其FCB刪除 計算機(jī)系統(tǒng)中通常存有大量的文件 系統(tǒng)須采用某種有效的形式來組織和管理這些文件 由于文件與文件的FCB一一對應(yīng) 因此 管理文件就是管理文件的FCB 2目錄 文件系統(tǒng)采用目錄來組織文件 目錄是FCB的有序集合 通過目錄將所有的FCB分層分類地組織在一起 方便了文件的檢索操作 目錄本身需要長久保存的 也需以文件的形式存在 即目錄文件 內(nèi)容是一組FCB列表 每個表項(xiàng) 目錄項(xiàng) 是一個文件的FCB 由于目錄本身也是文件 因此目錄的FCB也可以作為另一個目錄中的目錄項(xiàng) 從而構(gòu)成目錄的層次關(guān)系 目錄的主要功能之一 實(shí)現(xiàn)文件的 按名存取 即用戶只需提供文件名就可以對文件進(jìn)行各種操作 在查找目錄過程中 先將存放目錄文件的第一個盤塊中目錄調(diào)入內(nèi)存然后把用戶所給定的文件名與目錄項(xiàng) 每個文件的FCB 中的文件名逐一比較 若未找到指定文件 便將下一個盤塊中的目錄項(xiàng)調(diào)入內(nèi)存 很顯然 如果存放FCB的目錄文件過大 占多個磁盤塊 將會導(dǎo)致匹配文件名的過程要多次訪問磁盤 導(dǎo)致問題產(chǎn)生的原因就是目錄文件的每個目錄項(xiàng)即FCB占空間 如何改善 檢索目錄文件過程中只用到文件名 僅當(dāng)找到一個目錄項(xiàng)時才從該目錄項(xiàng)中讀出該文件的物理地址 而其它一些對該文件進(jìn)行描述的信息在檢索目錄時不會用到 故這些信息不需調(diào)入內(nèi)存 于是 可以將文件名和文件描述信息分開 引入索引結(jié)點(diǎn) 將文件目錄中的每個目錄項(xiàng)組成改為文件名和指向該文件所對應(yīng)結(jié)點(diǎn) 索引結(jié)點(diǎn) IndexNode I節(jié)點(diǎn) 其中存放文件描述信息單獨(dú)形成 的指針?biāo)鶚?gòu)成 引入I結(jié)點(diǎn)后 文件目錄僅由文件名及指向該文件所對應(yīng)的i結(jié)點(diǎn)的指針?biāo)鶚?gòu)成 目錄的主要功能之二 合理地組織文件 單級目錄 最簡單的文件目錄結(jié)構(gòu)是在系統(tǒng)中建立一張目錄線性表 每個文件占一表目 由文件名和文件的說明和管理信息組成 即其FCB或文件目錄項(xiàng) 單級目錄能夠?qū)崿F(xiàn) 按名存取 但存在查找速度慢 不允許重名 主要問題 不便于共享等問題 兩級目錄 系統(tǒng)設(shè)置一個主目錄 MFD 后 再為每個用戶設(shè)立一個用戶目錄 UFD MFD的每一項(xiàng)對應(yīng)一個用戶的目錄文件 UFD每一項(xiàng)對應(yīng)一個文件的FCB 多級目錄結(jié)構(gòu) 將兩級目錄結(jié)構(gòu)的層次關(guān)系加以推廣 就形成了多級目錄結(jié)構(gòu) 即樹形目錄結(jié)構(gòu) 系統(tǒng)中有一個根目錄 或根目錄文件 在這個目錄中可登記一般文件 也可以登記目錄文件 在每個目錄文件中可以登記一般文件 也可以登記目錄文件 現(xiàn)在 幾乎所有的操作系統(tǒng)都采用樹形目錄結(jié)構(gòu) 3文件的組織 文件的組織有兩種 文件的邏輯結(jié)構(gòu) 用戶對文件的組織方式 是指用戶思維中文件的結(jié)構(gòu) 文件的物理結(jié)構(gòu) 文件在存儲介質(zhì)上的組織形式 主要是指磁盤上文件的結(jié)構(gòu) 文件的邏輯結(jié)構(gòu)記錄式文件 有結(jié)構(gòu)式文件 文件是記錄的集合 每個記錄由彼此相關(guān)的域構(gòu)成 記錄可按順序編號為記錄1 記錄2 又分定 不定長記錄文件 流式文件 無結(jié)構(gòu)文件 是相關(guān)的有序字符的集合 在其內(nèi)部不再對信息進(jìn)行組織劃分 文件的長度為所含字符數(shù) 文件的物理結(jié)構(gòu)一個文件存儲介質(zhì) 格式化后就分成許多大小相等的單位 存儲塊 物理盤塊 在現(xiàn)代計算機(jī)系統(tǒng)中 一般來說 每個物理塊是一個磁盤的扇區(qū) 512字節(jié) 并給每個存儲塊有個編號 稱為物理塊號 文件的物理結(jié)構(gòu)目前有三種基本結(jié)構(gòu) 即連續(xù)文件結(jié)構(gòu) 串聯(lián)文件結(jié)構(gòu)和索引文件結(jié)構(gòu) 連續(xù)文件結(jié)構(gòu) 文件的數(shù)據(jù)存放在連續(xù)的物理存儲塊中 優(yōu)點(diǎn) 結(jié)構(gòu)簡單 實(shí)現(xiàn)容易缺點(diǎn) 不利于文件動態(tài)擴(kuò)充 創(chuàng)建文件時要求給出文件大小 用戶不方便 串聯(lián)文件結(jié)構(gòu) 文件信息存于若干不一定連續(xù)的磁盤塊中 每個物理塊的最末一個字 或第一個字 作為鏈接字 指出后繼塊號 鏈?zhǔn)字羔槾嬖谖募﨔CB中 文件的結(jié)尾塊的指針為 優(yōu)點(diǎn) 文件動態(tài)擴(kuò)充和修改容易 圖中藍(lán)線 外存空間利用率高 缺點(diǎn) 順序存取效率高 隨機(jī)存取效率太低 如果訪問文件最后的內(nèi)容 實(shí)際上是訪問整個文件 參考上圖 理解這句話 鏈接文件更適合于小型文件系統(tǒng) 為了克服串聯(lián)文件的存取效率太低的問題 引入文件映照技術(shù) 即把串聯(lián)文件中的鏈接字集中在一結(jié)構(gòu)中 DOS WINDOWS系統(tǒng)采用 文件分配表 文件分配表 FileAllocationTable FAT 磁盤格式化后建立 用于記錄外存分配 FAT每個表項(xiàng)對應(yīng)一個盤塊 標(biāo)記為0至N 1 其中用來存放分配給文件的下一個盤塊號 放在內(nèi)存中 整個系統(tǒng)一張F(tuán)AT 分配給某文件的所有物理塊都在該表中標(biāo)出 文件的首塊號記入FCB 顯示鏈接 引入FAT的問題 FAT需占用較大的內(nèi)存空間 只有將整個FAT表調(diào)入內(nèi)存才能找到對應(yīng)的盤塊號 示例 若磁盤大小為1 2M 每個物理塊大小為512B 則共有2 4K個FAT表項(xiàng) 則 回顧存儲管理的單級頁表的問題 索引結(jié)構(gòu) 不連續(xù)分配 每個文件建立一張索引表 每個表目指出文件內(nèi)容與磁盤塊號的對應(yīng)關(guān)系索引結(jié)構(gòu)是當(dāng)代計算機(jī)操作系統(tǒng)中普遍采用的結(jié)構(gòu) 如UNIX系統(tǒng) LINUX系統(tǒng) 優(yōu)點(diǎn) 具備串聯(lián)結(jié)構(gòu)所有的優(yōu)點(diǎn) 適合與隨機(jī)存放缺點(diǎn) 增加了索引的開銷 存取文件時首先要取得索引表 這樣就要增加一次訪盤操作 降低了文件訪問的速度 索引表是在建立文件時由文件管理機(jī)構(gòu)自動建立的 并存放在與文件相同的文件卷 如同一磁帶或同一盤片 上 乍一看來 存取索引文件要訪問2次外存 why Infact 在訪問索引文件之前 總是首先 打開 其對應(yīng)的索引表文件 把其索引表文件的一部分讀入主存 因此其后對文件的絕大多數(shù)訪問只要1次訪外 僅當(dāng)更新索引表到另一部分時 才發(fā)生1次二度訪外的情況 回顧快表機(jī)制 回顧頁表地址映射 第1次訪問索引表文件 第2次根據(jù)索引得到的物理塊號再度訪問外存 索引表是在建立文件時由文件管理機(jī)構(gòu)自動建立的 并存放在與文件相同的文件卷 如同一磁帶或同一盤片 上 乍一看來 存取索引文件要訪問2次外存 why Infact 在訪問索引文件之前 總是首先 打開 其對應(yīng)的索引表文件 把其索引表文件的一部分讀入主存 因此其后對文件的絕大多數(shù)訪問只要1次訪外 僅當(dāng)更新索引表到另一部分時 才發(fā)生1次二度訪外的情況 回顧快表機(jī)制 回顧頁表地址映射 第1次訪問索引表文件 第2次根據(jù)索引得到的物理塊號再度訪問外存 AnotherQuestion 回顧多級頁表 引入多級索引和混合索引 混合索引應(yīng)用 UNIXsystem 系統(tǒng)UNIXsystem 混合索引動畫演示按文件的長度 占據(jù)數(shù)據(jù)塊的個數(shù) 分為小文件 中文件 大文件 巨文件 分別對應(yīng)直接 一次間接 二次間接 三次間接的編址方式 系統(tǒng)支持的最大文件 10 256 2562 2563 512B 4文件存儲空間的管理 無論程序還是數(shù)據(jù)都是以文件形式存放在外存上 外存上文件存放的空間叫作 文件存儲空間 回顧內(nèi)存空間的管理對文件存儲空間的管理工作包括 建立文件時為文件分配存儲空間 刪除文件時去配 以及修改文件時動態(tài)更新外存空間 系統(tǒng)將外存空間分成若干大小相等的物理塊 以塊 or簇 為單位來交換信息 文件存儲空間的管理 實(shí)際上就是一個空閑塊的組織和管理問題 三種常用的管理方法 空閑塊表 空閑塊鏈 位示圖 空閑塊表用空閑區(qū)表來管理文件存儲空間 做法是系統(tǒng)設(shè)置一張表格 表中的每一個表目記錄磁盤空間中的一個連續(xù)空閑盤區(qū)的信息 表目的內(nèi)容至少包括 空閑塊區(qū)首塊地址 物理塊號 空白塊個數(shù) 空閑塊表適合于連續(xù)組織的文件 因?yàn)樵诜峙湮募r按文件尺寸申請一組連續(xù)的空閑塊 撤消文件時歸還這組連續(xù)的空閑塊區(qū) 與可變分區(qū)分配算法相似 回顧 可采用最先適應(yīng) 最壞適應(yīng) 最佳適應(yīng)算法 由于空閑塊區(qū)的個數(shù)是動態(tài)改變的 導(dǎo)致空閑塊表目個數(shù)不能預(yù)先確定 因此可能會產(chǎn)生表目溢出 表較小時 或表目浪費(fèi) 表較大時 空閑塊鏈把所有空閑塊的塊號用鏈表的形式連接在一起 適用于各種物理組織的文件 注意 對空閑塊鏈操作時應(yīng)互斥 需要分配空白塊時從鏈?zhǔn)走M(jìn)行 所以在主存中要保存一個鏈?zhǔn)字羔?它指向第一個空白塊 當(dāng)回收時 把回收塊掛在空白塊鏈尾上 位示圖 bitmap 位示圖是外存空間的存儲映射圖 是系統(tǒng)在內(nèi)存中劃分出的若干字節(jié)的集合 用來指示磁盤存儲情況 采用位示圖的具體做法是 為所要管理的磁盤設(shè)置一張位示圖 位示圖的大小 由磁盤的總塊數(shù)決定 位示圖中的每一位 bit 對應(yīng)外存空間的一個物理塊 若該位為 1 表示對應(yīng)塊被占用 0 表示空閑 設(shè)整個文件空間有n塊 那么可用n位構(gòu)成位示圖 例 設(shè)某磁盤組共有16個柱面 每個柱面有16個磁頭尋道 每個磁道分16個扇區(qū) 整個磁盤空間的扇區(qū)數(shù)為 16 16 16 4096個若一個扇區(qū)被定義為一個存儲塊 用字長16位的存儲單元來構(gòu)造位示圖 共需要256個字 分配 掃描位示圖 找到足夠的空閑塊 對應(yīng)位為 0 分配 并將對應(yīng)位改為 1 回收 將對應(yīng)的位改為 0 即可 位示圖較小 系統(tǒng)啟動時進(jìn)入內(nèi)存 全部或部分 因此可實(shí)現(xiàn)高速的分配 NOTE 必須定時地把主存中的位示圖復(fù)制到外存保存 以防萬一文件系統(tǒng)發(fā)生故障 可以依據(jù)外存的位示圖副本修復(fù)文件系統(tǒng) UNIX系統(tǒng)系列磁盤空間管理方法 成組鏈接法UNIX系統(tǒng)采用空閑塊成組鏈接法對磁盤空間的空閑塊加以組織 每100個空閑塊劃歸1組 將各組中的盤塊號存放在其前組中的第1個空閑塊中 第1組的空閑盤塊號放入系統(tǒng)專用的超級塊 superblock 中 第1組不足100塊 文件存儲空間不會恰好為100的整數(shù)倍 所以第1組小于100 最后組99塊 若把超級塊看作是最后組的成員 則最后組也是100塊 其他各組均為100塊 Important 各組第1塊和超級塊 登記了下一組的盤塊號 對應(yīng)設(shè)置一個容量為100的堆棧 另設(shè)一個棧指針指向棧0單元 棧1單元 其內(nèi)保存空閑塊號 如果當(dāng)前棧頂上升到棧99 那么意味著下1組有100個空閑塊被鏈接在一起 最后組第一塊 null標(biāo)志 空閑塊的分配和回收通過棧指針的變化 棧0 棧99 來體現(xiàn) 分配 超級塊是否上鎖 是則等待 否則上鎖后轉(zhuǎn) 從棧指針指向的棧頂取得空閑塊號 若當(dāng)前棧頂不是棧0單元 則轉(zhuǎn) 否則該塊是組中的第1塊 而第1塊不能直接分配 故轉(zhuǎn) 棧指針退1 置超級塊修改標(biāo)記并解鎖 分配該空閑塊號給調(diào)用者 返回 把該塊內(nèi)容復(fù)制到超級塊中 置超級塊修改標(biāo)記并解鎖 把該塊分配給調(diào)用者 返回 回收 超級塊是否上鎖 是則等待 否則上鎖后轉(zhuǎn) 若棧未滿 棧指針 棧99 則轉(zhuǎn) 否則轉(zhuǎn) 棧指針進(jìn)1 空閑塊號存入棧頂單元 置超級塊修改標(biāo)記并解鎖后返回 把超級塊內(nèi)的棧復(fù)制到當(dāng)前回收的空閑塊中 再將該新空閑塊號填入超級塊中棧0單元 使棧指針指向棧底 置超級塊修改標(biāo)記并解鎖后返回 注意 此時形成了1個新的空閑塊組 該組的第1塊正是剛回收的空閑塊 成組鏈接法 動畫演示 成組鏈接法的優(yōu)勢空閑塊成組鏈接法不占用額外空間 只是臨時借用每組的第1塊登記下一組的空閑塊號 分配與回收工作幾乎都在主存 超級塊 中進(jìn)行 僅當(dāng)分完1組或收回滿1組時才啟動I O通道工作 所以該方法在空間 時間開銷方面相當(dāng)節(jié)省 5 2Linux文件系統(tǒng) Linux繼承了Unix文件系統(tǒng)的優(yōu)秀設(shè)計 并結(jié)合了一些現(xiàn)代文件系統(tǒng)的先進(jìn)技術(shù) 在開放性 可擴(kuò)展性和性能方面都十分出色 Linux文件系統(tǒng)的幾個主要特征 支持多種文件系統(tǒng) DOS Windows等OS只支持一種或幾種專用的文件系統(tǒng) 而Linux可以支持幾乎所有流行的文件系統(tǒng) 使得Linux可以和許多其他OS共存 允許訪問其他OS分區(qū)中的文件 樹型可掛載目錄結(jié)構(gòu) Linux采用樹型目錄 并引入分區(qū)掛載的概念 系統(tǒng)分區(qū)上的文件系統(tǒng)稱為根文件系統(tǒng) 其他所有分區(qū)的文件系統(tǒng)都要掛載 mount 到根文件系統(tǒng)的某個目錄下 文件 設(shè)備統(tǒng)一管理 Linux將設(shè)備抽象為文件 Linux使用標(biāo)準(zhǔn)的 樹型目錄結(jié)構(gòu) 無論操作系統(tǒng)管理幾個磁盤分區(qū) 這樣的目錄樹只有一個 EXT系列是Linux的標(biāo)準(zhǔn)文件系統(tǒng) 系統(tǒng)把它的磁盤分區(qū)做為系統(tǒng)的根文件系統(tǒng) EXT以外的文件系統(tǒng)則安裝 mount 在某個目錄下 成為系統(tǒng)樹型結(jié)構(gòu)中的一個分枝 1Linux文件系統(tǒng)的結(jié)構(gòu)設(shè)計 Linux文件系統(tǒng)采用分層結(jié)構(gòu)的設(shè)計 包括 磁盤I O系統(tǒng)層磁盤高速緩存磁盤文件系統(tǒng)層 也稱實(shí)際文件系統(tǒng) 虛擬文件系統(tǒng) 磁盤I O系統(tǒng)層 是文件系統(tǒng)所依賴的底層模塊 用于實(shí)現(xiàn)對存儲在磁盤上的文件數(shù)據(jù)的I O操作 由通用塊層 I O調(diào)度程序和設(shè)備驅(qū)動程序構(gòu)成 實(shí)際文件系統(tǒng) Linux默認(rèn)FS是Ext2 4 支持多種FS Linux專用 Ext2 4 JFS XFS RFS和NFS Unix sysv ufs bfs Minix minix XIA Windows或DOS FAT NTFS虛擬文件系統(tǒng) 為了屏蔽各個文件系統(tǒng)之間的差異 為用戶提供訪問文件的統(tǒng)一接口 Linux在具體的文件系統(tǒng)上增加了一個稱為虛擬文件系統(tǒng) VirtualFileSystem VFS 的抽象層 使得不同的文件系統(tǒng)按照同樣的模式呈現(xiàn)在用戶面前 磁盤高速緩存 回顧前述知識 5 3Ext系列文件系統(tǒng) Ext2 Extended 2 是專為Linux系統(tǒng)設(shè)計的 采用的是Unix文件系統(tǒng)的設(shè)計思想 運(yùn)行穩(wěn)定 存取效率也很高 可支持最大4TB 1T 1024G 的磁盤分區(qū) 2000年以前一直是幾乎所有的Linux發(fā)行版的默認(rèn)的文件系統(tǒng) Ext2的弱點(diǎn)在于它是一個非日志文件系統(tǒng) 所以不能在系統(tǒng)發(fā)生斷電或者其他系統(tǒng)故障時保證文件數(shù)據(jù)的完整性 Ext3 是一個基于Ext2開發(fā)的日志文件系統(tǒng) 具有健全的日志功能 可靠性很高 在非正常關(guān)機(jī)后 文件系統(tǒng)可在數(shù)十秒鐘內(nèi)自行修復(fù) Ext3容量達(dá)到32TB 單個文件最大2TB 目前Ext3已被許多Linux發(fā)行版作為默認(rèn)安裝的文件系統(tǒng) Ext4 最顯著的改進(jìn)是文件和文件系統(tǒng)的大小 Ext4容量達(dá)到1024PB 1P 1024T 而文件大小則可達(dá)到16TB 1Ext文件的結(jié)構(gòu) Ext文件的邏輯結(jié)構(gòu)是無結(jié)構(gòu)的流式文件 基于字節(jié)流的概念 使得Linux系統(tǒng)可以把目錄 設(shè)備等都當(dāng)作文件來統(tǒng)一對待 Ext文件的物理結(jié)構(gòu)采用易于擴(kuò)展的多重索引方式 便于文件動態(tài)增長 同時也可以方便地實(shí)現(xiàn)順序和隨機(jī)訪問 Ext文件系統(tǒng)引入索引節(jié)點(diǎn) i節(jié)點(diǎn) 來描述文件 Ext文件的FCB分為i節(jié)點(diǎn)和目錄項(xiàng)兩部分描述 目錄文件的各目錄項(xiàng) directoryentry 僅由文件名和i節(jié)點(diǎn)號 指向該文件的其它屬性 構(gòu)成 i節(jié)點(diǎn)占用一個單獨(dú)的存儲塊 包含文件說明信息 屬性 和索引表 指向磁盤塊 兩部分 i節(jié)點(diǎn)毀壞則整個文件不可用 Ext3文件的物理結(jié)構(gòu)采用了多重索引方式 i節(jié)點(diǎn)中的索引表描述如右圖 索引表0 11項(xiàng)直接指向磁盤塊 稱為直接塊 12項(xiàng)是一個指針 指向一個間接索引表 間接索引表中的指針指向數(shù)據(jù)塊 稱為間接塊 同理13項(xiàng) 二次間接 14項(xiàng) 三次間接 示例 Ext2文件系統(tǒng)的默認(rèn)塊大小1KB 則12K以下的小文件 不需要使用間接索引 大的文件 需要用到間接索 設(shè)每個指針占4字節(jié) 則一個間接索引表含有256個指針 對應(yīng)256個間接塊 因此 大小在12K 268K的文件需要一次間接 同理 更大的文件使用二次間接甚至三次間接指針 得到最大約16GB的文件 2Ext目錄文件 同普通文件一樣 每個目錄文件對應(yīng)一個目錄項(xiàng) 在其父目錄中 以及一個i節(jié)點(diǎn) 不同的是 其數(shù)據(jù)塊中存放的不是文件內(nèi)容而是目錄項(xiàng)集合 包含了該目錄下的所有文件的目錄項(xiàng) i節(jié)點(diǎn)號和文件名 頭兩個目錄項(xiàng)是 和 示例 目錄A下含有子目錄B和文件C D E 注意 文件D和E共享 3Ext文件定位 以查找Linux系統(tǒng)中 home zhuge memo文件為例 實(shí)現(xiàn)按名查找 5 4虛擬文件系統(tǒng) VFS 虛擬文件系統(tǒng)是Linux內(nèi)核中的一個軟件層 用于給用戶空間程序提供文件系統(tǒng)接口 它也提供了內(nèi)核中的一個抽象功能 允許不同的文件系統(tǒng)共存 VFS只存在于內(nèi)存中 在系統(tǒng)啟動之后才建立完成 并在系統(tǒng)關(guān)閉時撤銷 VFS必須和實(shí)際文件系統(tǒng)一起才能構(gòu)成一個完整的文件系統(tǒng) VFS屏蔽了各種實(shí)際文件系統(tǒng)的差異 為用戶提供了一種標(biāo)準(zhǔn)的文件操作接口 1VFS構(gòu)成 VFS用C語言編寫 采用面向?qū)ο蟮某绦蛟O(shè)計思想 用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中描述各種實(shí)際文件系統(tǒng) 包括 VFS超級塊 superblock 描述文件系統(tǒng)的基本信息 對應(yīng)實(shí)際文件系統(tǒng)的超級塊 VFS目錄項(xiàng) dentry 描述文件的路經(jīng)分量 VFS索引節(jié)點(diǎn) inode 描述文件的信息 對應(yīng)文件的磁盤i節(jié)點(diǎn) VFS文件 file 描述一個打開的文件 包括文件的當(dāng)前使用信息 2VFS與進(jìn)程接口 VFS為進(jìn)程提供了訪問文件系統(tǒng)的統(tǒng)一接口 接口由fs struct和file struct結(jié)構(gòu)構(gòu)成 fs struct用于建立進(jìn)程與文件系統(tǒng)間的聯(lián)系 主要包括文件系統(tǒng)的根目錄和當(dāng)前目錄等信息 file struct用于建立進(jìn)程和所有該進(jìn)程打開的文件之間的聯(lián)系 3VFS緩存機(jī)制 緩存是在內(nèi)存中開辟的存儲區(qū) 用于存放那些可能會重復(fù)使用的數(shù)據(jù) 提高效率 當(dāng)VFS需要構(gòu)造某個對象或存取磁盤數(shù)據(jù)時 先在緩存中查找 若有就直接使用 否則再啟動I O操作 傳輸數(shù)據(jù) 構(gòu)造對象 VFS采用如下緩存機(jī)制 dentry inode緩存 用于緩存dentry和inode對象 頁面緩存 用于緩存文件的內(nèi)容 頁面緩存 文件的inode對象將文件內(nèi)容按位置映射到頁面緩存中 讀寫文件時直接訪問頁面緩存 只在必要時才啟動I O操作 完成磁盤中與緩存間的數(shù)據(jù)傳輸 4文件系統(tǒng)的操作 用戶進(jìn)程使用VFS提供的一組系統(tǒng)調(diào)用來進(jìn)行文件操作 VFS負(fù)責(zé)將這一組系統(tǒng)調(diào)用映射到實(shí)際文件系統(tǒng)的文件操作函數(shù)上 這是通過在VFS的超級塊 目錄項(xiàng) i節(jié)點(diǎn)和文件結(jié)構(gòu)中的操作集來實(shí)現(xiàn)的 這些操作集統(tǒng)一地定義了對超級塊 目錄項(xiàng) i節(jié)點(diǎn)和文件的所有操作的接口 它們通過函數(shù)指針連接到文件系統(tǒng)的某個操作函數(shù)上 完成具體的文件操作 打開文件OPEN 根據(jù)文件的路徑名找到該文件的dentry inode和file對象 在進(jìn)程的file struct結(jié)構(gòu)中找到一個空閑的fd數(shù)組項(xiàng) 將file對象連到該表項(xiàng)中 返回該表項(xiàng)的下標(biāo) 這個下標(biāo)就是該打開文件的文件描述符 若文件已經(jīng)打開 被其他進(jìn)程打開 則其file結(jié)構(gòu)已存在 此時只需找到該文件的file結(jié)構(gòu) 將其連到本進(jìn)程的file struct中的fd上 并將file結(jié)構(gòu)中的引用計數(shù)f count加1 返回fd數(shù)組項(xiàng)的下標(biāo)即可 關(guān)閉文件close 斷開進(jìn)程與該文件之間的連接 即釋放該文件的file結(jié)構(gòu)在file struct表中占用的fd 將f count減1 若為0釋放file結(jié)構(gòu) 讀read 寫write文件 文件在讀 寫前必須是已經(jīng)打開的 系統(tǒng)通過fd的值在進(jìn)程的file struct中檢索fd數(shù)組 得到文件的file結(jié)構(gòu)和i節(jié)點(diǎn) 根據(jù)file結(jié)構(gòu)中的f mode和i節(jié)點(diǎn)中的i mode檢查文件的訪問權(quán)限 然后通過file結(jié)構(gòu)的f op找到read 或write 操作函數(shù) 用這個函數(shù)完成數(shù)據(jù)的讀 寫 讀 寫操作的起始位置是file結(jié)構(gòu)中的當(dāng)前文件位置標(biāo)志f pos 打開之初其值 0 讀 寫操作過程中動態(tài)更新 用lseek 設(shè)置f pos的值 ENDOFTHISCHAPTER- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 操作系統(tǒng) 課件 文件系統(tǒng)
鏈接地址:http://m.hcyjhs8.com/p-7694589.html