版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1文件系統(tǒng)2本章教學(xué)目標(biāo)理解文件的概念理解文件目錄的概念和組織方式理解文件的邏輯結(jié)構(gòu)和組織方式掌握文件的物理結(jié)構(gòu)和組織方式理解文件空間管理的方法理解Linux文件系統(tǒng)中文件系統(tǒng)調(diào)用文件系統(tǒng)的問題文件邏輯上的組織方式?
字節(jié)流形式?固定記錄長度?可變記錄長度文件的訪問模式
順序訪問?隨機(jī)訪問?眾多的文件如何有序地進(jìn)行組織和管理?
文件目錄結(jié)構(gòu)文件如何進(jìn)行共享和保護(hù)?
訪問控制權(quán)限文件在物理磁盤上如何存儲?如何分配物理磁盤的空間?
給定文件名和邏輯記錄號或邏輯塊號,如何轉(zhuǎn)換到文件的物理位置?34大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)5文件系統(tǒng)文件系統(tǒng)的功能:文件的按名存取文件目錄的建立和維護(hù)文件的查找和定位文件存儲空間的分配和管理提供文件的存取方法和文件存儲結(jié)構(gòu)實(shí)現(xiàn)文件的共享、保護(hù)和保密提供一組易用的文件操作和命令提供與設(shè)備管理交互的統(tǒng)一接口6文件的概念文件是操作系統(tǒng)對所存儲的信息對外提供的統(tǒng)一邏輯視圖文件由是由文件名標(biāo)識的一組存儲在二級存儲設(shè)備上的信息的集合從用戶的角度,文件是邏輯二級存儲設(shè)備最小的分配單元用戶按名存取文件,操作系統(tǒng)負(fù)責(zé)文件名到物理存儲位置的映射文件是由位串、連續(xù)的字節(jié)、行、或記錄構(gòu)成的集合,文件內(nèi)容的含義取決于文件創(chuàng)建者7文件類型按用途分系統(tǒng)文件庫文件用戶文件按保護(hù)級別分只讀文件讀寫文件不保護(hù)文件按數(shù)據(jù)類型分源程序文件目標(biāo)文件可執(zhí)行文件8UNIX/Linux的文件類型普通文件ASCII文件二進(jìn)制文件目錄文件由文件目錄所構(gòu)成的用來維護(hù)文件系統(tǒng)結(jié)構(gòu)的系統(tǒng)文件特別文件指各類外部設(shè)備文件將所有I/O設(shè)備統(tǒng)一在文件系統(tǒng)下9文件名與文件類型各個操作系統(tǒng)的文件命名規(guī)則略有不同文件名一般由文件名稱和擴(kuò)展名稱組成,兩者中間以”.”分割,如”myfile.doc,command.exe”文件名用于識別文件擴(kuò)展名用于區(qū)分文件類型10文件名/filefoowho
date
.profile
由字符(除了/)構(gòu)成的字符串,有可能是大小寫敏感的1112文件屬性文件名唯一用戶可讀的信息文件標(biāo)識文件系統(tǒng)內(nèi)的唯一標(biāo)識類型普通文件、目錄文件、設(shè)備文件位置指向文件的位置,包括設(shè)備以及設(shè)備上的位置大小當(dāng)前長度和允許的最大長度權(quán)限訪問控制信息,例如誰可以讀、寫、執(zhí)行文件等時間文件的創(chuàng)建時間,最后修改時間,最后使用時間等13文件屬性與文件相關(guān)的所有信息保存在文件目錄結(jié)構(gòu)中文件目錄通常包含文件名和文件標(biāo)識兩部分文件標(biāo)識用于定位其它屬性14文件操作創(chuàng)建文件(create)從文件系統(tǒng)中找到存放文件的空間(空間分配問題)在目錄中為該文件添加新目錄項(xiàng)寫文件(write)
給出文件名和需要寫入文件的信息文件系統(tǒng)查找目錄,從文件目錄項(xiàng)中找到文件的位置文件系統(tǒng)保存了一個寫指針,指出下一個寫操作開始的位置讀文件(read)給出文件名以及內(nèi)存地址,用于存放讀出的下一個文件塊文件系統(tǒng)查找目錄,找到對應(yīng)的文件目錄項(xiàng)系統(tǒng)保存一個讀指針,指出下一個讀操作開始的位置讀指針每個進(jìn)程都不一樣15文件操作(cont)重定位(repositioning,seek)查找文件目錄,找到對應(yīng)的目錄項(xiàng),將當(dāng)前文件位置指針修改為給定的值文件重定位并不涉及真正的I/O操作刪除文件(delete)
查找文件目錄,找到給定文件名對應(yīng)的目錄項(xiàng)釋放文件所占用的所有空間刪除對應(yīng)的目錄項(xiàng)清空文件刪除文件內(nèi)容,但保留其屬性(長度除外)16文件操作(cont)追加(appending)重命名(renaming)拷貝(copy)獲取和修改文件屬性(get/setattribute)17文件存取方法順序存取存取操作在上次的基礎(chǔ)上進(jìn)行系統(tǒng)設(shè)置讀寫指針,指向要讀出或?qū)懭氲淖止?jié)位置或記錄位置。直接存取快速地以任意次序直接讀寫某條記錄,對文件讀/寫的次序沒有任何限制索引存取基于索引文件的存取方法用戶提供記錄名或記錄鍵,按名搜索,找到所需要的記錄索引存?。ɡm(xù))例如,一個零售商品價(jià)格的文件每條記錄包含兩個部分UPC(商品代碼)--10字符長
價(jià)格—6個字符存儲假設(shè)有1200000條記錄則文件大小為16*1200000=19.2M如何快速地讀取商品代碼為”2353765401”的價(jià)格?18索引存?。ɡm(xù))假設(shè)物理塊大小為1024字節(jié),則每個塊能存放1024/16=64個記錄一共需要18750個物理塊如果文件記錄按無序的方式存放,則平均需要檢索600000條記錄才能找到如果文件記錄按順序存放,并且為文件建立索引,索引的下標(biāo)表示邏輯塊號,而索引表項(xiàng)的值存放的是該邏輯塊里第一條記錄的UPC192000013200000100012500….20534654052457736491…..23537654010001320000,100.05…….0100012500,203.13…….…….2053465405,511.89…….2353765401,243.00…….2457736491,113.04…….…..64條記錄索引2122大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)23文件控制塊(FCB)文件系統(tǒng)為每個文件建立的唯一的管理數(shù)據(jù)結(jié)構(gòu),一般包括:文件標(biāo)識和控制信息文件名、用戶名、文件存取權(quán)限、訪問控制權(quán)限、文件類型等;文件邏輯結(jié)構(gòu)信息記錄類型、記錄個數(shù)、記錄長度、成組因子等;文件物理結(jié)構(gòu)信息文件所在設(shè)備名、文件物理結(jié)構(gòu)類型、記錄存放在輔存中的塊號或文件信息首塊盤塊號,文件索引的位置等;文件使用信息共享文件的進(jìn)程數(shù),文件修改情況,文件最大長度和當(dāng)前大小文件管理信息文件建立日期,最近修改日期,最近訪問日期等;24FCB基于FCB可以方便地實(shí)現(xiàn)文件的按名存取創(chuàng)建文件時,為其建立一個FCB,用來記錄文件的屬性信息存取此文件時,先找到其FCB,再找到文件信息盤塊號或首塊物理位置為了加快文件的查找速度,通常將FCB集中起來進(jìn)行管理,組成文件目錄25文件目錄文件目錄包含兩種目錄項(xiàng):文件的FCB
描述子目錄的目錄文件的FCB全部由目錄項(xiàng)構(gòu)成的文件稱為目錄文件目錄項(xiàng)的格式按統(tǒng)一標(biāo)準(zhǔn)定義目錄文件至少包含兩個目錄項(xiàng)當(dāng)前目錄項(xiàng)”.”
父目錄項(xiàng)”..”文件目錄的基本功能將文件名轉(zhuǎn)換成此文件信息在磁盤上的物理位置有效地組織和管理文件26目錄/fileetcusr
dmr
bin27文件路徑/file/usr/wm4/.profile
由從根目錄開始沿著目錄結(jié)構(gòu)一直到文件的目錄項(xiàng)和文件名順序組合而成28工作目錄/file默認(rèn)情況下文件名所處的目錄29相對路徑/file
./.profile
../wm4/.profile
相對于當(dāng)前工作目錄的路徑
..referstoparentdirectory
.referstocurrentdirectory30目錄結(jié)構(gòu)單級目錄結(jié)構(gòu)兩級目錄結(jié)構(gòu)樹形目錄結(jié)構(gòu)DAG結(jié)構(gòu)圖結(jié)構(gòu)31單級目錄結(jié)構(gòu)所有用戶都共用一個目錄缺點(diǎn):名字易于重復(fù)用戶沒有獨(dú)立的目錄,不利于共享和保護(hù)32兩級目錄結(jié)構(gòu)33純樹形目錄結(jié)構(gòu)目錄可以有任意多的層次目錄可以包含子目錄,也可以包含文件每個文件只有一個父目錄文件共享較為困難34DAG目錄結(jié)構(gòu)一個文件可以有多個父目錄能較方便地實(shí)現(xiàn)文件的共享目錄結(jié)構(gòu)的維護(hù)較復(fù)雜需要為每個文件維護(hù)一個引用計(jì)數(shù),以記錄文件的父目錄個數(shù),僅當(dāng)引用計(jì)數(shù)值為1時,刪除操作才真正刪除文件35DAG目錄結(jié)構(gòu)示意圖36文件共享的實(shí)現(xiàn)方式LINUXHardlinkSymboliclinkWindows快捷方式37HardLink/bobalicehomebinxxyy當(dāng)前工作目錄為bob$ln../alice/xxyy38SymbolicLink/bobalicehomebinxxyy/home/alice/xx當(dāng)前工作目錄為bob$ln–s../alice/xxyy39任意圖結(jié)構(gòu)目錄可能包含環(huán)查找比較困難40Linux/Unix的目錄項(xiàng)結(jié)構(gòu)將文件名和文件屬性分離,其它信息單獨(dú)組成一個數(shù)據(jù)結(jié)構(gòu),稱為索引節(jié)點(diǎn)inode,其位置由inode號標(biāo)識每個文件或子目錄都在父目錄文件中有一條目錄項(xiàng)每個目錄項(xiàng)包含兩個字段
文件名
i-node號:指出存放文件屬性信息的inode節(jié)點(diǎn)號每個磁盤塊可以存放幾十個基本目錄項(xiàng)41
I-node結(jié)構(gòu)modeownertimestampSizeBlockcountDirectblocks0-9DoubleindirectTripleindirectSingleindirectDatablockDatablockDatablockIndirectblock...DatablockDatablockDatablock...IndirectblockIndirectblockIndirectblock...Referencecount42inodeUnix/Linux操作系統(tǒng)對由文件目錄項(xiàng)組成的目錄文件和普通文件同等對待,均存放在磁盤中文件系統(tǒng)中的每個文件都有一個磁盤inode與之對應(yīng),這些inode存放在磁盤的inode區(qū)找到文件的inode就能找到文件在物理磁盤中的存放位置43目錄項(xiàng)、inode和數(shù)據(jù)塊的關(guān)系磁盤文件卷inode文件名inodeinode文件名inode磁盤文件0#1#2#……數(shù)據(jù)塊數(shù)據(jù)塊目錄塊…數(shù)據(jù)塊數(shù)據(jù)塊目錄塊引導(dǎo)塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊inode……inode…超級塊44引導(dǎo)塊位于文件卷最開始的第一扇區(qū),該512字節(jié)是文件系統(tǒng)的引導(dǎo)代碼,為根文件系統(tǒng)所特有,其他文件系統(tǒng)這512字節(jié)為空超級塊位于文件系統(tǒng)第二扇區(qū),緊跟引導(dǎo)塊之后,用于描述本文件系統(tǒng)的結(jié)構(gòu)和管理信息。如inode節(jié)點(diǎn)所占盤塊數(shù)、文件數(shù)據(jù)所占的盤塊數(shù)等磁盤inode區(qū)位于超級塊之后,長度由超級塊中的inode所占盤塊數(shù)決定每個inode用于描述文件屬性中除文件名之外的屬性,包括文件的長度、屬主、物理數(shù)據(jù)塊號等;數(shù)據(jù)塊分為目錄文件數(shù)據(jù)塊和普通文件數(shù)據(jù)塊
目錄文件數(shù)據(jù)塊中存放的是目錄項(xiàng)的集合普通文件數(shù)據(jù)塊存放的是文件數(shù)據(jù)45Linux中文件目錄的檢索(a)用戶角度目錄結(jié)構(gòu)usrmyfilxyzhomefei1myfile.cfei3fei2Afei4fei5testfile.cB685.100
..941A270fei1250fei2770fei3270.685..302myfile.c250.685..302myfile.c770.685..345fei4565fei5345
.770..302testfile.c565.770..824B
不同角度的目錄結(jié)構(gòu)(b)系統(tǒng)角度目錄鏈接46大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)47文件組織與數(shù)據(jù)存儲邏輯結(jié)構(gòu)從用戶的觀點(diǎn)出發(fā),研究用戶概念中的抽象的信息組織方式用戶可以觀察到的、可加以處理的數(shù)據(jù)集合相關(guān)數(shù)據(jù)的集合稱為邏輯文件物理結(jié)構(gòu)邏輯文件在物理存儲空間中的存放方法和組織關(guān)系物理文件被看成是相關(guān)物理塊的集合主存與物理存儲器進(jìn)行信息交換的物理單位是塊48文件的邏輯結(jié)構(gòu)流式文件又稱為無結(jié)構(gòu)文件文件內(nèi)的數(shù)據(jù)不再分記錄,而是看成字節(jié)流也可以看作是記錄就為1個字節(jié)的記錄式文件大多數(shù)現(xiàn)代操作系統(tǒng)如WINDOWS,UNIX,LINUX只提供流式文件由應(yīng)用程序自行根據(jù)字節(jié)重構(gòu)對應(yīng)用有意義的記錄49文件的邏輯結(jié)構(gòu)記錄式文件文件是一組記錄的集合例如職工的工資記錄構(gòu)成工資文件從操作系統(tǒng)的角度看,邏輯記錄是文件內(nèi)獨(dú)立的最小信息單位,每次總是為使用者存儲、檢索或更新一條邏輯記錄記錄式文件的記錄組織和使用方法記錄式順序文件記錄順序編號,并被順序訪問記錄式索引文件用索引表根據(jù)記錄鍵快速查找到相應(yīng)的記錄在文件中的位置50成組與分解邏輯記錄與物理塊之間的對應(yīng)關(guān)系一條邏輯記錄被存放到物理存儲器時,可能會占用一塊或多塊,或者一個物理塊可以包含多條邏輯記錄成組:若干邏輯記錄合并成一組,寫入一塊,每塊中的邏輯記錄的個數(shù)稱為成塊因子分解:從讀進(jìn)內(nèi)存緩沖區(qū)的物理塊中分解出邏輯記錄的過程51記錄成組與分解的處理過程邏輯記錄物理存儲區(qū)邏輯記錄1邏輯記錄2邏輯記錄3邏輯記錄K…物理記錄系統(tǒng)緩沖區(qū)用戶工作區(qū)52記錄格式記錄格式就是記錄內(nèi)數(shù)據(jù)的排列方式記錄格式分為:定長記錄所有邏輯記錄具有相同的長度記錄中的所有數(shù)據(jù)項(xiàng)的相對位置固定變長記錄邏輯記錄長度不等每條邏輯記錄的長度在處理之前能預(yù)先確定跨塊記錄記錄長度大于塊長53記錄鍵能用于區(qū)別同一文件中其它邏輯記錄的數(shù)據(jù)項(xiàng),也稱為關(guān)鍵字或鍵能唯一標(biāo)識某條邏輯記錄的鍵稱為主鍵54大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)55文件的物理結(jié)構(gòu)文件系統(tǒng)需要提供將邏輯文件存儲到物理存儲設(shè)備上去的組織方式邏輯上連續(xù)的文件是否需要連續(xù)存放在物理存儲介質(zhì)上?文件的存取速度?兩類方法計(jì)算法通過對記錄鍵進(jìn)行計(jì)算,從而轉(zhuǎn)換成對應(yīng)的物理地址指針法設(shè)置專門的指針,指明相應(yīng)記錄的物理地址或表達(dá)各個記錄之間的關(guān)聯(lián)56文件的物理結(jié)構(gòu)具體的文件物理結(jié)構(gòu)和組織方法順序文件/連續(xù)文件連接文件
FAT
索引文件57順序文件/連續(xù)文件文件中邏輯上連續(xù)的信息存放到物理介質(zhì)的相鄰物理塊上形成順序結(jié)構(gòu)文件控制塊FCB中保存第一個物理塊的地址和占用的總物理塊數(shù)可以對順序文件按記錄進(jìn)行排序,成為有序的順序文件優(yōu)點(diǎn):順序存取和隨機(jī)存取時速度較快缺點(diǎn)建立文件之前需要確定文件的長度,以分配存儲空間修改、插入和添加文件記錄較為困難對于變長記錄的處理很困難會產(chǎn)生外部碎片5859連接文件文件在物理上被組織成物理塊的鏈表,分配給一個文件的物理塊在空間上可能是分散的文件控制塊FCB給出第一個物理塊的地址每個塊的連接字指出文件的下一個物理塊位置當(dāng)連接字內(nèi)容為某個特殊值時,表示文件至本塊結(jié)束pointerblock=6061連接文件(cont)優(yōu)點(diǎn):文件的邏輯順序獨(dú)立于存儲空間的物理塊順序易于記錄的增、刪、改易于文件擴(kuò)充缺點(diǎn)
僅適宜于順序存取
隨機(jī)存取速度慢,需要從頭開始查找連接字與數(shù)據(jù)混放,破壞了數(shù)據(jù)塊的完整性連接字需要占用額外的空間62FAT連接文件的一個變種,用于克服連接字和數(shù)據(jù)混放的缺點(diǎn),提高隨機(jī)存取的速度把連接指針從數(shù)據(jù)塊中分離出來,單獨(dú)建立一個指針數(shù)組PTRS[n],n為組成磁盤連接文件物理塊的總塊數(shù)每個PTRS[i]對應(yīng)于一個物理塊i,如果物理塊j在文件中緊跟物理塊i之后,則PTRS[i]=j文件控制塊FCB存放文件第一個物理塊的塊號指針數(shù)組保存在磁盤的一個專門區(qū)域,如0磁道的前k個塊為了縮短定位文件信息塊所需要的時間,可以把這些指針連續(xù)盤塊裝進(jìn)主存或高速緩存。假設(shè)4字節(jié)記錄磁盤塊號,塊大小為1K,則當(dāng)k=100時,可以記錄256×100=25600個數(shù)據(jù)塊的磁盤塊號,即25,600,000字節(jié)大小的存儲空間6364索引文件為每個文件建立索引,給出邏輯記錄或邏輯塊號到物理塊號的映射索引表可以存放在文件控制塊中,也可以讓索引表作為物理塊單獨(dú)駐留在磁盤的任意位置,而FCB中僅包含索引表的地址優(yōu)點(diǎn)隨機(jī)存儲速度快便于信息的增、刪、改缺點(diǎn)索引表的空間開銷6566索引文件(cont)當(dāng)記錄數(shù)目很多/文件很大時,索引表本身要占用很多物理塊,則查找某個記錄鍵所對應(yīng)的索引項(xiàng)時,可能需要查找多個物理塊若索引表占用n塊,則平均要載入n/2個物理塊,才能找到所需記錄的物理地址可以建立索引的索引,稱為二級索引;或索引的索引的索引,即三級索引67UNIX/LINUX中的多級索引結(jié)構(gòu)每個FCB中規(guī)定了13個索引項(xiàng)前10項(xiàng)為直接索引11、12項(xiàng)為一次間接尋址13項(xiàng)為二次間接尋址小文件無需二次索引,超大文件可以用3級索引,文件最大可以到11億字節(jié)68UNIX/LINUX中的多重索引結(jié)構(gòu)6970大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)71文件空間管理的作用輔助存儲空間的有效分配和釋放創(chuàng)建和擴(kuò)充文件時,決定分配哪些磁盤塊是很重要的,這會影響磁盤訪問次數(shù)刪除文件和縮短文件時,需要回收磁盤塊隨著分配和回收,可能會出現(xiàn)碎片72常用磁盤空間管理方法位示圖空閑區(qū)表空閑塊鏈成組空閑塊鏈73位示圖法磁盤空間由固定大小的塊組成,可方便地使用位示圖管理。每一字位對應(yīng)于一個物理塊,字位值為1表示被占用,0表示空閑。優(yōu)點(diǎn):每個盤塊僅需一比特來標(biāo)識若盤塊長為1KB,則位示圖開銷為0.012%74空閑區(qū)表法常常用于連續(xù)文件,將空閑區(qū)存儲塊的位置及其連續(xù)空閑的塊數(shù)構(gòu)成一張表類似于內(nèi)存管理中的連續(xù)存儲管理分配時,依次掃描空閑區(qū)表,尋找合適的空閑塊并修改登記項(xiàng);刪除文件并釋放空閑區(qū)時,把空閑位置及連續(xù)空閑區(qū)長度填入空閑區(qū)表,出現(xiàn)鄰接的空閑區(qū)時,還需執(zhí)行合并操作搜索算法:最先適應(yīng)最佳適應(yīng)最壞適應(yīng)等75空閑塊鏈把所有空閑塊連接在一起,系統(tǒng)保持指針指向第一個空閑塊,每一空閑塊中包含指向下一個空閑塊的指針申請一個空閑塊時,從鏈頭取一塊并修改系統(tǒng)指針;刪除時釋放占用塊,使其成為空閑塊并掛到空閑鏈上76UNIX/Linux空閑塊成組連接法(1)存儲空間分成512字節(jié)一塊。假定文件卷啟用時共有可用空閑塊338塊,編號從12至349。每100塊劃分一組,每組第一塊登記下一組空閑塊的物理盤塊號和空閑總數(shù)。77
…………空閑塊數(shù)395049…1212空閑塊數(shù)100150149…51空閑塊數(shù)100250249…151空閑塊數(shù)1000349…251分配算法IF空閑塊數(shù)=1THENIF第一個單元=0THEN等待
ELSE復(fù)制第一個單元對應(yīng)塊到專用塊,并分配之ELSE分配第(空閑塊數(shù))個單元對應(yīng)塊,空閑塊數(shù)減1歸還算法IF空閑塊數(shù)<100THEN專用塊的空閑塊數(shù)加一,第(空閑塊數(shù))個單元置歸還塊號ELSE復(fù)制專用塊到歸還塊,專用塊的空閑塊數(shù)置一,第一單元置歸還塊號(磁盤)專用塊(主存)專用塊UNIX/Linux空閑塊成組連接法(2)78大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)79文件系統(tǒng)調(diào)用的實(shí)現(xiàn)創(chuàng)建和刪除文件打開和關(guān)閉文件讀/寫文件文件共享主存映射文件80文件系統(tǒng)內(nèi)部結(jié)構(gòu)主存i_numberi_counti_numberi_count…i_addr[40]
…i_numberi_count…i_addr[40]f_flagf_count…f_inode
file的指針fp
…用戶打開文件表files_struct文件描述符fd系統(tǒng)打開文件表file_struct一個打開文件的file活動inode活動inode主存活動inode表磁盤磁盤文件卷0#1#2#……………引導(dǎo)塊超級塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊磁盤文件81主存活動inode表磁盤inode記錄文件的屬性和相關(guān)信息,文件訪問過程會頻繁地用到它,因此頻繁地訪問輔存極不經(jīng)濟(jì)Linux/Unix在內(nèi)核開辟一張專用表,用于存儲經(jīng)常訪問的磁盤inode,以及一些動態(tài)信息,稱為主存inode表/活躍inode表82主存活動inode表
主存inode表包含:
磁盤inode的所有信息,如物理塊地址主存inode的狀態(tài)
Inode是否上鎖
Inode數(shù)據(jù)是否改變
文件數(shù)據(jù)是否改變
文件系統(tǒng)的邏輯設(shè)備號.inode號
引用數(shù):i_count83系統(tǒng)打開文件表
內(nèi)核有一個系統(tǒng)打開文件表,用于存放文件訪問信息
系統(tǒng)打開文件表中的每一個表項(xiàng)包括:
指向主存inode表的指針
下一次讀/寫文件的位移
打開進(jìn)程的訪問權(quán)限
引用計(jì)數(shù):f_count84用戶打開文件表每個進(jìn)程有一個用戶文件描述符表,用于描述所有打開的文件
每個用戶文件打開表中的表項(xiàng)都指向一個內(nèi)核系統(tǒng)文件打開表中的表項(xiàng)三個特殊的表項(xiàng)
Entry0:標(biāo)準(zhǔn)輸入Entry1:標(biāo)準(zhǔn)輸出Entry2:標(biāo)準(zhǔn)錯誤輸出85文件系統(tǒng)調(diào)用
--文件的創(chuàng)建
系統(tǒng)調(diào)用C語言格式為:
intfd,mode;char*filenamep;fd=create(filenamep,mode);
創(chuàng)建兼有打開功能86文件系統(tǒng)調(diào)用
--文件的創(chuàng)建①為新文件分配索引節(jié)點(diǎn)和活動索引節(jié)點(diǎn),并把索引節(jié)點(diǎn)編號與文件分量名組成新目錄項(xiàng),記到目錄中。②在新文件所對應(yīng)的活動索引節(jié)點(diǎn)中置初值,如置存取權(quán)限i_mode,連接計(jì)數(shù)i_nlink等。③分配用戶打開文件表項(xiàng)和系統(tǒng)打開文件表項(xiàng),置系統(tǒng)打開文件表項(xiàng)初值,如讀寫位移f_offset清0。④把各表項(xiàng)及文件對應(yīng)的活動索引節(jié)點(diǎn)用指針連接起來,把文件描述字fd返回給調(diào)用者。87文件系統(tǒng)調(diào)用
--文件的刪除
刪除的任務(wù):把指定文件從所在的目錄文件中去除。如果沒有連接用戶(i_link為1),還要把文件占用的存儲空間釋放。系統(tǒng)調(diào)用形式為:unlink(filenamep)。在執(zhí)行刪除時,必須要求用戶對該文件具有“寫”操作權(quán)。88文件系統(tǒng)調(diào)用
--文件的打開
調(diào)用方式為:
intfd,mode;char*filenamep;fd=open(filenamep,mode);89文件系統(tǒng)調(diào)用
--文件的打開①檢索目錄,把它的外存索引節(jié)點(diǎn)復(fù)制到活動索引節(jié)點(diǎn)表。②根據(jù)參數(shù)mode核對權(quán)限,如果非法,則這次打開失敗。③當(dāng)“打開”合法時,為文件分配用戶打開文件表項(xiàng)和系統(tǒng)打開文件表項(xiàng),并為系統(tǒng)打開文件表的表項(xiàng)設(shè)置初值。通過指針建立這些表項(xiàng)與活動索引節(jié)點(diǎn)間的聯(lián)系。把文件描述字,即用戶打開文件表中相應(yīng)文件表項(xiàng)的序號返回給調(diào)用者。90文件系統(tǒng)調(diào)用
--文件的打開如果執(zhí)行open()時,其它用戶已經(jīng)打開了同一文件,則活動inode表中已經(jīng)有此文件的inode,則無需執(zhí)行第①步的inode復(fù)制工作但需要將活動inode中的i_count加1i_count反映通過不同的系統(tǒng)打開文件表項(xiàng)來共享同一個活動inode的進(jìn)程數(shù)目是執(zhí)行文件關(guān)閉操作時,能否釋放活動inode節(jié)點(diǎn)的依據(jù)。91#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;printf("Beforeopen...\n");fd1=open(
"/etc/passwd",O_RDONLY);fd2=open("./openEx1.c",O_WRONLY);fd3=open(
"/etc/passwd",O_RDONLY);printf("fd1=%dfd2=%dfd3=%d\n",fd1,fd2,fd3);}$ccopenEx1.c-oopenEx1$openEx1Beforeopen...fd1=3fd2=4fd3=5$92…CNT=2/etc/passwdCNT=1./openEx2.c主存活動inode表文件描述符表指針用戶區(qū)用戶打開文件表01234567.........CNT=1RCNT=1W...CNT=1R系統(tǒng)打開文件表.........93文件系統(tǒng)調(diào)用
--文件的關(guān)閉
調(diào)用方式為:
intfd;close(fd);94文件系統(tǒng)調(diào)用
--文件的關(guān)閉①根據(jù)fd找到用戶打開文件表項(xiàng),再找到系統(tǒng)打開文件表項(xiàng),釋放用戶打開文件表項(xiàng)。②把對應(yīng)系統(tǒng)打開文件表項(xiàng)中的f_count減1,如果非0,說明進(jìn)程族中還有其它進(jìn)程共享這一表項(xiàng),不用釋放直接返回;否則釋放表項(xiàng),并找到與之連接的主動活動inode。③把活動inode中的i_count減1,若不為0,表明還有用戶進(jìn)程正在使用該文件,不用釋放而直接返回;否則在把該活動inode中的內(nèi)容復(fù)制回磁盤上的相應(yīng)inode后,釋放該活動inode。95文件系統(tǒng)調(diào)用f_count和i_count反映了進(jìn)程動態(tài)共享一個文件的兩種方式系統(tǒng)打開文件表中的f_count反映不同進(jìn)程通過同一個系統(tǒng)打開文件表項(xiàng)共享一個文件的情況進(jìn)程使用相同的位移指針f_offset共享文件
如fork()系統(tǒng)調(diào)用產(chǎn)生的父子進(jìn)程主存活動inode中的i_count反映不同進(jìn)程通過不同系統(tǒng)打開文件表項(xiàng)共享一個文件的情況進(jìn)程使用不同的位移指針f_offset共享文件96文件系統(tǒng)調(diào)用
--讀文件
調(diào)用的形式為:
intnr,fd,count;charbuf[];nr=read(fd,buf,count);97文件系統(tǒng)調(diào)用
--讀文件
系統(tǒng)根據(jù)f_flag中的信息,檢查讀操作合法性;若合法,按活動i_node中i_addr指出的文件物理塊存放地址,從文件當(dāng)前的位移量f_offset處開始,讀出所要求的count個字節(jié),存放到系統(tǒng)緩沖區(qū)中,然后再送到buf指向的用戶主存區(qū)中。98fdfp…f_flag(r/w)f_count(1)f_offset(0)f_inodei_mode(x)i_nlink(1)i_addr(40)系統(tǒng)打開文件表活動inode用戶打開文件表物理塊99#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;charbuf1[20],buf2[20];buf1[19]='\0';buf2[19]='\0';printf("=======\n");fd1=open("/etc/passwd",O_RDONLY);
read(fd1,buf1,19);printf("fd1=%dbuf1=%s\n",fd1,buf1);
read(fd1,buf2,19);printf("fd1=%dbuf2=%s\n",fd1,buf2);printf("=======\n");}$ccopenEx2.c-oopenEx2$openEx2=======fd1=3buf1=root:x:0:1:Super-Usfd1=3buf2=er:/:/sbin/shdaemo=======$100#include<stdio.h>#include<sys/types.h>#include<fcntl.h>main(){intfd1,fd2,fd3;charbuf1[20],buf2[20];buf1[19]='\0';buf2[19]='\0';printf("======\n");fd1=open("/etc/passwd",O_RDONLY);
fd2=open("/etc/passwd",O_RDONLY);read(fd1,buf1,19);printf("fd1=%dbuf1=%s\n",fd1,buf1);
read(fd2,buf2,19);printf("fd2=%dbuf2=%s\n",fd2,buf2);printf("======\n");}$ccopenEx3.c-oopenEx3$openEx3======fd1=3buf1=root:x:0:1:Super-Usfd2=4buf2=root:x:0:1:Super-Us======$兩次系統(tǒng)調(diào)用,創(chuàng)建了兩個系統(tǒng)打開文件表項(xiàng),每個都有自己的讀寫位移指針101…CNT=2/etc/passwd...主存活動inode表用戶打開文件表指針用戶區(qū)用戶打開文件表01234567.........CNT=1R......CNT=1R系統(tǒng)打開文件表.........102文件系統(tǒng)調(diào)用
--寫文件
調(diào)用的形式為:
nw=write(fd,buf,count);buf是信息傳送的源地址,即把buf所指向的用戶主存區(qū)中的信息,寫入到文件中。103文件系統(tǒng)調(diào)用
--文件的隨機(jī)存取系統(tǒng)調(diào)用的形式為:
longlseek;longoffset;intwhence,fd;lseek(fd,offset,whence);104文件系統(tǒng)調(diào)用
--文件的隨機(jī)存取
fd:文件描述字fd必須指向一個用讀或?qū)懛绞酱蜷_的文件offset:當(dāng)whence是0時,則f_offset被置為offset,即設(shè)置絕對位移當(dāng)whence是1時,則f_offset被置為文件當(dāng)前位置加上offset,即設(shè)置相對位移105文件共享文件的靜態(tài)共享文件的動態(tài)共享文件的符號鏈接共享
106文件的靜態(tài)共享一個文件同時屬于多個目錄,但實(shí)際上文件僅有一處物理存儲文件鏈接優(yōu)點(diǎn):節(jié)省空間文件的修改對任何用戶都可見,保證文件的一致性107文件的靜態(tài)共享系統(tǒng)調(diào)用形式為:
char*oldnamep,*newnamep;link(oldnamep,newnamep);①檢索目錄找到oldnamep所指向文件的索引節(jié)點(diǎn)inode編號。②再次檢索目錄找到newnamep所指文件的父目錄文件,并把已存在文件的索引節(jié)點(diǎn)inode編號與別名構(gòu)成一個目錄項(xiàng),記入到該目錄中去。③把已存在文件索引節(jié)點(diǎn)inode的連接計(jì)數(shù)i_nlink加“1”。108usrmyfilxyzhomefei1myfile.cfei3fei2Afei4fei5testfile.cB685.100
..941A270fei1250fei2770fei3270.685..302myfile.c250.685..302myfile.c770.685..345fei4565fei5345
.770..302testfile.c565.770..824Blink(“/home/fei1/myfile.c”,“/home/fei2/myfile.c”);link(“/home/fei1/myfile.c”,“/home/fei3/fei4/testfile.c”);109文件的靜態(tài)共享文件解除鏈接調(diào)用形式為:
unlink(namep)解除鏈接與文件刪除執(zhí)行的是同一系統(tǒng)調(diào)用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要刪去目錄項(xiàng),把i_nlink減1,不過,只有當(dāng)i_nlink減為0時,才真正刪除文件。
110文件的動態(tài)共享文件動態(tài)共享是系統(tǒng)中不同的用戶進(jìn)程或同一用戶的不同進(jìn)程并發(fā)訪問同一文件。這種共享關(guān)系只有當(dāng)用戶進(jìn)程存在時才可能出現(xiàn),一旦用戶的進(jìn)程消亡,其共享關(guān)系也就自動消失。文件的每次讀寫由一個讀/寫位移指針指出要讀寫的位置?,F(xiàn)在的問題是:應(yīng)讓多個進(jìn)程共用同一個讀/寫位移,還是各個進(jìn)程具有各自的讀寫位移呢?111文件的動態(tài)共享同一用戶父、子進(jìn)程協(xié)同完成任務(wù),使用同一讀/寫位移,同步地對文件進(jìn)行操
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版生態(tài)物流綠色包裝合同3篇
- 二零二五年度環(huán)保產(chǎn)品商標(biāo)使用許可協(xié)議范本3篇
- 科創(chuàng)孵化器項(xiàng)目建設(shè)方案
- 音樂舞蹈培訓(xùn)委托合同三篇
- 二零二五年度個人挖機(jī)租賃合同解除條件合同4篇
- 二零二五年度個人與個人房產(chǎn)購置借款協(xié)議2篇
- 2025版高端車庫租賃及個性化定制服務(wù)合同范本3篇
- 二零二五年度智能家居裝修設(shè)計(jì)與施工一體化協(xié)議書2篇
- 酒店餐飲美工的工作總結(jié)
- 二零二五年度個人電動車轉(zhuǎn)讓與充電設(shè)施安裝合同3篇
- 2024年陜西省中考道德與法治真題(A卷)(原卷版)
- 2024-2030年中國凈菜加工行業(yè)產(chǎn)能預(yù)測及投資規(guī)模分析報(bào)告版
- 2025年公司副總經(jīng)理述職報(bào)告范文
- 冬季道岔除雪作業(yè)
- 湖北省荊州市八縣市2023-2024學(xué)年高一上學(xué)期期末聯(lián)考數(shù)學(xué)試題 含解析
- 中小學(xué)校食品安全與膳食經(jīng)費(fèi)管理工作指引
- 電商平臺客服人員績效考核手冊
- 2024分布式光伏組件檢測標(biāo)準(zhǔn)
- 2024至2030年中國酒糟行業(yè)市場發(fā)展現(xiàn)狀及潛力分析研究報(bào)告
- 獅子王影視鑒賞
評論
0/150
提交評論