操作系統(tǒng)-文件系統(tǒng)_第1頁(yè)
操作系統(tǒng)-文件系統(tǒng)_第2頁(yè)
操作系統(tǒng)-文件系統(tǒng)_第3頁(yè)
操作系統(tǒng)-文件系統(tǒng)_第4頁(yè)
操作系統(tǒng)-文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩115頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1文件系統(tǒng)2本章教學(xué)目標(biāo)理解文件的概念理解文件目錄的概念和組織方式理解文件的邏輯結(jié)構(gòu)和組織方式掌握文件的物理結(jié)構(gòu)和組織方式理解文件空間管理的方法理解Linux文件系統(tǒng)中文件系統(tǒng)調(diào)用文件系統(tǒng)的問(wèn)題文件邏輯上的組織方式?

字節(jié)流形式?固定記錄長(zhǎng)度?可變記錄長(zhǎng)度文件的訪問(wèn)模式

順序訪問(wèn)?隨機(jī)訪問(wèn)?眾多的文件如何有序地進(jìn)行組織和管理?

文件目錄結(jié)構(gòu)文件如何進(jìn)行共享和保護(hù)?

訪問(wèn)控制權(quán)限文件在物理磁盤(pán)上如何存儲(chǔ)?如何分配物理磁盤(pán)的空間?

給定文件名和邏輯記錄號(hào)或邏輯塊號(hào),如何轉(zhuǎn)換到文件的物理位置?34大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)5文件系統(tǒng)文件系統(tǒng)的功能:文件的按名存取文件目錄的建立和維護(hù)文件的查找和定位文件存儲(chǔ)空間的分配和管理提供文件的存取方法和文件存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)文件的共享、保護(hù)和保密提供一組易用的文件操作和命令提供與設(shè)備管理交互的統(tǒng)一接口6文件的概念文件是操作系統(tǒng)對(duì)所存儲(chǔ)的信息對(duì)外提供的統(tǒng)一邏輯視圖文件由是由文件名標(biāo)識(shí)的一組存儲(chǔ)在二級(jí)存儲(chǔ)設(shè)備上的信息的集合從用戶的角度,文件是邏輯二級(jí)存儲(chǔ)設(shè)備最小的分配單元用戶按名存取文件,操作系統(tǒng)負(fù)責(zé)文件名到物理存儲(chǔ)位置的映射文件是由位串、連續(xù)的字節(jié)、行、或記錄構(gòu)成的集合,文件內(nèi)容的含義取決于文件創(chuàng)建者7文件類(lèi)型按用途分系統(tǒng)文件庫(kù)文件用戶文件按保護(hù)級(jí)別分只讀文件讀寫(xiě)文件不保護(hù)文件按數(shù)據(jù)類(lèi)型分源程序文件目標(biāo)文件可執(zhí)行文件8UNIX/Linux的文件類(lèi)型普通文件ASCII文件二進(jìn)制文件目錄文件由文件目錄所構(gòu)成的用來(lái)維護(hù)文件系統(tǒng)結(jié)構(gòu)的系統(tǒng)文件特別文件指各類(lèi)外部設(shè)備文件將所有I/O設(shè)備統(tǒng)一在文件系統(tǒng)下9文件名與文件類(lèi)型各個(gè)操作系統(tǒng)的文件命名規(guī)則略有不同文件名一般由文件名稱和擴(kuò)展名稱組成,兩者中間以”.”分割,如”myfile.doc,command.exe”文件名用于識(shí)別文件擴(kuò)展名用于區(qū)分文件類(lèi)型10文件名/filefoowho

date

.profile

由字符(除了/)構(gòu)成的字符串,有可能是大小寫(xiě)敏感的1112文件屬性文件名唯一用戶可讀的信息文件標(biāo)識(shí)文件系統(tǒng)內(nèi)的唯一標(biāo)識(shí)類(lèi)型普通文件、目錄文件、設(shè)備文件位置指向文件的位置,包括設(shè)備以及設(shè)備上的位置大小當(dāng)前長(zhǎng)度和允許的最大長(zhǎng)度權(quán)限訪問(wèn)控制信息,例如誰(shuí)可以讀、寫(xiě)、執(zhí)行文件等時(shí)間文件的創(chuàng)建時(shí)間,最后修改時(shí)間,最后使用時(shí)間等13文件屬性與文件相關(guān)的所有信息保存在文件目錄結(jié)構(gòu)中文件目錄通常包含文件名和文件標(biāo)識(shí)兩部分文件標(biāo)識(shí)用于定位其它屬性14文件操作創(chuàng)建文件(create)從文件系統(tǒng)中找到存放文件的空間(空間分配問(wèn)題)在目錄中為該文件添加新目錄項(xiàng)寫(xiě)文件(write)

