操作系統ch6.4文件系統其他功能_第1頁
操作系統ch6.4文件系統其他功能_第2頁
操作系統ch6.4文件系統其他功能_第3頁
操作系統ch6.4文件系統其他功能_第4頁
操作系統ch6.4文件系統其他功能_第5頁
已閱讀5頁,還剩66頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、6.4文件系統其他功能的實現6.4.1 文件系統調用的實現6.4.2 UNIX文件系統調用 6.4.3 文件卷的安裝和使用 6.4.4 文件共享 6.4.5 層次式文件系統模型 6.4.6 輔存空間管理 6.4.7 內存映射射文件 6.4.8 虛擬文件系統 6.4.1 文件操作的實現 文件系統提供給用戶程序的一組系統調用,包括:建立、打開、關閉、撤銷、讀、寫和控制,通過這些系統調用用戶能獲得文件系統的各種服務。建立文件(1) 用戶把信息作為一個文件存放到存儲設備上時,使用建立操作向系統提出建立一個文件的要求。 用戶使用建立系統調用時,通常應提供以下參數:建立文件(2)建立系統調用的主要工作 根

2、據設備類(號)在相應設備上建立一個文件目錄,返回用戶文件標識;將文件名及屬性等數據填入文件目錄;調用輔存空間管理程序,為文件分配第一個物理塊;需要時發出裝卷信息(如磁帶);在活動文件表中登記該文件有關信息,文件定位,卷標處理;打開文件(1) 使用已建立的文件前,通過打開文件操作建立文件和用戶間的聯系 打開文件可使用顯式、可使用隱式 用戶打開文件時需要給出文件名和設備類(號)打開文件(2)打開系統調用的主要工作 在活動文件表中申請空項,存放該文件的文件目錄信息; 根據文件名查找目錄文件,找到的文件目錄信息復制到活動文件表占用欄; 若打開的是共享文件,應有相應處理,共享文件用戶數加; 文件定位,卷

3、標處理;讀寫文件(1) 文件打開后,可用讀寫系統調用訪問文件,應給出參數:文件名、主存緩沖地址、讀寫的字節個數等。讀寫文件(2)讀寫系統調用的主要工作 按文件名從活動文件表中找到該文件的目錄: 按存取控制說明檢查訪問合法性; 根據文件目錄指出的該文件的邏輯和物理組織方式將邏輯記錄號或字符個數轉換成物理塊號; 向設備管理發I/O請求,完成數據傳輸操作。 關閉文件 文件使用完畢應關閉,以便讓別的使用者用此文件。此操作的主要工作: 將活動文件表中該文件的當前使用用戶減;若此值為,則撤銷此表目; 若活動文件表目內容已被改過,應先將表目內容寫回文件存儲器上相應表目中,以使文件目錄保持最新狀態; 卷定位工

4、作。撤銷文件 一個文件不再需要時,可向系統提出撤銷文件,系統的主要工作是: 若文件沒有關閉,先做關閉工作;若為共享文件,應進行聯訪處理; 在目錄文件中刪去相應目錄項; 釋放文件占用的文件存儲空間。6.4.2UNIX文件系統調用 UNIX文件系統調用主要包括:打開和關閉,文件創建和刪除,文件連接和解除連接,文件讀和寫,以及文件隨機訪問。 UNIX文件系統數據結構及存儲器上的組織安排(1) UNIX文件系統數據結構及存儲器上的組織安排(2) 專用塊 包括:i節點表所占盤塊數、文件卷盤塊數、內存中登記的空閑盤塊數(最多100)、內存中登記的空閑塊的物理塊號、內存中登記的空閑i節點數(最多100)、內

5、存中登記的空閑i節點編號,及其他管理信息。 UNIX文件系統數據結構及存儲器上的組織安排(3) 專用塊 既有盤位示圖的功能,又記錄了整個文件卷的控制數據。每當一個塊設備作為文件卷被安裝時,該設備的專用塊就要復制到內存專用塊中備用,而拆卸文件卷時,修改過的專用塊需復制回設備的專用塊中。UNIX文件系統數據結構及存儲器上的組織安排(4) i節點表 存放UNIX文件控制塊信息,又分外存文件i節點表和內存活動i節點表,后者解決了頻繁訪問i節點表的效率問題。UNIX文件系統數據結構及存儲器上的組織安排(5) 用戶打開文件表 進程user結構中數組u-ofile15為用戶打開文件表。登記序號為文件描述符f

