版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
17:25:0616.1文件6.2文件目錄6.3文件組織與數(shù)據(jù)存儲6.4文件系統(tǒng)其他功能的實現(xiàn)第六章文件管理17:25:062一、文件的存儲二、文件的邏輯結構三、文件的物理結構6.3文件組織與數(shù)據(jù)存儲17:25:0631、卷一盤磁帶、一張光盤、一個硬盤分區(qū)或一張軟盤片都稱為一卷,卷是存儲介質的物理單位。一個卷可以保存一個文件或多個文件,也可以一個文件保存在多個卷上。物理卷和物理設備不總是一致的。一、文件的存儲(1)17:25:0642、塊(物理記錄)塊是存儲介質上連續(xù)信息所組成的一個區(qū)域,也叫做物理記錄。塊是主存儲器和輔助存儲設備進行信息交換的物理單位,每次總是交換一塊或整數(shù)塊信息。不同類型的存儲介質,塊的長短常常各不相同;同一類型的存儲介質,塊的長短也可以不同。一、文件的存儲(2)17:25:0651、文件組織文件組織指文件中信息的配置和構造方式,應該從文件的邏輯結構和組織及文件的物理結構和組織兩方面考慮。二、文件的邏輯結構(1)17:25:0662、文件的邏輯結構文件的邏輯結構和組織是從用戶觀點出發(fā),研究用戶概念中的信息組織方式,這是用戶能觀察到,可加以處理的數(shù)據(jù)集合。數(shù)據(jù)可獨立于物理環(huán)境構造。相關數(shù)據(jù)的集合構成邏輯文件。3、文件的邏輯結構形式分兩種形式:流式文件記錄式文件二、文件的邏輯結構(2)17:25:0674、流式文件(字節(jié)流文件)指文件內的數(shù)據(jù)不再組成記錄,只是依次的一串信息集合,可以看成是只有一個記錄的記錄式文件。大多數(shù)現(xiàn)代操作系統(tǒng)對用戶僅僅提供流式文件,記錄式文件往往由高級語言或數(shù)據(jù)庫管理系統(tǒng)提供。二、文件的邏輯結構(3)17:25:0685、流式文件的操作文件常按長度來讀取所需信息,也可用插入特殊字符作為分界。1)從指定的位置讀寫若干字節(jié),讀寫之后讀寫位置指針自動后移所讀字節(jié)數(shù)的距離fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);在文件fp中和buffer之間交換size×count個字節(jié)2)改變讀寫指針值fseek(文件描述符,位移量,起始點):讀寫指針置于文件位移量+起始點rewind(文件描述符):讀寫指針置于文件開頭二、文件的邏輯結構(4)17:25:0696、記錄式文件是一種有結構的文件,包含若干邏輯記錄,邏輯記錄是文件中按信息在邏輯上的獨立含意劃分的信息單位。邏輯記錄的概念被應用于許多場合,特別象數(shù)據(jù)庫管理系統(tǒng)中已是必不可少的了。如單位職工工資文件、學生信息文件、儲戶信息文件等二、文件的邏輯結構(5)17:25:06107、記錄式文件分類1)記錄式順序文件:訪問該類文件時給出文件名和記錄號2)記錄式索引順序文件:該類文件建立有索引表,表項包含記錄鍵和索引指針,記錄鍵由應用程序指定,索引指針指向記錄。執(zhí)行讀取操作時給出文件名和記錄鍵,返回指定記錄執(zhí)行寫操作時給出文件名和記錄鍵,系統(tǒng)在所選擇的文件位置處插入記錄并建立索引表項二、文件的邏輯結構(6)17:25:06118、成組和分解1)邏輯記錄和塊的關系(如同頁和內存物理塊的關系)邏輯記錄是按信息在邏輯上的獨立含義劃分的單位,塊是存儲介質上連續(xù)信息所組成的區(qū)域。一個邏輯記錄被存放到文件存儲器的存儲介質上時,可能占用一塊或多塊,也可以一個物理塊包含多個邏輯記錄。二、文件的邏輯結構(7)17:25:06122)記錄成組若干個記錄合并成一組,寫入一個塊叫做記錄成組,這時每塊中的邏輯記錄的個數(shù)稱塊因子。成組操作的過程:先在系統(tǒng)輸出緩沖區(qū)內湊滿一塊后才將緩沖區(qū)內信息寫到存儲介質上。3)記錄分解當存儲介質上的一個物理塊讀進系統(tǒng)輸入緩沖區(qū)后,把邏輯記錄從塊中分離出來的操作叫記錄的分解。記錄成組和分解處理節(jié)省存儲空間,減少I/O次數(shù)。二、文件的邏輯結構(8)17:25:0613二、文件的邏輯結構(9)邏輯記錄1邏輯記錄2邏輯記錄3物理記錄邏輯記錄用戶緩沖區(qū)系統(tǒng)緩沖區(qū)記錄成組和分解處理過程17:25:06149、記錄格式
格式F:定長記錄格式V:變長記錄格式S:跨塊記錄10、記錄鍵主鍵,次鍵單鍵記錄,多鍵記錄二、文件的邏輯結構(10)17:25:0615文件和數(shù)據(jù)的邏輯結構是面向用戶和應用程序的。1、文件的物理結構和組織是指邏輯文件在物理存儲空間中存放方法和組織關系。這時文件看作為物理文件,即相關物理塊的集合。文件的存儲結構涉及:塊的劃分、記錄的排列、索引的組織、信息的搜索,其優(yōu)劣直接影響文件系統(tǒng)的性能。三、文件的物理結構(1)17:25:06162、構造文件物理結構的方法1)第一類計算法設計映射算法,通過線性計算法、雜湊法等,以記錄鍵的計算結果作為對應的物理塊地址,找到所需記錄。直接尋址文件、計算尋址文件、順序文件均屬此類。2)第二類指針法設置專門指針,指明相應記錄的物理地址或表達各記錄之間的關聯(lián)。索引文件、索引順序文件、連接文件等均屬此類。三、文件的物理結構(2)17:25:06173、順序文件(連續(xù)文件)一個文件中邏輯上連續(xù)的信息存放到存儲介質的相鄰物理塊上便形成順序文件(連續(xù)文件)。順序文件是邏輯記錄順序和物理記錄順序完全一致的文件,通常,記錄按出現(xiàn)的次序被讀出或修改。FCB中保存第一個物理塊地址和文件信息塊的總塊數(shù)。一切存于磁帶上的文件都只能是順序文件,卡片機、打印機、紙帶機上的文件也屬于順序文件。存儲在磁盤上的文件也可以組織成順序文件。三、文件的物理結構(3)17:25:0618順序文件的優(yōu)點:順序存取記錄時速度較塊。順序文件的缺點:建立文件前需要預知文件長度,修改、插入和增加文件記錄有困難,對直接存儲器作連續(xù)分配會造成空閑塊的浪費。順序文件變種緊湊順序文件:邏輯記錄連續(xù)地存儲在存儲介質的相鄰物理塊上的文件,插入和刪除要移動大量記錄。擴展順序文件:在文件內設有空白區(qū)域以備預先估計的添加記錄使用。連接順序文件:文件中設置溢出區(qū),添加的記錄通過連接方法保存到溢出區(qū)中。三、文件的物理結構(4)17:25:0619劃分順序文件:在直接存取設備上模擬順序文件的一種方法。把一個文件劃分成幾個能獨立存取的順序子文件。每個文件由數(shù)據(jù)區(qū)和索引區(qū)組成,數(shù)據(jù)區(qū)內存放各個子文件,索引區(qū)內存放各個子文件的索引,包括名字、地址、長度和狀態(tài)等。三、文件的物理結構(5)17:25:06204、連接文件(串聯(lián)文件)連接文件使用連接字,又叫指針來表示文件中各個記錄之間的關系。第一塊文件信息的物理地址由文件目錄給出。每一塊的連接字指出文件下一個物理塊位置。三、文件的物理結構(6)文件目錄項……017:25:0621連接文件(串聯(lián)文件)的優(yōu)缺點優(yōu)點不要求物理塊連續(xù),便于增、刪、改。缺點僅適宜于順序存取。三、文件的物理結構(7)17:25:0622三、文件的物理結構(8)1811130PTRS[6]=18、PTRS[18]=11、PTRS[11]=13、PTRS[13]=NULLFCB→6123456187891011131213NULL141516171811PTRS17:25:06235、直接文件(哈希文件)記錄的關鍵字與其地址間可通過某種方式建立對應關系,利用這種關系實現(xiàn)存取的文件叫直接文件。技術:散列法或雜湊法,以關鍵字為自變量,以物理地址為因變量構造映射函數(shù)實現(xiàn)難點:沖突,不同的關鍵字映射到同樣的物理地址。沖突解決方法:順序探查法兩次散列法拉鏈法獨立溢出區(qū)三、文件的物理結構(9)17:25:06246、索引文件索引結構是實現(xiàn)非連續(xù)存儲的另一種方法,適用于數(shù)據(jù)記錄保存在隨機存取存儲設備上的文件。系統(tǒng)為每個文件建立一張索引表,每個表目包含一個記錄的鍵(或邏輯記錄號)及其記錄數(shù)據(jù)的存儲地址,這類文件稱索引文件。索引文件在文件存儲器上分兩個區(qū):索引區(qū)和數(shù)據(jù)區(qū)。FCB可存放索引表或其地址三、文件的物理結構(10)17:25:0625三、文件的物理結構(11)…盤塊號…文件控制塊(a)無鍵索引表塊塊塊兩種索引文件結構示意圖…Key1記錄鍵盤塊號Key2……KeyN塊塊塊(b)有鍵索引表文件控制塊17:25:0626訪問索引文件需兩步操作:第一步查找文件索引第二步以相應鍵登記項內容作為地址而獲得記錄數(shù)據(jù)。索引文件的優(yōu)點:不要求物理塊連續(xù),便于直接存取,便于文件的增、刪、改。索引文件的缺點:增加了索引表的空間開銷和查找時間。三、文件的物理結構(12)17:25:0627索引文件中的索引項分為兩類一類是稠密索引,即對每個數(shù)據(jù)記錄,在索引表里都有一個索引項。另一類是稀疏索引,它對每一組數(shù)據(jù)記錄有一索引項。索引順序文件索引順序文件與索引文件結構類似,不同之處在于索引表不是為每個記錄建立一個表項,而是為一組記錄建立一個表項。三、文件的物理結構(13)17:25:0628索引順序文件能象順序文件一樣進行快速順序處理,既允許按物理存放次序(記錄出現(xiàn)的次序);也允許按邏輯順序(由記錄主鍵決定的次序)進行處理。當索引表很大時,索引表占的物理塊數(shù)也會很多,這就需要為索引表再建索引表,形成多級索引分配結構。三、文件的物理結構(14)17:25:06297、UNIX/Linux多重索引結構UNIX/Linux采用了多重索引結構,可以同時采用一級、二級、三級索引分配結構,以滿足不同大小文件的需要。每個文件的索引表為13個索引項,每項4個字節(jié),登記一個存放文件信息的物理塊號。最前面10項直接登記存放文件信息的物理塊號,叫直接尋址。三、文件的物理結構(15)17:25:0630如果文件大于10塊,則利用第11項指向一個物理塊,該塊中最多可放256個文件物理塊的塊號,叫做一次間接尋址。對于更大的文件還可利用第12和第13項作為二次和三次間接尋址。UNIX/Linux采用了三級索引結構后,文件最大可達16兆個物理塊。10+256+256^2+256^3三、文件的物理結構(16)三、文件的物理結構(17)01234567891011120…127……0…1270…1270…127…………0…1270…1270…127…0…1270…127…0…1270…127………………………UNIX/Linux多重索引結構17:25:0632三、文件的物理結構(18)文件名索引節(jié)點號文件19文件26文件33文件48文件510文件長度其它屬性addr[0]addr[1]……addr[9]addr[10]addr[11]addr[12]123…n基本目錄項表索引節(jié)點表基本目錄項表索引節(jié)點表磁盤文件區(qū)…………………………三次間址17:25:0633一、文件系統(tǒng)調用的實現(xiàn)二、文件共享三、文件空間管理四、內存映射文件五、虛擬文件系統(tǒng)6.4文件系統(tǒng)其他功能的實現(xiàn)17:25:06341、文件系統(tǒng)調用種類文件系統(tǒng)提供給用戶程序的一組系統(tǒng)調用包括:建立打開關閉撤銷讀寫控制通過這些系統(tǒng)調用用戶能獲得文件系統(tǒng)的各種服務。一、文件系統(tǒng)調用的實現(xiàn)(1)17:25:06352、打開文件表(外存目錄的緩沖)為了避免重復訪問外存查找文件,系統(tǒng)把常用和正在使用的那些文件目錄復制進主存。系統(tǒng)為每個用戶進程建立一張內存打開文件表,也稱活動文件表,打開文件時,把該文件的目錄復制到打開文件表中。當不再使用該文件時,使用“關閉”操作切斷用戶進程和該文件目錄的聯(lián)系。同時,若該目錄已被修改過,則應更新輔存中對應的文件目錄。一、文件系統(tǒng)調用的實現(xiàn)(2)17:25:06363、Linux文件系統(tǒng)磁盤組織結構
Linux文件系統(tǒng)將磁盤分為3個功能區(qū):1)超級塊:占用1#號塊,存放文件系統(tǒng)的結構和管理信息,如記錄:inode表所占的盤塊數(shù)文件數(shù)據(jù)所占的盤塊數(shù)主存中登記的空閑塊的物理塊號主存中登記的空閑inode數(shù)主存中登記的空閑inode編號等一、文件系統(tǒng)調用的實現(xiàn)(3)17:25:06372)索引節(jié)點區(qū):2#~(k+1)#塊,存放inode表,每個文件都有一個inode,所有inode大小相同。3)數(shù)據(jù)區(qū):(k+2)#~n#為數(shù)據(jù)塊,存儲文件內容。一、文件系統(tǒng)調用的實現(xiàn)(4)磁盤磁盤文件卷0#1#2#……………引導塊超級塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊磁盤文件磁盤組織結構17:25:0638一、文件系統(tǒng)調用的實現(xiàn)(5)磁盤文件卷inode文件名inodeinode文件名inode磁盤文件0#1#2#……數(shù)據(jù)塊數(shù)據(jù)塊目錄塊…數(shù)據(jù)塊數(shù)據(jù)塊目錄塊引導塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊inode……inode…超級塊目錄項、inode和數(shù)據(jù)塊的關系17:25:06394、兩個重要數(shù)據(jù)結構1)用戶打開文件表進程PCB結構中保留一個files_struct,稱為用戶打開文件表或文件描述符表。表項的序號是文件描述符fd,每項登記了系統(tǒng)打開文件表的入口指針fp。通過此系統(tǒng)打開文件表項連接到打開文件的活動inode節(jié)點。一、文件系統(tǒng)調用的實現(xiàn)(6)17:25:0640一、文件系統(tǒng)調用的實現(xiàn)(7)…………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=2讀寫位移f_offset索引節(jié)點指針f_inode=10………………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count讀寫位移f_offset索引節(jié)點指針f_inode=18…………2130用戶進程10…21045…80255……2180用戶進程2089用戶打開文件表用戶打開文件表系統(tǒng)打開文件表…………讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=120……讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=300…………0…1899活動inode表3010………OS……兩個進程通過相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0641一、文件系統(tǒng)調用的實現(xiàn)(8)…………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=1讀寫位移f_offset索引節(jié)點指針f_inode=10………………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=1讀寫位移f_offset索引節(jié)點指針f_inode=10…………2130用戶進程10…21045…80255……1280用戶進程2089用戶打開文件表用戶打開文件表系統(tǒng)打開文件表…………讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=2物理地址i_addr[40]索引節(jié)點號i_number=120……讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=300…………0…1899活動inode表3010………OS……兩個進程通過不相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0642一、文件系統(tǒng)調用的實現(xiàn)(9)用戶進程1用戶進程2用戶打開文件表用戶打開文件表系統(tǒng)打開文件表活動inode表OS兩個進程通過不相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0643一、文件系統(tǒng)調用的實現(xiàn)(10)用戶進程1用戶進程2用戶打開文件表用戶打開文件表系統(tǒng)打開文件表活動inode表OS兩個進程通過相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:06442)系統(tǒng)打開文件表為解決多用戶進程共享文件、父子進程共享文件而設置的數(shù)據(jù)結構file_struct,內存開辟了最多可登記256項的系統(tǒng)打開文件表區(qū)域。打開文件時,通過此表項把用戶打開文件表的表項與文件活動inode連接起來,實現(xiàn)數(shù)據(jù)訪問和信息共享。一、文件系統(tǒng)調用的實現(xiàn)(11)17:25:0645一、文件系統(tǒng)調用的實現(xiàn)(12)主存i_numberi_counti_numberi_count…i_addr[40]…i_numberi_count…i_addr[40]f_flagf_count…f_inode
…用戶打開文件表files_struct文件描述符fd系統(tǒng)打開文件表file_struct一個打開文件的file活動inode活動inode主存活動inode表磁盤磁盤文件卷0#1#2#……………引導塊超級塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊磁盤文件file的指針fp用戶空間內核空間文件系統(tǒng)內部結構17:25:06465、建立文件1)系統(tǒng)調用C語言格式intfd,mode;char*filenamep;fd=creat(filenamep,mode);功能:以mode規(guī)定的方式建立文件filenamep,若成功,則返回文件描述符fd一、文件系統(tǒng)調用的實現(xiàn)(13)17:25:0647參數(shù):filenamep—文件名路徑字符串指針mode—存取權限,創(chuàng)建成功后,存取權限記錄在相應索引節(jié)點的i_mode中,fd—文件描述符,即用戶打開文件表中相應文件表項的序號如fd=creat(“/home/home1/newfile”,0775);一、文件系統(tǒng)調用的實現(xiàn)(14)17:25:06482)建立系統(tǒng)調用的主要工作①為新文件newfile分配磁盤索引節(jié)點inode和活動索引節(jié)點inode,并把索引節(jié)點inode編號與文件分量名newfile組成新目錄項,記到目錄/home/home1中。②在新文件所對應的活動索引節(jié)點inode中置初值,如置存取權限i_mode為0775,連接計數(shù)i_nlink置為1等。③為新文件分配用戶打開文件表項和系統(tǒng)打開文件表項,置表項初值,如f_flag置寫標志,讀寫位移f_offset清“0”。一、文件系統(tǒng)調用的實現(xiàn)(15)17:25:0649④把用戶打開文件表項和系統(tǒng)打開文件表項及文件對應的活動索引節(jié)點用指針連接起來,把文件描述字fd返回給調用者。一、文件系統(tǒng)調用的實現(xiàn)(16)17:25:06506、刪除文件1)刪除系統(tǒng)調用形式為:unlink(filenamep)功能:如果所有用戶不再使用文件filenamep,則刪除之;否則,使用該文件的用戶數(shù)減1參數(shù):filenamep—文件名路徑字符串指針2)刪除過程把指定文件從所在的目錄文件中除去。如果沒有連接用戶(i_link為“1”),還要把文件占用的存儲空間釋放。在執(zhí)行刪除時,必須要求用戶對該文件具有“寫”操作權。一、文件系統(tǒng)調用的實現(xiàn)(17)17:25:06517、打開文件1)調用方式
intfd,mode;char*filenamep;fd=open(filenamep,mode);功能:以mode規(guī)定的方式打開文件filenamep準備操作參數(shù):filenamep—文件名路徑字符串指針mode—打開方式:讀(0)、寫(1)或讀寫(2)fd—文件描述符一、文件系統(tǒng)調用的實現(xiàn)(18)17:25:06522)打開過程若該文件未被打開,則執(zhí)行以下步驟:①檢索目錄,把它的外存索引節(jié)點復制到內存活動索引節(jié)點表。②根據(jù)參數(shù)mode核對權限,如果非法,則這次打開失敗。③當“打開”合法時,為文件分配用戶打開文件表項和系統(tǒng)打開文件表項,并為表項設置初值。通過指針建立這些表項與活動索引節(jié)點間的聯(lián)系。把文件描述字,即用戶打開文件表中相應文件表項的序號返回給調用者。一、文件系統(tǒng)調用的實現(xiàn)(19)17:25:0653若該文件已經被其它進程打開,則不執(zhí)行步驟①,僅把活動inode中的計數(shù)器i_count加1即可。i_count反映通過不同的系統(tǒng)打開文件表項來共享同一活動inode的進程數(shù)目,它是以后執(zhí)行文件關閉操作時,活動inode能否被釋放的依據(jù)。一、文件系統(tǒng)調用的實現(xiàn)(20)17:25:06548、關閉文件1)調用方式調用方式為:
intfd;close(fd);功能:關閉文件fd,不再操作參數(shù):fd—文件描述符一、文件系統(tǒng)調用的實現(xiàn)(21)17:25:06552)關閉過程①根據(jù)fd找到用戶打開文件表項,再找到系統(tǒng)打開文件表項。釋放用戶打開文件表項。②把對應系統(tǒng)打開文件表項中的f_count減“1”,如果非“0”,說明還有進程共享這一表項,不用釋放直接返回;否則釋放表項。③把活動索引節(jié)點中的i_count減“1”,若不為“0”,表明還有用戶進程正在使用該文件,不用釋放而直接返回,否則在把該活動索引節(jié)點中的內容復制回文件卷上的相應磁盤索引節(jié)點中后,釋放該活動索引節(jié)點。一、文件系統(tǒng)調用的實現(xiàn)(22)17:25:0656一、文件系統(tǒng)調用的實現(xiàn)(7)…………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=2讀寫位移f_offset索引節(jié)點指針f_inode=10………………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count讀寫位移f_offset索引節(jié)點指針f_inode=18…………2130用戶進程10…21045…80255……2180用戶進程2089用戶打開文件表用戶打開文件表系統(tǒng)打開文件表…………讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=120……讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=300…………0…1899活動inode表3010………OS……兩個進程通過相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0657一、文件系統(tǒng)調用的實現(xiàn)(8)…………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=1讀寫位移f_offset索引節(jié)點指針f_inode=10………………讀/寫f_falg以相同的讀寫位移共享該文件的進程數(shù)f_count=1讀寫位移f_offset索引節(jié)點指針f_inode=10…………2130用戶進程10…21045…80255……1280用戶進程2089用戶打開文件表用戶打開文件表系統(tǒng)打開文件表…………讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=2物理地址i_addr[40]索引節(jié)點號i_number=120……讀/寫i_mode以不相同的讀寫位移共享該文件的進程數(shù)i_count=1物理地址i_addr[40]索引節(jié)點號i_number=120…………0…1899活動inode表3010………OS……兩個進程通過不相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0658f_count和i_count分別反映進程動態(tài)地共享一個文件的兩種方式,f_count反映不同進程通過同一個系統(tǒng)打開文件表項共享一個文件的情況,這時,不同進程使用相同的讀寫位移指針f_offseti_count反映不同進程通過不同系統(tǒng)打開文件表項共享一個文件的情況,這時,不同進程使用不同的讀寫位移指針f_offset一、文件系統(tǒng)調用的實現(xiàn)(23)17:25:0659一、文件系統(tǒng)調用的實現(xiàn)(24)9、文件的讀/寫讀文件—將文件內容加載到用戶數(shù)據(jù)區(qū)寫文件—將用戶數(shù)據(jù)區(qū)得信息寫入文件文件的讀寫位置由系統(tǒng)打開文件表中的f_offset決定17:25:0660一、文件系統(tǒng)調用的實現(xiàn)(25)1)讀文件系統(tǒng)調用形式
intnr,fd,count;charbuf[];nr=read(fd,buf,count);功能:從文件fd從讀取count個字節(jié)到內存buf中參數(shù):fd—文件描述符buf—讀出信息應送達的內存地址count—欲讀出的字節(jié)數(shù)nr—實際讀出的字節(jié)數(shù),可能小于欲讀出的字節(jié)數(shù)count17:25:0661一、文件系統(tǒng)調用的實現(xiàn)(26)2)讀過程系統(tǒng)根據(jù)f_flag中的信息,檢查讀操作合法性再根據(jù)當前位移量f_offset值,要求讀出的字節(jié)數(shù)count,及活動索引節(jié)點中i_addr指出的文件物理塊存放地址,把相應的物理塊讀到塊設備緩沖區(qū)中然后再送到用戶主存區(qū)buf中17:25:0662一、文件系統(tǒng)調用的實現(xiàn)(27)fdfp…f_flag(r/w)f_count(1)i_mode(x)f_flag(r/w)f_count(1)f_flag(r/w)f_count(1)f_offset(0)f_inode讀操作時文件數(shù)據(jù)結構的關系文件描述符用戶打開文件表活動inode表物理塊系統(tǒng)打開文件表i_nlink(1)i_addr(40)OS內核空間用戶空間外存17:25:0663一、文件系統(tǒng)調用的實現(xiàn)(28)3)寫文件系統(tǒng)調用形式nw=write(fd,buf,count);功能:將用戶主存區(qū)buf中的count個字節(jié)信息寫入文件fd中,返回實際寫入的字節(jié)數(shù)nw17:25:0664一、文件系統(tǒng)調用的實現(xiàn)(29)10、文件的隨機存取系統(tǒng)調用的形式
longlseek;longoffset;intwhence,fd;fd=open(filename,mode);或者fd=creat(filename,mode);lseek(fd,offset,whence);功能:將文件fd的讀寫位置指針f_offset移動到offset和whence規(guī)定的位移處17:25:0665一、文件系統(tǒng)調用的實現(xiàn)(30)當whence=0時,讀寫位置指針f_offset=offset當whence=1時,讀寫位置指針f_offset=f_offset+offset17:25:0666二、文件共享(1)1、文件共享指不同用戶(進程)共同使用同一個文件。目的:不同進程完成共同任務,節(jié)省輔存空間,減少文件復制,從而減少I/O操作次數(shù),避免多副本造成數(shù)據(jù)不一致文件共享的形式:1)靜態(tài)共享2)動態(tài)共享3)符號鏈接共享17:25:0667二、文件共享(2)2、文件的靜態(tài)共享1)靜態(tài)共享含義允許一個文件同時屬于多個目錄,但實際上文件僅有一處物理存儲,這種文件在物理上一處存儲、從多個目錄可到達該文件的“多對一關系”稱為文件鏈接特征:靜態(tài)共享的“靜態(tài)”體現(xiàn)在文件的鏈接關系與進程是否運行無關17:25:0668二、文件共享(3)2)靜態(tài)共享的實現(xiàn)策略將不同目錄的索引結點inode號指定為同一文件的索引結點鏈接的實質就是共享已存在文件的inode17:25:0669二、文件共享(4)3)靜態(tài)共享的實現(xiàn)文件鏈接的系統(tǒng)調用形式:
chat*oldnamep,*newnamep;link(oldnamep,newnamep);功能:將新文件newnamep與現(xiàn)存文件oldnamep鏈接17:25:0670二、文件共享(5)過程:①檢索目錄找到oldnamep所指向文件的索引節(jié)點inode編號。②再次檢索目錄找到newnamep所指文件的父目錄文件,并把已存在文件的索引節(jié)點inode編號與別名構成一個目錄項,記入到該目錄中去。③把已存在文件索引節(jié)點inode的連接計數(shù)i_nlink加“1”。17:25:0671二、文件共享(6)B/homefei1myfile.cfei3fei2fei4fei5B/homefei1myfile.cfei3fei2fei4fei5link(“/home/fei1/myfile.c”,”/home/fei2/myfile.c”)文件鏈接17:25:0672二、文件共享(7)B/homefei1myfile.cfei3fei2fei4fei5Btestfile.c/homefei1myfile.cfei3fei2fei4fei5link(“/home/fei1/myfile.c”,”/home/fei3/fei4/testfile.c”)文件鏈接17:25:0673二、文件共享(8)4)文件鏈接的解除(及文件刪除)文件解除鏈接調用形式為:
unlink(namep)功能:將namep文件的索引節(jié)點inode的鏈接數(shù)i_nlink減“1”。若i_nlink值為“0”,則刪除該文件。刪除namep文件目錄項。解除鏈接與文件刪除功能是相同的 兩者執(zhí)行同一系統(tǒng)調用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要刪去目錄項,把i_nlink減“1”,不過,只有當i_nlink減為“0”時,才真正刪除文件。17:25:0674二、文件共享(9)2、文件的動態(tài)共享1)文件動態(tài)共享的含義 是系統(tǒng)中不同的用戶進程或同一用戶的不同進程并發(fā)地訪問同一文件。2)文件動態(tài)共享的特征 這種共享關系只有當用戶進程存在時才可能出現(xiàn),一旦用戶進程消亡,其共享關系也就自動消失。17:25:0675二、文件共享(10)3)文件動態(tài)共享的具體形式文件動態(tài)共享時,不同進程可能會讀寫文件的同一位置或不同位置,這就涉及到讀寫指針問題。17:25:0676二、文件共享(11)共用讀寫指針的情況當兩個程序共享同一文件且共用讀寫指針時,這兩個程序的用戶打開文件表指向系統(tǒng)打開文件表中的同一表項。這時,系統(tǒng)打開文件表表項的訪問計數(shù)f_count值等于共用一個讀寫指針訪問一個文件的進程數(shù),即共用一個系統(tǒng)打開文件表表項的進程數(shù)同一用戶父、子進程協(xié)同完成任務,使用同一讀/寫位移,同步地對文件進行操作。17:25:0677二、文件共享(12)UNIX/Linux系統(tǒng)同一用戶的父進程使用fork創(chuàng)建子進程前,若父進程已經打開某文件A,則文件A在系統(tǒng)打開文件表中存在一個表項,使用fork創(chuàng)建子進程時,父進程PCB被復制到子進程PCB,文件A在系統(tǒng)打開文件表中的表項也一并復制給子進程,導致兩個進程共用相同的系統(tǒng)打開文件表項,使用相同的讀寫指針17:25:0678二、文件共享(13)系統(tǒng)打開文件表活動inode表file結構…………活動的inode駐留主存i_count=1f_offsetf_count=2f_inode使用同一位移指針的文件共享fpfp父進程的打開文件表……
父進程fdfd……子進程的打開文件表fd……
子進程非駐留主存17:25:0679二、文件共享(14)用戶進程1用戶進程2用戶打開文件表用戶打開文件表系統(tǒng)打開文件表活動inode表OS兩個進程通過相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0680二、文件共享(15)讀寫指針不同的情況當兩個程序共享同一文件但讀寫指針不同時,這兩個程序各自的用戶打開文件表指向系統(tǒng)打開文件表中的不同表項,而這兩個表項又指向內存活動inode表中的同一表項。兩個以上用戶共享文件,每個希望獨立地讀、寫文件,這時不能只設置一個讀寫位移指針,須為每個用戶進程分別設置一個讀、寫位移指針。位移指針應放在每個進程用戶打開文件表的表目中。這樣,當一個進程讀、寫文件,并修改位移指針時,另一個進程的位移指針不會隨之改變,從而,使兩個進程能獨立地訪問同一文件。17:25:0681二、文件共享(16)對于UNIX/Linux系統(tǒng),若先執(zhí)行fork創(chuàng)建子進程后,父子進程再打開同一文件,則在系統(tǒng)打開文件表中將產生指向同一個文件的兩個不同的表項,使兩個進程以不同的讀寫位移指針訪問同一個文件。17:25:0682二、文件共享(17)fda進程A的子進程駐留主存活動inode表活動inode表……newfile活動的inodei_count=2
使用不同位移指針的文件共享fdafpafd……進程B的打開文件表fdb……
進程B非駐留主存進程A的打開文件表……
進程Afpb…f_offsetf_count=2f_flag(r)f_inodef_offsetf_count=1f_flag(r/w)f_inode系統(tǒng)打開文件表…進程A的子進程的打開文件表……fpa17:25:0683二、文件共享(18)用戶進程1用戶進程2用戶打開文件表用戶打開文件表系統(tǒng)打開文件表活動inode表OS兩個進程通過不相同的系統(tǒng)打開文件表項訪問一個文件,即文件1文件1文件217:25:0684二、文件共享(19)3、文件的符號鏈接共享(類似于快捷方式)又稱軟鏈接,符號鏈接是一種只有文件名,不指向inode的文件,刪去符號鏈接,文件實體內容依然存在符號鏈接只包含被鏈接文件的路徑名而不是它的inode號,文件所有者才具有指向inode的指針將文件名和自身的inode鏈接起來,稱為硬鏈接17:25:0685二、文件共享(20)優(yōu)點:能用于鏈接計算機系統(tǒng)中不同文件系統(tǒng)中的文件,可鏈接計算機網絡中不同機器上的文件,此時,僅需提供文件所在機器地址和該機器中文件的路徑名。缺點:搜索文件路徑開銷大,需要額外的空間查找存儲路徑。17:25:0686三、文件空間管理(1)輔存空間分配采用兩種辦法1)連續(xù)分配:文件存放在輔存空間連續(xù)存儲區(qū)中,在建立文件時,用戶必須給出文件大小,然后,查找到能滿足的連續(xù)存儲區(qū)供使用。17:25:0687三、文件空間管理(2)2)非連續(xù)分配:一種方法是以塊(扇區(qū))為單位,扇區(qū)不一定要連續(xù),同一文件的扇區(qū)按文件記錄的邏輯次序用鏈指針連接或位示圖指示。另一種方法是以簇為單位,簇是由若干個連續(xù)扇區(qū)組成的分配單位;實質上是連續(xù)分配和非連續(xù)分配的結合。各個簇可以用鏈指針、索引表,位示圖來管理。17:25:0688幾種具體文件輔存空間管理方法1、字位映象表(位示圖)系統(tǒng)中每個盤塊對應一個二進制位,采用二進制位來表示一個盤塊是否空閑。分配和回收時只需修改二進制位值即可。2、空閑區(qū)表為外存上的所有空閑區(qū)建立一張空閑表,每個空閑區(qū)占一個表項,表項內容包括空閑塊位置和連續(xù)空閑的塊數(shù)。一般用于連續(xù)分配,回收盤區(qū)時要考慮相鄰盤塊的合并問題。三、文件空間管理(3)17:25:06893、空閑塊鏈把所有空閑塊鏈接在一起,形成一個鏈表三、文件空間管理(4)17:25:06904、成組空閑塊鏈UNIX/Linux采用的一種外存管理方法,存儲空間分成512字節(jié)一塊。它將系統(tǒng)中的所有空閑盤塊分成若干組,每100個盤塊是一組,對于這些盤塊采用棧式管理方法,即分配盤塊時,從棧頂分配,相當于空閑盤塊出棧;回收盤塊時,將盤塊加入棧頂,相當于入棧。每組第一塊登記下一組空閑塊的盤物理塊號和空閑總數(shù)。三、文件空間管理(5)17:25:0691空閑塊成組連接法的分配舉例:若空閑盤塊組織如下:三、文件空間管理(6)17:25:0692三、文件空間管理(7)…s_nfree:50s_free[0]:s_free[1]:s_free[2]:…s_free[49]:…s_free[99]:…s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#filsys專用塊棧頂棧底棧頂棧底棧頂棧底棧頂棧底17:25:0693三、文件空間管理(8)…s_nfree:50s_free[0]:s_free[1]:s_free[2]:…s_free[49]:…s_free[99]:…s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#filsys專用塊#349#348...#300#299#298...#200#199#198...#100#99#98...#1棧頂棧底棧頂棧頂棧底棧頂棧底棧頂棧底棧頂棧底17:25:0694此時請求分配2個空閑盤塊,則349#、348#將會被分配,分配后s_nfree=48,結果如下圖所示:三、文件空間管理(9)17:25:0695三、文件空間管理(10)…s_nfree:48s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#348#347#filsys棧頂棧底棧頂棧底棧頂棧底棧頂棧底17:25:0696三、文件空間管理(11)…s_nfree:48s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#348#347#filsys#347...#300#299#298...#200#199#198...#100#99#98...#1棧頂棧底棧頂棧底棧頂棧底棧頂棧底棧頂棧底17:25:0697在此基礎上,若請求分配47個空閑盤塊,則347#、346#、……301#將會被依次分配,分配后s_nfree=1,結果如下圖所示:三、文件空間管理(12)17:25:0698三、文件空間管理(13)…s_nfree:1s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#348#347#filsys棧底=棧頂棧頂棧底棧頂棧底棧頂棧底17:25:0699三、文件空間管理(14)…s_nfree:1s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一組99塊第二組100塊第三組100塊第四組50塊100#200#300#348#347#filsys#300#299#298...#200#199#198...#100#99#98...#1棧頂棧底棧底=棧頂棧頂棧底棧頂棧底棧頂棧底17:25:06100在此基礎上,若請求分配1個空閑盤塊,則300#將會被分配。分配時,首先將300#盤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023九年級數(shù)學下冊 第27章 圓27.2 與圓有關的位置關系1點與圓的位置關系說課稿 (新版)華東師大版
- 2025從“京派、海派”之爭辨析民間委托炒股合同的效力
- 2025合同模板股東合作合同范本
- 2025借款合同版(單位住房)
- 2025勞動合同的有效要件范本
- 2025代工生產合同
- 清洗施工方案
- 路燈燈具整改施工方案
- 路燈改造工程施工方案
- Unit 3 Amazing animals PartA (說課稿)-2024-2025學年人教PEP版(2024)英語三年級上冊
- 人美版初中美術知識點匯總九年級全冊
- 2022中和北美腰椎間盤突出癥診療指南的對比(全文)
- 深度學習視角下幼兒科學探究活動設計
- 乳房整形知情同意書
- 全國核技術利用輻射安全申報系統(tǒng)填報指南
- GB/T 18344-2016汽車維護、檢測、診斷技術規(guī)范
- 青島版科學(2017)六三制六年級下冊第2單元《生物與環(huán)境》全單元課件
- 2022-2023年人教版九年級物理上冊期末考試(真題)
- 關漢卿的生平與創(chuàng)作
- 編本八年級下全冊古詩詞原文及翻譯
- 公共政策學政策分析的理論方法和技術課件
評論
0/150
提交評論