給出文件名和需要寫(xiě)入文件的信息文件系統(tǒng)查找目錄,從文件目錄項(xiàng)中找到文件的位置文件系統(tǒng)保存了一個(gè)寫(xiě)指針,指出下一個(gè)寫(xiě)操作開(kāi)始的位置讀文件(read)給出文件名以及內(nèi)存地址,用于存放讀出的下一個(gè)文件塊文件系統(tǒng)查找目錄,找到對(duì)應(yīng)的文件目錄項(xiàng)系統(tǒng)保存一個(gè)讀指針,指出下一個(gè)讀操作開(kāi)始的位置讀指針每個(gè)進(jìn)程都不一樣15文件操作(cont)重定位(repositioning,seek)查找文件目錄,找到對(duì)應(yīng)的目錄項(xiàng),將當(dāng)前文件位置指針修改為給定的值文件重定位并不涉及真正的I/O操作刪除文件(delete)

查找文件目錄,找到給定文件名對(duì)應(yīng)的目錄項(xiàng)釋放文件所占用的所有空間刪除對(duì)應(yīng)的目錄項(xiàng)清空文件刪除文件內(nèi)容,但保留其屬性(長(zhǎng)度除外)16文件操作(cont)追加(appending)重命名(renaming)拷貝(copy)獲取和修改文件屬性(get/setattribute)17文件存取方法順序存取存取操作在上次的基礎(chǔ)上進(jìn)行系統(tǒng)設(shè)置讀寫(xiě)指針,指向要讀出或?qū)懭氲淖止?jié)位置或記錄位置。直接存取快速地以任意次序直接讀寫(xiě)某條記錄,對(duì)文件讀/寫(xiě)的次序沒(méi)有任何限制索引存取基于索引文件的存取方法用戶提供記錄名或記錄鍵,按名搜索,找到所需要的記錄索引存取(續(xù))例如,一個(gè)零售商品價(jià)格的文件每條記錄包含兩個(gè)部分UPC(商品代碼)--10字符長(zhǎng)

價(jià)格—6個(gè)字符存儲(chǔ)假設(shè)有1200000條記錄則文件大小為16*1200000=19.2M如何快速地讀取商品代碼為”2353765401”的價(jià)格?18索引存?。ɡm(xù))假設(shè)物理塊大小為1024字節(jié),則每個(gè)塊能存放1024/16=64個(gè)記錄一共需要18750個(gè)物理塊如果文件記錄按無(wú)序的方式存放,則平均需要檢索600000條記錄才能找到如果文件記錄按順序存放,并且為文件建立索引,索引的下標(biāo)表示邏輯塊號(hà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)為每個(gè)文件建立的唯一的管理數(shù)據(jù)結(jié)構(gòu),一般包括:文件標(biāo)識(shí)和控制信息文件名、用戶名、文件存取權(quán)限、訪問(wèn)控制權(quán)限、文件類(lèi)型等;文件邏輯結(jié)構(gòu)信息記錄類(lèi)型、記錄個(gè)數(shù)、記錄長(zhǎng)度、成組因子等;文件物理結(jié)構(gòu)信息文件所在設(shè)備名、文件物理結(jié)構(gòu)類(lèi)型、記錄存放在輔存中的塊號(hào)或文件信息首塊盤(pán)塊號(hào),文件索引的位置等;文件使用信息共享文件的進(jìn)程數(shù),文件修改情況,文件最大長(zhǎng)度和當(dāng)前大小文件管理信息文件建立日期,最近修改日期,最近訪問(wèn)日期等;24FCB基于FCB可以方便地實(shí)現(xiàn)文件的按名存取創(chuàng)建文件時(shí),為其建立一個(gè)FCB,用來(lái)記錄文件的屬性信息存取此文件時(shí),先找到其FCB,再找到文件信息盤(pán)塊號(hào)或首塊物理位置為了加快文件的查找速度,通常將FCB集中起來(lái)進(jìn)行管理,組成文件目錄25文件目錄文件目錄包含兩種目錄項(xiàng):文件的FCB

描述子目錄的目錄文件的FCB全部由目錄項(xiàng)構(gòu)成的文件稱為目錄文件目錄項(xiàng)的格式按統(tǒng)一標(biāo)準(zhǔn)定義目錄文件至少包含兩個(gè)目錄項(xiàng)當(dāng)前目錄項(xiàng)”.”

父目錄項(xiàng)”..”文件目錄的基本功能將文件名轉(zhuǎn)換成此文件信息在磁盤(pán)上的物理位置有效地組織和管理文件26目錄/fileetcusr