6、d,每項登記了系統打開文件表的入口指針fp。通過此系統打開文件表項連接到打開文件的活動i節點。UNIX文件系統數據結構及存儲器上的組織安排(6) 系統打開文件表 為解決多用戶共享文件、父子進程共享文件而設置的數據結構,內存開辟了最多可登記100項的系統打開文件表區域。UNIX文件系統數據結構及存儲器上的組織安排(7) 文件卷安裝表 反映文件卷動態地在根文件設備上裝卸情況的數據結構。 UNIX文件系統調用 (1) (1)文件的創建 系統調用C語言格式為: int fd, mode; char *filenamep; fd = creat (filenamep, mode);UNIX文件系統調用

7、(2) 文件創建執行過程(1) 為新文件分配索引節點和活動索引節點,并把索引節點編號與文件分量名組成新目錄項,記到目錄中。 在新文件所對應的活動索引節點中置初值,包括置存取權限i_mode,連接計數i_nlink等。UNIX文件系統調用 (3) 文件創建執行過程(2) 分配用戶打開文件表項和系統打開文件表項,置表項初值。包括在f_flag中置“寫”標志,讀寫位移f_offset清“0”。把各表項及文件對應的活動索引節點用指針連接起來,把文件描述字返回給調用者。UNIX文件系統調用 (4) (2) 文件的刪除 刪除把指定文件從所在的目錄文件中除去。如果沒有連接用戶(i_link 為“1”),還要

8、把文件占用的存儲空間釋放。刪除系統調用形式為:unlink (filenamep)。在執行刪除時,必須要求用戶對該文件具有“寫”操作權。UNIX文件系統調用 (5)(3)文件的打開文件的打開(1)(1) 調用方式為: int fd, mode; char * filenamep; fd = open (filenamep, mode);UNIX文件系統調用 (6)文件打開執行過程文件打開執行過程(2)(2) 檢索目錄,把它的外存索引節點復制到活動索引節點表。根據參數mode核對權限,如果非法,則這次打開失敗。UNIX文件系統調用 (7)文件打開執行過程文件打開執行過程(3)(3) 當“打開”合

9、法時,為文件分配用戶打開文件表項和系統打開文件表項,并為表項設置初值。通過指針建立這些表項與活動索引節點間的聯系。把文件描述字,即用戶打開文件表中相應文件表項的序號返回給調用者。UNIX文件系統調用 (8)(4)文件的關閉文件的關閉(1)(1) 調用方式為: int fd; close (fd);UNIX文件系統調用 (10)文件的關閉文件的關閉(2)(2) 根據fd找到用戶打開文件表項,繼而找到系統打開文件表項。釋放用戶打開文件表項。 把對應的系統打開文件表項中的f_count減“1”,如果不為“0”,說明還有進程共享這一表項,不用釋放表項直接返回;否則釋放這個表項,并找到與之連接的活動索引

10、節點。UNIX文件系統調用 (11)文件的關閉文件的關閉(3)(3) 把活動索引節點中的i_count減“1”,若不為“0”,表明還有用戶進程正在使用該文件,不用釋放該而直接返回,否則在把該活動索引節點中的內容復制回文件卷上的相應索引節點中后,釋放該活動索引節點。UNIX文件系統調用 (12)(5)讀文件讀文件(1)(1)調用的形式為: int nr, fd, count; char buf nr = read (fd, buf, count);UNIX文件系統調用 (13)讀文件讀文件(2)(2) 系統根據f_flag中的信息,檢查讀操作合法性,再根據當前位移量f_offset值,要求讀出的

