版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、6.4文件系統(tǒng)其他功能實(shí)現(xiàn)6.4.1 文件系統(tǒng)調(diào)用的實(shí)現(xiàn)6.4.2 文件共享 6.4.3 文件空間管理 6.4.4 主存映射文件 6.4.5 虛擬文件系統(tǒng) 6.4.1 文件操作的實(shí)現(xiàn) 文件系統(tǒng)提供給用戶程序的一組系統(tǒng)調(diào)用,包括:建立、打開(kāi)、關(guān)閉、撤銷、讀、寫(xiě)和控制,通過(guò)這些系統(tǒng)調(diào)用用戶能獲得文件系統(tǒng)的各種服務(wù)。文件系統(tǒng)磁盤結(jié)構(gòu) 1 超級(jí)塊:占用1#號(hào)塊 2 索引節(jié)點(diǎn)區(qū):2#k+1#塊 3 數(shù)據(jù)區(qū):k+2#n#為數(shù)據(jù)塊 兩個(gè)重要數(shù)據(jù)結(jié)構(gòu):1 用戶打開(kāi)文件表: 2 系統(tǒng)打開(kāi)文件表: 文件系統(tǒng)內(nèi)部結(jié)構(gòu)主存i_numberi_counti_numberi_counti_addr40 i_numberi
2、_counti_addr40f_flagf_countf_inode file的指針fp 用戶打開(kāi)文件表files_struct文件描述符fd用戶空間內(nèi)核空間系統(tǒng)打開(kāi)文件表file_struct一個(gè)打開(kāi)文件的file活動(dòng)inode活動(dòng)inode主存活動(dòng)inode表磁盤磁盤文件卷0#1#2#引導(dǎo)塊超級(jí)塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊磁盤文件2022/8/165目錄項(xiàng)、inode和數(shù)據(jù)塊的關(guān)系磁盤文件卷inode 文件名inode inode 文件名inode 磁盤文件0#1#2#數(shù)據(jù)塊數(shù)據(jù)塊目錄塊數(shù)據(jù)塊數(shù)據(jù)塊目錄塊引導(dǎo)塊磁盤inode區(qū)磁盤信息區(qū):目錄塊和數(shù)據(jù)塊inodeinode超
3、級(jí)塊文件系統(tǒng)調(diào)用 (1) (1)文件的創(chuàng)建 系統(tǒng)調(diào)用C語(yǔ)言格式為: int fd, mode; char *filenamep; fd = create (filenamep, mode);文件系統(tǒng)調(diào)用 (2) 文件創(chuàng)建執(zhí)行過(guò)程 為新文件分配索引節(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),置表項(xiàng)初值。包括在f_flag中置“寫(xiě)”標(biāo)志,讀寫(xiě)位移f_offset清“0”。把各表項(xiàng)及文件對(duì)應(yīng)的活動(dòng)索引節(jié)點(diǎn)用指針連接起來(lái),把文件描述字返回給
4、調(diào)用者。文件系統(tǒng)調(diào)用 (3) (2) 文件的刪除 刪除把指定文件從所在的目錄文件中除去。如果沒(méi)有連接用戶(i_link 為“1”),還要把文件占用的存儲(chǔ)空間釋放。刪除系統(tǒng)調(diào)用形式為:unlink (filenamep)。在執(zhí)行刪除時(shí),必須要求用戶對(duì)該文件具有“寫(xiě)”操作權(quán)。文件系統(tǒng)調(diào)用 (4)(3)文件的打開(kāi)(1)調(diào)用方式為: int fd, mode; char * filenamep; fd = open (filenamep, mode);文件系統(tǒng)調(diào)用 (5)文件打開(kāi)執(zhí)行過(guò)程(2) 檢索目錄,把它的外存索引節(jié)點(diǎn)復(fù)制到活動(dòng)索引節(jié)點(diǎn)表。根據(jù)參數(shù)mode核對(duì)權(quán)限,如果非法,則這次打開(kāi)失敗。 當(dāng)“
5、打開(kāi)”合法時(shí),為文件分配用戶打開(kāi)文件表項(xiàng)和系統(tǒng)打開(kāi)文件表項(xiàng),并為表項(xiàng)設(shè)置初值。通過(guò)指針建立這些表項(xiàng)與活動(dòng)索引節(jié)點(diǎn)間的聯(lián)系。把文件描述字,即用戶打開(kāi)文件表中相應(yīng)文件表項(xiàng)的序號(hào)返回給調(diào)用者。文件系統(tǒng)調(diào)用 (6)(4)文件的關(guān)閉(1) 調(diào)用方式為: int fd; close (fd);文件系統(tǒng)調(diào)用 (7)文件的關(guān)閉(2) 根據(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)程共享這一表項(xiàng),不用釋放直接返回; 否則,釋放表項(xiàng),并找到與之連接的活動(dòng)索引節(jié)點(diǎn)。 把活動(dòng)索引節(jié)點(diǎn)中的i_count減“1”。
6、若不為“0”,表明還有用戶進(jìn)程正在使用該文件,不用釋放而直接返回, 否則,在把該活動(dòng)索引節(jié)點(diǎn)中的內(nèi)容復(fù)制回文件卷上的相應(yīng)索引節(jié)點(diǎn)中后,釋放該活動(dòng)索引節(jié)點(diǎn)。文件系統(tǒng)調(diào)用 (8)(5)讀文件(1)調(diào)用的形式為: int nr, fd, count; char buf nr = read (fd, buf, count);文件系統(tǒng)調(diào)用 (9)讀文件(2)系統(tǒng)根據(jù)f_flag中的信息,檢查讀操作合法性,再根據(jù)當(dāng)前位移量f_offset值,要求讀出的字節(jié)數(shù),及活動(dòng)索引節(jié)點(diǎn)中i_addr指出的文件物理塊存放地址,把相應(yīng)的物理塊讀到緩沖區(qū)中,然后再送到bufp指向的用戶主存區(qū)中。文件系統(tǒng)調(diào)用 (10)讀文件
7、(3)fdfpf_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í)文件數(shù)據(jù)結(jié)構(gòu)的關(guān)系文件描述符用戶打開(kāi)文件表活動(dòng)inode表物理塊系統(tǒng)打開(kāi)文件表i_nlink(1)i_addr(40)文件系統(tǒng)調(diào)用 (11)(6)寫(xiě)文件調(diào)用的形式為: nw = write (fd, buf, count); buf是信息傳送的源地址,即把buf所指向的用戶主存區(qū)中的信息,寫(xiě)入到文件中。文件系統(tǒng)調(diào)用 (12)(7)文件的隨機(jī)存取(1) 系統(tǒng)調(diào)用的形式為: long lseek;
8、long offset; int whence, fd; lseek (fd, offset, whence);文件系統(tǒng)調(diào)用 (13)文件的隨機(jī)存取(2) 文件描述字fd必須指向一個(gè)用讀或?qū)懛绞酱蜷_(kāi)的文件,當(dāng)whence是“0”時(shí),則f_offset被置為offset,當(dāng)whence是“1”時(shí),則f_offset被置為文件當(dāng)前位置加上offset。6.4.2文件共享 1.文件的靜態(tài)共享 2.文件的動(dòng)態(tài)共享 3.文件的符號(hào)鏈接共享 1文件的靜態(tài)共享(1) 系統(tǒng)調(diào)用形式為: char * oldnamep, * newnamep; link (oldnamep, newnamep); 檢索目錄找到
9、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”。文件的靜態(tài)共享(2) 鏈接實(shí)際上是共享已存在文件的索引節(jié)點(diǎn)inode,完成鏈接的系統(tǒng)調(diào)用: link(“/usr/fei1/myfile.c”,”/usr/fei2/myfile.c”); link(“/usr/fei1/myfile.c”,”/usr/include/testfile.c”); 執(zhí)行后,三個(gè)路徑名指的是同一個(gè)文件: /usr/f
10、ei1/myfile.c, /usr/fei2/myfile.c, /usr/include/testfile.c。文件的靜態(tài)共享(3) 文件解除鏈接調(diào)用形式為: unlink (namep)解除鏈接與文件刪除執(zhí)行的是同一系統(tǒng)調(diào)用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要?jiǎng)h去目錄項(xiàng),把i_nlink減“1”,不過(guò),只有當(dāng)i_nlink減為“0”時(shí),才真正刪除文件。 2文件的動(dòng)態(tài)共享(1) 文件動(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)消失。 文件的
11、每次讀寫(xiě)由一個(gè)讀/寫(xiě)位移指針指出要讀寫(xiě)的位置?,F(xiàn)在的問(wèn)題是:若文件可以為多個(gè)進(jìn)程所共享,那么,應(yīng)讓多個(gè)進(jìn)程共用同一個(gè)讀/寫(xiě)位移,還是各個(gè)進(jìn)程具有各自的讀寫(xiě)位移呢?文件的動(dòng)態(tài)共享(2) 同一用戶父、子進(jìn)程協(xié)同完成任務(wù),使用同一讀/寫(xiě)位移,同步地對(duì)文件進(jìn)行操作。該位移指針宜放在相應(yīng)文件的活動(dòng)索引節(jié)點(diǎn)中。當(dāng)用系統(tǒng)調(diào)用fork建立子進(jìn)程時(shí),父進(jìn)程的pcb結(jié)構(gòu)被復(fù)制到子進(jìn)程的pcb結(jié)構(gòu)中,使兩個(gè)進(jìn)程的打開(kāi)文件表指向同一活動(dòng)的索引節(jié)點(diǎn),達(dá)到共享同一位移指針的目的。 文件的動(dòng)態(tài)共享(3) 系統(tǒng)打開(kāi)文件表活動(dòng)inode表file結(jié)構(gòu)活動(dòng)的inode駐留主存i_count=1f_offsetf_count=2f
12、_inode使用同一位移指針的文件共享fpfp父進(jìn)程的打開(kāi)文件表 父進(jìn)程fdfd子進(jìn)程的打開(kāi)文件表fd 子進(jìn)程非駐留主存文件的動(dòng)態(tài)共享(4) 多用戶共享文件,每個(gè)希望獨(dú)立地讀、寫(xiě)文件,這時(shí)不能只設(shè)置一個(gè)讀寫(xiě)位移指針,須為每個(gè)用戶進(jìn)程分別設(shè)置一個(gè)讀、寫(xiě)位移指針。位移指針應(yīng)放在每個(gè)進(jìn)程用戶打開(kāi)文件表的表目中。這樣,當(dāng)一個(gè)進(jìn)程讀、寫(xiě)文件,并修改位移指針時(shí),另一個(gè)進(jìn)程的位移指針不會(huì)隨之改變,從而,使兩個(gè)進(jìn)程能獨(dú)立地訪問(wèn)同一文件。 文件的動(dòng)態(tài)共享(5) fda進(jìn)程A的子進(jìn)程駐留主存活動(dòng)inode表活動(dòng)inode表newfile活動(dòng)的inodei_count=2 使用不同位移指針的文件共享fdafpa子進(jìn)
13、程的u_ofilefd進(jìn)程B的打開(kāi)文件表fdb 進(jìn)程B非駐留主存進(jìn)程A的打開(kāi)文件表 進(jìn)程Afpbf_offsetf_count=2f_flag(r)f_inodef_offsetf_count=1f_flag(r/w)f_inode系統(tǒng)打開(kāi)文件表進(jìn)程A的子進(jìn)程的打開(kāi)文件表fpa3文件的符號(hào)鏈接共享 又稱軟鏈接,符號(hào)鏈接是一種只有文件名,不指向inode的文件符號(hào)鏈接共享文件的實(shí)現(xiàn)思想:6.4.3 文件空間管理 輔存空間分配采用兩種辦法 連續(xù)分配:文件存放在輔存空間連續(xù)存儲(chǔ)區(qū)中,在建立文件時(shí),用戶必須給出文件大小,然后,查找到能滿足的連續(xù)存儲(chǔ)區(qū)供使用。 非連續(xù)分配:一種方法是以塊(扇區(qū))為單位,
14、扇區(qū)不一定要連續(xù),同一文件的扇區(qū)按文件記錄的邏輯次序用鏈指針連接或位示圖指示。另一種方法是以簇為單位,簇是由若干個(gè)連續(xù)扇區(qū)組成的分配單位;實(shí)質(zhì)上是連續(xù)分配和非連續(xù)分配的結(jié)合。各個(gè)簇可以用鏈指針、索引表,位示圖來(lái)管理。具體文件輔存空間管理方法字位映象表(位示圖)空閑區(qū)表空閑塊鏈UNIX/Linux空閑塊成組連接法(1)存儲(chǔ)空間分成512字節(jié)一塊。假定文件卷啟用時(shí)共有可用文件338塊,編號(hào)從12至349。每100塊劃分一組,每組第一塊登記下一組空閑塊的盤物理塊號(hào)和空閑總數(shù)。 空閑塊數(shù)3950491212空閑塊數(shù)10015014951空閑塊數(shù)100250249151空閑塊數(shù)1000349251分配算
15、法IF 空閑塊數(shù)=1 THEN IF第一個(gè)單元=0 THEN 等待 ELSE 復(fù)制第一個(gè)單元對(duì)應(yīng)塊到專用塊,并分配之ELSE 分配第(空閑塊數(shù))個(gè)單元對(duì)應(yīng)塊,空閑塊數(shù)減1歸還算法IF 空閑塊數(shù)100 THEN 專用塊的空閑塊數(shù)加一,第(空閑塊數(shù))個(gè)單元置歸還塊號(hào)ELSE 復(fù)制專用塊到歸還塊, 專用塊的空閑塊數(shù)置一, 第一單元置歸還塊號(hào)(磁盤)專用塊(主存)專用塊UNIX/Linux空閑塊成組連接法(2)6.4.4主存映射文件(1) 什么是主存映射文件系統(tǒng)提供兩個(gè)新的系統(tǒng)調(diào)用, 1)映射文件,有兩個(gè)參數(shù):一個(gè)文件名和一個(gè)虛擬地址,把一個(gè)文件映射到進(jìn)程地址空間。 2)移去映射文件,讓文件與進(jìn)程地址空間斷開(kāi),并把映射文件的數(shù)據(jù)寫(xiě)回磁盤文件。 主存映射文件(2) 123451234552413進(jìn)程A虛存進(jìn)程B虛存物理主存 1 2 3 4 5磁盤文件6.4.5虛擬文件系統(tǒng)(1)虛擬文件系統(tǒng)要實(shí)現(xiàn)以下目標(biāo)同時(shí)支持多種文件系統(tǒng);多個(gè)文件系統(tǒng)應(yīng)與傳統(tǒng)的單
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026北京市大興區(qū)榆垡鎮(zhèn)中心衛(wèi)生院面向社會(huì)招聘8人備考題庫(kù)及完整答案詳解
- 2026年威海臨港經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)鎮(zhèn)屬事業(yè)單位公開(kāi)招聘初級(jí)綜合類崗位人員備考題庫(kù)(2人)及答案詳解(易錯(cuò)題)
- 2026上半年貴州事業(yè)單位聯(lián)考貴州大學(xué)招聘11人備考題庫(kù)(一)(含答案詳解)
- 2026上半年貴州事業(yè)單位聯(lián)考百里杜鵑管理區(qū)招聘56人備考題庫(kù)有答案詳解
- 2025-2026學(xué)年第二學(xué)期山西金融職業(yè)學(xué)院招聘校外兼職教師1人備考題庫(kù)二及參考答案詳解1套
- 2026中央民族大學(xué)教學(xué)科研人員招聘89人備考題庫(kù)帶答案詳解
- 2026山西醫(yī)科大學(xué)第二醫(yī)院急需緊缺高層次人才招聘8人備考題庫(kù)完整答案詳解
- 2026年1月廣西梧州市蒼梧縣城鎮(zhèn)公益性崗位人員招聘7人備考題庫(kù)完整參考答案詳解
- 2025至2030中國(guó)母嬰用品直播帶貨消費(fèi)者行為分析與渠道變革報(bào)告
- 2026上半年黑龍江科技大學(xué)招聘博士教師66人備考題庫(kù)有答案詳解
- 研究受試者知情同意書(shū)
- 2025年水利工程質(zhì)量檢測(cè)員考試(混凝土工程)全真模擬試題及答案及答案(云南省)
- 2025年3D建模服務(wù)保密協(xié)議
- 戰(zhàn)場(chǎng)適應(yīng)性訓(xùn)練
- 各種挖機(jī)租賃合同范本
- 油料運(yùn)輸應(yīng)急預(yù)案
- 自來(lái)水維修搶修知識(shí)培訓(xùn)課件
- 2025浙江紹興市新聞傳媒中心(傳媒集團(tuán))招聘6人筆試題庫(kù)歷年考點(diǎn)版附帶答案詳解
- 第四單元民族關(guān)系與國(guó)家關(guān)系(任務(wù)型復(fù)習(xí)課件)歷史統(tǒng)編版選擇性必修1
- 20kV及以下配電網(wǎng)工程設(shè)備材料價(jià)格信息(2025年上半年)
- 鐵科院試驗(yàn)員培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論