dmr

bin27文件路徑/file/usr/wm4/.profile

由從根目錄開(kāi)始沿著目錄結(jié)構(gòu)一直到文件的目錄項(xiàng)和文件名順序組合而成28工作目錄/file默認(rèn)情況下文件名所處的目錄29相對(duì)路徑/file

./.profile

../wm4/.profile

相對(duì)于當(dāng)前工作目錄的路徑

..referstoparentdirectory

.referstocurrentdirectory30目錄結(jié)構(gòu)單級(jí)目錄結(jié)構(gòu)兩級(jí)目錄結(jié)構(gòu)樹(shù)形目錄結(jié)構(gòu)DAG結(jié)構(gòu)圖結(jié)構(gòu)31單級(jí)目錄結(jié)構(gòu)所有用戶都共用一個(gè)目錄缺點(diǎn):名字易于重復(fù)用戶沒(méi)有獨(dú)立的目錄,不利于共享和保護(hù)32兩級(jí)目錄結(jié)構(gòu)33純樹(shù)形目錄結(jié)構(gòu)目錄可以有任意多的層次目錄可以包含子目錄,也可以包含文件每個(gè)文件只有一個(gè)父目錄文件共享較為困難34DAG目錄結(jié)構(gòu)一個(gè)文件可以有多個(gè)父目錄能較方便地實(shí)現(xiàn)文件的共享目錄結(jié)構(gòu)的維護(hù)較復(fù)雜需要為每個(gè)文件維護(hù)一個(gè)引用計(jì)數(shù),以記錄文件的父目錄個(gè)數(shù),僅當(dāng)引用計(jì)數(shù)值為1時(shí),刪除操作才真正刪除文件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ú)組成一個(gè)數(shù)據(jù)結(jié)構(gòu),稱為索引節(jié)點(diǎn)inode,其位置由inode號(hào)標(biāo)識(shí)每個(gè)文件或子目錄都在父目錄文件中有一條目錄項(xiàng)每個(gè)目錄項(xiàng)包含兩個(gè)字段

文件名

i-node號(hào):指出存放文件屬性信息的inode節(jié)點(diǎn)號(hào)每個(gè)磁盤(pán)塊可以存放幾十個(gè)基本目錄項(xiàng)41