11、字節數,及活動索引節點中i_addr指出的文件物理塊存放地址,把相應的物理塊讀到緩沖區中,然后再送到bufp指向的用戶內存區中。UNIX文件系統調用 (14)讀文件讀文件(3)(3)UNIX文件系統調用 (15)(6)寫文件寫文件 調用的形式為: nw = write (fd, buf, count); buf是信息傳送的源地址,即把buf所指向的用戶內存區中的信息,寫入到文件中。UNIX文件系統調用 (16)(7)文件的隨機存取(1) 系統調用的形式為: long lseek; long offset; int whence, fd; lseek (fd, offset, whence);U

12、NIX文件系統調用 (17)文件的隨機存取(2) 文件描述字fd必須指向一個用讀或寫方式打開的文件,當whence是“0”時,則f_offset被置為offset,當whence是“1”時,則f_offset被置為文件當前位置加上offset。6.4.3文件卷的安裝和使用(1)文件系統結構 基本文件系統子文件系統1子文件系統2子文件系統n文件卷的安裝和使用(2) 文件卷的動態安裝 文件卷的動態安裝過程 文件卷的拆卸 6.4.4文件共享 1文件的靜態共享 2文件的動態共享 3文件的符號鏈接共享 1文件的靜態共享(1) 系統調用形式為: chat * oldnamep, * newnamep; l

13、ink (oldnamep, newnamep);文件的靜態共享(2) 檢索目錄找到oldnamep所指向文件的索引節點inode編號。 再次檢索目錄找到newnamep所指文件的父目錄文件,并把已存在文件的索引節點inode編號與別名構成一個目錄項,記入到該目錄中去。 把已存在文件索引節點inode的連接計數i_nlink加“1”。文件的靜態共享(3) 鏈接實際上是共享已存在文件的索引節點inode,完成鏈接的系統調用: link(“/usr/fei1/myfile.c”,”/usr/fei2/myfile.c”)link(“/usr/fei1/myfile.c”,”/usr/fei2/my

14、file.c”); link(“/usr/fei1/myfile.c”,”/usr/include/testfilelink(“/usr/fei1/myfile.c”,”/usr/include/testfile.c”).c”); 執行后,三個路徑名指的是同一個文件:/usr/fei1/myfile.c, /usr/fei2/myfile.c, /usr/include/testfile.c。文件的靜態共享(4) tty00devbinlibetcusrtty01shdate cc whopasswdUNIXfei1myfile.cgettyincludefei2testfile.c文件的靜態

15、共享(5) 文件解除鏈接調用形式為: unlink (namep) 解除鏈接與文件刪除執行的是同一系統調用代碼。刪除文件是從文件主角度講的,解除文件連接是從共享文件的其他用戶角度講的。都要刪去目錄項,把i_nlink減“1”,不過,只有當i_nlink減為“0”時,才真正刪除文件。 2文件的動態共享(1) 文件動態共享是系統中不同的用戶進程或同一用戶的不同進程并發地訪問同一文件。 這種共享關系只有當用戶進程存在時才可能出現,一旦用戶的進程消亡,其共享關系也就自動消失。 文件的動態共享(2) UNIX文件的每次讀寫由一個讀/寫位移指針指出要讀寫的位置。現在的問題是:若文件可以為多個進程所共享,那

16、么,應讓多個進程共用同一個讀/寫位移,還是各個進程具有各自的讀寫位移呢?文件的動態共享(3) 同一用戶父、子進程協同完成任務,使用同一讀/寫位移,同步地對文件進行操作。 該位移指針宜放在相應文件的活動索引節點中。當用系統調用fork建立子進程時,父進程的user結構被復制到子進程的user結構中,使兩個進程的打開文件表指向同一活動的索引節點,達到共享同一位移指針的目的。 文件的動態共享(4) 文件的動態共享(5) 兩個以上用戶共享文件,每個希望獨立地讀、寫文件,這時不能只設置一個讀寫位移指針,須為每個用戶進程分別設置一個讀、寫位移指針。 位移指針應放在每個進程用戶打開文件表的表目中。這樣,當一