I-node結(jié)構(gòu)modeownertimestampSizeBlockcountDirectblocks0-9DoubleindirectTripleindirectSingleindirectDatablockDatablockDatablockIndirectblock...DatablockDatablockDatablock...IndirectblockIndirectblockIndirectblock...Referencecount42inodeUnix/Linux操作系統(tǒng)對(duì)由文件目錄項(xiàng)組成的目錄文件和普通文件同等對(duì)待,均存放在磁盤(pán)中文件系統(tǒng)中的每個(gè)文件都有一個(gè)磁盤(pán)inode與之對(duì)應(yīng),這些inode存放在磁盤(pán)的inode區(qū)找到文件的inode就能找到文件在物理磁盤(pán)中的存放位置43目錄項(xiàng)、inode和數(shù)據(jù)塊的關(guān)系磁盤(pán)文件卷inode文件名inodeinode文件名inode磁盤(pán)文件0#1#2#……數(shù)據(jù)塊數(shù)據(jù)塊目錄塊…數(shù)據(jù)塊數(shù)據(jù)塊目錄塊引導(dǎo)塊磁盤(pán)inode區(qū)磁盤(pán)信息區(qū):目錄塊和數(shù)據(jù)塊inode……inode…超級(jí)塊44引導(dǎo)塊位于文件卷最開(kāi)始的第一扇區(qū),該512字節(jié)是文件系統(tǒng)的引導(dǎo)代碼,為根文件系統(tǒng)所特有,其他文件系統(tǒng)這512字節(jié)為空超級(jí)塊位于文件系統(tǒng)第二扇區(qū),緊跟引導(dǎo)塊之后,用于描述本文件系統(tǒng)的結(jié)構(gòu)和管理信息。如inode節(jié)點(diǎn)所占盤(pán)塊數(shù)、文件數(shù)據(jù)所占的盤(pán)塊數(shù)等磁盤(pán)inode區(qū)位于超級(jí)塊之后,長(zhǎng)度由超級(jí)塊中的inode所占盤(pán)塊數(shù)決定每個(gè)inode用于描述文件屬性中除文件名之外的屬性,包括文件的長(zhǎng)度、屬主、物理數(shù)據(jù)塊號(hào)等;數(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ù)存儲(chǔ)邏輯結(jié)構(gòu)從用戶的觀點(diǎn)出發(fā),研究用戶概念中的抽象的信息組織方式用戶可以觀察到的、可加以處理的數(shù)據(jù)集合相關(guān)數(shù)據(jù)的集合稱為邏輯文件物理結(jié)構(gòu)邏輯文件在物理存儲(chǔ)空間中的存放方法和組織關(guān)系物理文件被看成是相關(guān)物理塊的集合主存與物理存儲(chǔ)器進(jìn)行信息交換的物理單位是塊48文件的邏輯結(jié)構(gòu)流式文件又稱為無(wú)結(jié)構(gòu)文件文件內(nèi)的數(shù)據(jù)不再分記錄,而是看成字節(jié)流也可以看作是記錄就為1個(gè)字節(jié)的記錄式文件大多數(shù)現(xiàn)代操作系統(tǒng)如WINDOWS,UNIX,LINUX只提供流式文件由應(yīng)用程序自行根據(jù)字節(jié)重構(gòu)對(duì)應(yīng)用有意義的記錄49文件的邏輯結(jié)構(gòu)記錄式文件文件是一組記錄的集合例如職工的工資記錄構(gòu)成工資文件從操作系統(tǒng)的角度看,邏輯記錄是文件內(nèi)獨(dú)立的最小信息單位,每次總是為使用者存儲(chǔ)、檢索或更新一條邏輯記錄記錄式文件的記錄組織和使用方法記錄式順序文件記錄順序編號(hào),并被順序訪問(wèn)記錄式索引文件用索引表根據(jù)記錄鍵快速查找到相應(yīng)的記錄在文件中的位置50成組與分解邏輯記錄與物理塊之間的對(duì)應(yīng)關(guān)系一條邏輯記錄被存放到物理存儲(chǔ)器時(shí),可能會(huì)占用一塊或多塊,或者一個(gè)物理塊可以包含多條邏輯記錄成組:若干邏輯記錄合并成一組,寫(xiě)入一塊,每塊中的邏輯記錄的個(gè)數(shù)稱為成塊因子分解:從讀進(jìn)內(nèi)存緩沖區(qū)的物理塊中分解出邏輯記錄的過(guò)程51記錄成組與分解的處理過(guò)程邏輯記錄物理存儲(chǔ)區(qū)邏輯記錄1邏輯記錄2邏輯記錄3邏輯記錄K…物理記錄系統(tǒng)緩沖區(qū)用戶工作區(qū)52記錄格式記錄格式就是記錄內(nèi)數(shù)據(jù)的排列方式記錄格式分為:定長(zhǎng)記錄所有邏輯記錄具有相同的長(zhǎng)度記錄中的所有數(shù)據(jù)項(xiàng)的相對(duì)位置固定變長(zhǎng)記錄邏輯記錄長(zhǎng)度不等每條邏輯記錄的長(zhǎng)度在處理之前能預(yù)先確定跨塊記錄記錄長(zhǎng)度大于塊長(zhǎng)53記錄鍵能用于區(qū)別同一文件中其它邏輯記錄的數(shù)據(jù)項(xiàng),也稱為關(guān)鍵字或鍵能唯一標(biāo)識(shí)某條邏輯記錄的鍵稱為主鍵54大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)55文件的物理結(jié)構(gòu)文件系統(tǒng)需要提供將邏輯文件存儲(chǔ)到物理存儲(chǔ)設(shè)備上去的組織方式邏輯上連續(xù)的文件是否需要連續(xù)存放在物理存儲(chǔ)介質(zhì)上?文件的存取速度??jī)深?lèi)方法計(jì)算法通過(guò)對(duì)記錄鍵進(jìn)行計(jì)算,從而轉(zhuǎn)換成對(duì)應(yīng)的物理地址指針?lè)ㄔO(shè)置專門(mén)的指針,指明相應(yīng)記錄的物理地址或表達(dá)各個(gè)記錄之間的關(guān)聯(lián)56文件的物理結(jié)構(gòu)具體的文件物理結(jié)構(gòu)和組織方法順序文件/連續(xù)文件連接文件

FAT

索引文件57順序文件/連續(xù)文件文件中邏輯上連續(xù)的信息存放到物理介質(zhì)的相鄰物理塊上形成順序結(jié)構(gòu)文件控制塊FCB中保存第一個(gè)物理塊的地址和占用的總物理塊數(shù)可以對(duì)順序文件按記錄進(jìn)行排序,成為有序的順序文件優(yōu)點(diǎn):順序存取和隨機(jī)存取時(shí)速度較快缺點(diǎn)建立文件之前需要確定文件的長(zhǎng)度,以分配存儲(chǔ)空間修改、插入和添加文件記錄較為困難對(duì)于變長(zhǎng)記錄的處理很困難會(huì)產(chǎn)生外部碎片5859連接文件文件在物理上被組織成物理塊的鏈表,分配給一個(gè)文件的物理塊在空間上可能是分散的文件控制塊FCB給出第一個(gè)物理塊的地址每個(gè)塊的連接字指出文件的下一個(gè)物理塊位置當(dāng)連接字內(nèi)容為某個(gè)特殊值時(shí),表示文件至本塊結(jié)束pointerblock=6061連接文件(cont)優(yōu)點(diǎn):文件的邏輯順序獨(dú)立于存儲(chǔ)空間的物理塊順序易于記錄的增、刪、改易于文件擴(kuò)充缺點(diǎn)

僅適宜于順序存取

隨機(jī)存取速度慢,需要從頭開(kāi)始查找連接字與數(shù)據(jù)混放,破壞了數(shù)據(jù)塊的完整性連接字需要占用額外的空間62FAT連接文件的一個(gè)變種,用于克服連接字和數(shù)據(jù)混放的缺點(diǎn),提高隨機(jī)存取的速度把連接指針從數(shù)據(jù)塊中分離出來(lái),單獨(dú)建立一個(gè)指針數(shù)組PTRS[n],n為組成磁盤(pán)連接文件物理塊的總塊數(shù)每個(gè)PTRS[i]對(duì)應(yīng)于一個(gè)物理塊i,如果物理塊j在文件中緊跟物理塊i之后,則PTRS[i]=j文件控制塊FCB存放文件第一個(gè)物理塊的塊號(hào)指針數(shù)組保存在磁盤(pán)的一個(gè)專門(mén)區(qū)域,如0磁道的前k個(gè)塊為了縮短定位文件信息塊所需要的時(shí)間,可以把這些指針連續(xù)盤(pán)塊裝進(jìn)主存或高速緩存。假設(shè)4字節(jié)記錄磁盤(pán)塊號(hào),塊大小為1K,則當(dāng)k=100時(shí),可以記錄256×100=25600個(gè)數(shù)據(jù)塊的磁盤(pán)塊號(hào),即25,600,000字節(jié)大小的存儲(chǔ)空間6364索引文件為每個(gè)文件建立索引,給出邏輯記錄或邏輯塊號(hào)到物理塊號(hào)的映射索引表可以存放在文件控制塊中,也可以讓索引表作為物理塊單獨(dú)駐留在磁盤(pán)的任意位置,而FCB中僅包含索引表的地址優(yōu)點(diǎn)隨機(jī)存儲(chǔ)速度快便于信息的增、刪、改缺點(diǎn)索引表的空間開(kāi)銷(xiāo)6566索引文件(cont)當(dāng)記錄數(shù)目很多/文件很大時(shí),索引表本身要占用很多物理塊,則查找某個(gè)記錄鍵所對(duì)應(yīng)的索引項(xiàng)時(shí),可能需要查找多個(gè)物理塊若索引表占用n塊,則平均要載入n/2個(gè)物理塊,才能找到所需記錄的物理地址可以建立索引的索引,稱為二級(jí)索引;或索引的索引的索引,即三級(jí)索引67UNIX/LINUX中的多級(jí)索引結(jié)構(gòu)每個(gè)FCB中規(guī)定了13個(gè)索引項(xiàng)前10項(xiàng)為直接索引11、12項(xiàng)為一次間接尋址13項(xiàng)為二次間接尋址小文件無(wú)需二次索引,超大文件可以用3級(jí)索引,文件最大可以到11億字節(jié)68UNIX/LINUX中的多重索引結(jié)構(gòu)6970大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)71文件空間管理的作用輔助存儲(chǔ)空間的有效分配和釋放創(chuàng)建和擴(kuò)充文件時(shí),決定分配哪些磁盤(pán)塊是很重要的,這會(huì)影響磁盤(pán)訪問(wèn)次數(shù)刪除文件和縮短文件時(shí),需要回收磁盤(pán)塊隨著分配和回收,可能會(huì)出現(xiàn)碎片72常用磁盤(pán)空間管理方法位示圖空閑區(qū)表空閑塊鏈成組空閑塊鏈73位示圖法磁盤(pán)空間由固定大小的塊組成,可方便地使用位示圖管理。每一字位對(duì)應(yīng)于一個(gè)物理塊,字位值為1表示被占用,0表示空閑。優(yōu)點(diǎn):每個(gè)盤(pán)塊僅需一比特來(lái)標(biāo)識(shí)若盤(pán)塊長(zhǎng)為1KB,則位示圖開(kāi)銷(xiāo)為0.012%74空閑區(qū)表法常常用于連續(xù)文件,將空閑區(qū)存儲(chǔ)塊的位置及其連續(xù)空閑的塊數(shù)構(gòu)成一張表類(lèi)似于內(nèi)存管理中的連續(xù)存儲(chǔ)管理分配時(shí),依次掃描空閑區(qū)表,尋找合適的空閑塊并修改登記項(xiàng);刪除文件并釋放空閑區(qū)時(shí),把空閑位置及連續(xù)空閑區(qū)長(zhǎng)度填入空閑區(qū)表,出現(xiàn)鄰接的空閑區(qū)時(shí),還需執(zhí)行合并操作搜索算法:最先適應(yīng)最佳適應(yīng)最壞適應(yīng)等75空閑塊鏈把所有空閑塊連接在一起,系統(tǒng)保持指針指向第一個(gè)空閑塊,每一空閑塊中包含指向下一個(gè)空閑塊的指針申請(qǐng)一個(gè)空閑塊時(shí),從鏈頭取一塊并修改系統(tǒng)指針;刪除時(shí)釋放占用塊,使其成為空閑塊并掛到空閑鏈上76UNIX/Linux空閑塊成組連接法(1)存儲(chǔ)空間分成512字節(jié)一塊。假定文件卷啟用時(shí)共有可用空閑塊338塊,編號(hào)從12至349。每100塊劃分一組,每組第一塊登記下一組空閑塊的物理盤(pán)塊號(hào)和空閑總數(shù)。77