17、個進程讀、寫文件,并修改位移指針時,另一個進程的位移指針不會隨之改變,從而,使兩個進程能獨立地訪問同一文件。 文件的動態共享(6) 3文件的符號鏈接共享 又稱軟鏈接,符號鏈接是一種只有文件名,不指向inode的文件 符號鏈接共享文件的實現思想:6.4.5層次式文件系統模型(1) Madnick于1969年提的一個層次式文件系統模型,介紹文件系統一般的工作原理,模型分成8個層次 層次式文件系統模型(2) 獲得結果用戶存取要求用戶接口符號文件系統存取控制驗證邏輯文件系統物理文件系統設備和分配策略模塊 I/O控制系統物理介質基本文件系統層次式文件系統模型(3) (1)用戶接口 接受用戶發來的文件系統

18、調用,進行必要的語法檢查,根據用戶對文件的存取要求,轉換成統一格式的內部系統調用,并進入符號文件系統。層次式文件系統模型(4) (2)符號文件系統 根據文件路徑名,建立或搜索文件目錄,獲得文件內部唯一標識來代替這個文件,供后面存取操作使用。層次式文件系統模型(5) (3)基本文件系統 根據文件內部標識負責把文件說明信息調入內存的活動文件表中。如文件已經打開,則根據本次存取要求修改活動文件表內容,并把控制傳到下一層。層次式文件系統模型(6) (4)存取控制驗證 根據活動文件表相應項識別調用者的身份,驗證存取權限,判定文件操作的合法性,實現文件的存取、共享、保護和保密。如不允許本次訪問便發出一個錯

19、誤條件,本次文件操作請求失敗。層次式文件系統模型(7) (5)邏輯文件系統 根據文件說明中的邏輯結構信息,把指定的邏輯記錄轉換成相對的塊地址。對流式文件,把用戶指定的邏輯地址按塊長計算出相對塊號;對記錄式文件,先把記錄號轉換成邏輯地址,再把其轉換成相對塊號。如本文件適用多種存取方法,則應設多個例程完成不同的轉換算法。層次式文件系統模型(8) (6)物理文件系統 根據活動文件表相應目錄項中的物理結構信息,將相對塊號及塊內相對地址轉換為文件存儲器的物理塊號和塊內地址。層次式文件系統模型(9) (7)設備和分配策略模塊 負責文件存儲空間的分配,若為寫操作,則動態地為調用者申請物理塊;實現緩沖區信息管

20、理。根據物理塊號生成I/O控制系統的地址格式。層次式文件系統模型(10) (8)I/O控制系統 具體執行I/O操作,實現文件信息的存取。這一層屬于設備管理功能。6.4.6 輔存空間管理(1) 輔存空間分配采用兩種辦法 連續分配:文件存放在輔存空間連續存儲區中,在建立文件時,用戶必須給出文件大小,然后,查找到能滿足的連續存儲區供使用。 輔存空間管理(2) 非連續分配:一種方法是以塊(扇區)為單位,扇區不一定要連續,同一文件的扇區按文件記錄的邏輯次序用鏈指針連接或位示圖指示。 另一種方法是以簇為單位,簇是由若干個連續扇區組成的分配單位;實質上是連續分配和非連續分配的結合。各個簇可以用鏈指針、索引表

21、,位示圖來管理。輔存空間管理(3)具體文件輔存空間管理方法 字位映象表(位示圖)字位映象表(位示圖) 空閑區表空閑區表 空閑塊鏈空閑塊鏈UNIX/Linux空閑塊成組連接法(1) 存儲空間分成512字節一塊。假定文件卷啟用時共有可用文件438塊,編號從12至349。每100塊劃分一組,每組第一塊登記下一組空閑塊的盤物理塊號和空閑總數。 空閑塊數395049121212空閑塊數10015014951空閑塊數100250249151空閑塊數1000349251分配算法IF 空閑塊數=1 THEN IF第一個單元=0 THEN 等待 ELSE 復制第一個單元對應塊到專用塊,并分配之ELSE 分配第(空閑塊數)個單元對應塊,空閑塊數減1歸還算法IF 空閑塊數100 THEN 專用塊的空閑塊數加一,第(空閑塊數)個單元置歸還塊號ELSE 復制專用塊到歸還塊, 專用塊的空閑塊數置一, 第一單元置歸還塊號(

溫馨提示

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

評論

0/150

提交評論