…………空閑塊數(shù)395049…1212空閑塊數(shù)100150149…51空閑塊數(shù)100250249…151空閑塊數(shù)1000349…251分配算法IF空閑塊數(shù)=1THENIF第一個(gè)單元=0THEN等待

ELSE復(fù)制第一個(gè)單元對(duì)應(yīng)塊到專用塊,并分配之ELSE分配第(空閑塊數(shù))個(gè)單元對(duì)應(yīng)塊,空閑塊數(shù)減1歸還算法IF空閑塊數(shù)<100THEN專用塊的空閑塊數(shù)加一,第(空閑塊數(shù))個(gè)單元置歸還塊號(hào)ELSE復(fù)制專用塊到歸還塊,專用塊的空閑塊數(shù)置一,第一單元置歸還塊號(hào)(磁盤(pán))專用塊(主存)專用塊UNIX/Linux空閑塊成組連接法(2)78大綱文件與文件系統(tǒng)文件目錄的組織方式文件的邏輯組織方式文件的物理組織方式文件空間管理方法文件系統(tǒng)調(diào)用的實(shí)現(xiàn)79文件系統(tǒng)調(diào)用的實(shí)現(xiàn)創(chuàng)建和刪除文件打開(kāi)和關(guān)閉文件讀/寫(xiě)文件文件共享主存映射文件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

…用戶打開(kāi)文件表files_struct文件描述符fd系統(tǒng)打開(kāi)文件表file_struct一個(gè)打開(kāi)文件的file活動(dòng)inode活動(dòng)inode主存活動(dòng)inode表磁盤(pán)磁盤(pán)文件卷0#1#2#……………引導(dǎo)塊超級(jí)塊磁盤(pán)inode區(qū)磁盤(pán)信息區(qū):目錄塊和數(shù)據(jù)塊磁盤(pán)文件81主存活動(dòng)inode表磁盤(pán)inode記錄文件的屬性和相關(guān)信息,文件訪問(wèn)過(guò)程會(huì)頻繁地用到它,因此頻繁地訪問(wèn)輔存極不經(jīng)濟(jì)Linux/Unix在內(nèi)核開(kāi)辟一張專用表,用于存儲(chǔ)經(jīng)常訪問(wèn)的磁盤(pán)inode,以及一些動(dòng)態(tài)信息,稱為主存inode表/活躍inode表82主存活動(dòng)inode表

主存inode表包含:

磁盤(pán)inode的所有信息,如物理塊地址主存inode的狀態(tài)

Inode是否上鎖

Inode數(shù)據(jù)是否改變

文件數(shù)據(jù)是否改變

文件系統(tǒng)的邏輯設(shè)備號(hào).inode號(hào)

引用數(shù):i_count83系統(tǒng)打開(kāi)文件表

內(nèi)核有一個(gè)系統(tǒng)打開(kāi)文件表,用于存放文件訪問(wèn)信息

系統(tǒng)打開(kāi)文件表中的每一個(gè)表項(xiàng)包括:

指向主存inode表的指針

下一次讀/寫(xiě)文件的位移

打開(kāi)進(jìn)程的訪問(wèn)權(quán)限

引用計(jì)數(shù):f_count84用戶打開(kāi)文件表每個(gè)進(jìn)程有一個(gè)用戶文件描述符表,用于描述所有打開(kāi)的文件

每個(gè)用戶文件打開(kāi)表中的表項(xiàng)都指向一個(gè)內(nèi)核系統(tǒng)文件打開(kāi)表中的表項(xiàng)三個(gè)特殊的表項(xiàng)

Entry0:標(biāo)準(zhǔn)輸入Entry1:標(biāo)準(zhǔn)輸出Entry2:標(biāo)準(zhǔn)錯(cuò)誤輸出85文件系統(tǒng)調(diào)用

--文件的創(chuàng)建

系統(tǒng)調(diào)用C語(yǔ)言格式為:

intfd,mode;char*filenamep;fd=create(filenamep,mode);

創(chuàng)建兼有打開(kāi)功能86文件系統(tǒng)調(diào)用

--文件的創(chuàng)建①為新文件分配索引節(jié)點(diǎn)和活動(dòng)索引節(jié)點(diǎn),并把索引節(jié)點(diǎn)編號(hào)與文件分量名組成新目錄項(xiàng),記到目錄中。②在新文件所對(duì)應(yīng)的活動(dòng)索引節(jié)點(diǎn)中置初值,如置存取權(quán)限i_mode,連接計(jì)數(shù)i_nlink等。③分配用戶打開(kāi)文件表項(xiàng)和系統(tǒng)打開(kāi)文件表項(xiàng),置系統(tǒng)打開(kāi)文件表項(xiàng)初值,如讀寫(xiě)位移f_offset清0。④把各表項(xiàng)及文件對(duì)應(yīng)的活動(dòng)索引節(jié)點(diǎn)用指針連接起來(lái),把文件描述字fd返回給調(diào)用者。87文件系統(tǒng)調(diào)用

--文件的刪除

刪除的任務(wù):把指定文件從所在的目錄文件中去除。如果沒(méi)有連接用戶(i_link為1),還要把文件占用的存儲(chǔ)空間釋放。系統(tǒng)調(diào)用形式為:unlink(filenamep)。在執(zhí)行刪除時(shí),必須要求用戶對(duì)該文件具有“寫(xiě)”操作權(quán)。88文件系統(tǒng)調(diào)用

--文件的打開(kāi)

調(diào)用方式為:

intfd,mode;char*filenamep;fd=open(filenamep,mode);89文件系統(tǒng)調(diào)用

--文件的打開(kāi)①檢索目錄,把它的外存索引節(jié)點(diǎn)復(fù)制到活動(dòng)索引節(jié)點(diǎn)表。②根據(jù)參數(shù)mode核對(duì)權(quán)限,如果非法,則這次打開(kāi)失敗。③當(dāng)“打開(kāi)”合法時(shí),為文件分配用戶打開(kāi)文件表項(xiàng)和系統(tǒng)打開(kāi)文件表項(xiàng),并為系統(tǒng)打開(kāi)文件表的表項(xiàng)設(shè)置初值。通過(guò)指針建立這些表項(xiàng)與活動(dòng)索引節(jié)點(diǎn)間的聯(lián)系。把文件描述字,即用戶打開(kāi)文件表中相應(yīng)文件表項(xiàng)的序號(hào)返回給調(diào)用者。90文件系統(tǒng)調(diào)用

--文件的打開(kāi)如果執(zhí)行open()時(shí),其它用戶已經(jīng)打開(kāi)了同一文件,則活動(dòng)inode表中已經(jīng)有此文件的inode,則無(wú)需執(zhí)行第①步的inode復(fù)制工作但需要將活動(dòng)inode中的i_count加1i_count反映通過(guò)不同的系統(tǒng)打開(kāi)文件表項(xiàng)來(lái)共享同一個(gè)活動(dòng)inode的進(jìn)程數(shù)目是執(zhí)行文件關(guān)閉操作時(shí),能否釋放活動(dòng)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主存活動(dòng)inode表文件描述符表指針用戶區(qū)用戶打開(kāi)文件表01234567.........CNT=1RCNT=1W...CNT=1R系統(tǒng)打開(kāi)文件表.........93文件系統(tǒng)調(diào)用

--文件的關(guān)閉

調(diào)用方式為:

intfd;close(fd);94文件系統(tǒng)調(diào)用

--文件的關(guān)閉①根據(jù)fd找到用戶打開(kāi)文件表項(xiàng),再找到系統(tǒng)打開(kāi)文件表項(xiàng),釋放用戶打開(kāi)文件表項(xiàng)。②把對(duì)應(yīng)系統(tǒng)打開(kāi)文件表項(xiàng)中的f_count減1,如果非0,說(shuō)明進(jìn)程族中還有其它進(jìn)程共享這一表項(xiàng),不用釋放直接返回;否則釋放表項(xiàng),并找到與之連接的主動(dòng)活動(dòng)inode。③把活動(dòng)inode中的i_count減1,若不為0,表明還有用戶進(jìn)程正在使用該文件,不用釋放而直接返回;否則在把該活動(dòng)inode中的內(nèi)容復(fù)制回磁盤(pán)上的相應(yīng)inode后,釋放該活動(dòng)inode。95文件系統(tǒng)調(diào)用f_count和i_count反映了進(jìn)程動(dòng)態(tài)共享一個(gè)文件的兩種方式系統(tǒng)打開(kāi)文件表中的f_count反映不同進(jìn)程通過(guò)同一個(gè)系統(tǒng)打開(kāi)文件表項(xiàng)共享一個(gè)文件的情況進(jìn)程使用相同的位移指針f_offset共享文件

如fork()系統(tǒng)調(diào)用產(chǎn)生的父子進(jìn)程主存活動(dòng)inode中的i_count反映不同進(jìn)程通過(guò)不同系統(tǒng)打開(kāi)文件表項(xiàng)共享一個(gè)文件的情況進(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中的信息,檢查讀操作合法性;若合法,按活動(dòng)i_node中i_addr指出的文件物理塊存放地址,從文件當(dāng)前的位移量f_offset處開(kāi)始,讀出所要求的count個(gè)字節(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)打開(kāi)文件表活動(dòng)inode用戶打開(kāi)文件表物理塊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)建了兩個(gè)系統(tǒng)打開(kāi)文件表項(xiàng),每個(gè)都有自己的讀寫(xiě)位移指針101…CNT=2/etc/passwd...主存活動(dòng)inode表用戶打開(kāi)文件表指針用戶區(qū)用戶打開(kāi)文件表01234567.........CNT=1R......CNT=1R系統(tǒng)打開(kāi)文件表.........102文件系統(tǒng)調(diào)用

--寫(xiě)文件

調(diào)用的形式為:

nw=write(fd,buf,count);buf是信息傳送的源地址,即把buf所指向的用戶主存區(qū)中的信息,寫(xiě)入到文件中。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必須指向一個(gè)用讀或?qū)懛绞酱蜷_(kāi)的文件offset:當(dāng)whence是0時(shí),則f_offset被置為offset,即設(shè)置絕對(duì)位移當(dāng)whence是1時(shí),則f_offset被置為文件當(dāng)前位置加上offset,即設(shè)置相對(duì)位移105文件共享文件的靜態(tài)共享文件的動(dòng)態(tài)共享文件的符號(hào)鏈接共享

106文件的靜態(tài)共享一個(gè)文件同時(shí)屬于多個(gè)目錄,但實(shí)際上文件僅有一處物理存儲(chǔ)文件鏈接優(yōu)點(diǎn):節(jié)省空間文件的修改對(duì)任何用戶都可見(jiàn),保證文件的一致性107文件的靜態(tài)共享系統(tǒng)調(diào)用形式為:

char*oldnamep,*newnamep;link(oldnamep,newnamep);①檢索目錄找到oldnamep所指向文件的索引節(jié)點(diǎn)inode編號(hào)。②再次檢索目錄找到newnamep所指文件的父目錄文件,并把已存在文件的索引節(jié)點(diǎn)inode編號(hào)與別名構(gòu)成一個(gè)目錄項(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)用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要?jiǎng)h去目錄項(xiàng),把i_nlink減1,不過(guò),只有當(dāng)i_nlink減為0時(shí),才真正刪除文件。

110文件的動(dòng)態(tài)共享文件動(dòng)態(tài)共享是系統(tǒng)中不同的用戶進(jìn)程或同一用戶的不同進(jìn)程并發(fā)訪問(wèn)同一文件。這種共享關(guān)系只有當(dāng)用戶進(jìn)程存在時(shí)才可能出現(xiàn),一旦用戶的進(jìn)程消亡,其共享關(guān)系也就自動(dòng)消失。文件的每次讀寫(xiě)由一個(gè)讀/寫(xiě)位移指針指出要讀寫(xiě)的位置?,F(xiàn)在的問(wèn)題是:應(yīng)讓多個(gè)進(jìn)程共用同一個(gè)讀/寫(xiě)位移,還是各個(gè)進(jìn)程具有各自的讀寫(xiě)位移呢?111文件的動(dòng)態(tài)共享同一用戶父、子進(jìn)程協(xié)同完成任務(wù),使用同一讀/寫(xiě)位移,同步地對(duì)文件進(jìn)行操

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論