iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 26
0
自我挑戰組

作業系統概論系列 第 26

DAY 26 File-System(檔案系統) (上)

  • 分享至 

  • xImage
  •  

昨天結束了虛擬記憶體的介紹,今天就讓我們來看看什麼是檔案系統吧!

File Concept

  • 其概念就是「file(檔案)」是個連續性的logical address space,但在此不是說記憶體的logical address space,而是在說硬碟中的,因為file是儲存在硬碟中,只是硬碟本身是physical address space,而file才是logical address space。
  • 種類有很多種,像是Data、Program等等都是一種檔案。

File Structure

  • 檔案也是有可能是沒有架構的,而是一串文字或byte代表而已,以下有兩種架構可以來看:
  1. Simple record structure:是一種簡單類型的架構,像是一筆一筆的資料;而檔案就是由這一筆一筆的record所組成,例如:Lines、Fixed length、Variable length等。
  2. Complex Structure:跟第一種相比,是更為複雜的架構,例如:Formatted document、Relocatable load file等,內容可能也有包含很多訊息,UML就是一個例子。
  • 而決定如何使用的就是OS以及program。
    現在來看看檔案屬性有哪些吧!
  • File Attributes:檔案的屬性有很多種,如給使用者方便辨認的name;讓OS辨別的identifier;還有好多像是type、location、size等等都是。

File Operations

  • 檔案其實就是一種抽象的data type,而它有多達6種方法可使用,如create、write、read、reposition within file、delete、truncate。
  • 而Open(Fi)語法使用就是先找到檔案並且看存在不存在,或著是結構有沒有問題,然後再將其放入記憶體中,進行以上說過的6種方法,因此可說是跟記憶體有所關聯。
  • 而檔案要結束時使用的Close(Fi)語法就是,當一個檔案的新增、刪除等動作都結束後,再利用此語法告知系統說工作已經完成,將資源跟所佔的記憶體空間歸還,再繼續分配給其他需要的檔案使用。

以上是簡單說明關於打開檔案是怎麼回事,現在再來好好研究一番吧!

Open Files

  • 管理一個檔案室需要多個數據的部分的:
  1. File pointer:因為一個檔案可以被多個process給打開,所以需要明確指出每個process要打開檔案的哪個部分。
  2. File-open count:簡單來說就是計算檔案總共被打開了多少次。
  3. Disk location of the file:關於數據存取的快取資訊。
  4. Access rights:一個process存取模組的資料。
  • Open File Locking:由一些OS和file system所提供,同時調解檔案的存取,分為兩種:
  1. Mandatory:是一種強制性或建議性的lock;存取是否可以完成,便是取決於locks held跟request。
  2. Advisory:依照Mandatory的情況再決定是否進行locking。
    ==>而這兩種方法都是比較有彈性的,可以決定是否要locking。
  • 以下是使用Java語法所撰寫的file locking例子:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086YIAgtUT882.pnghttps://ithelp.ithome.com.tw/upload/images/20181110/20112086HgCUXT70ky.png

接下來說明關於檔案存取的方法吧!

Access Methods

  • 在前面我們有說過,檔案可能是一筆一筆的資料,所以當要存取時也是這樣一筆一筆資料的讀取下來,以下就是此方法的語法:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086L6qAiQPlAH.png
  • 還有另外一種方法,就是直接存取;簡單來說就是已經知道檔案的位置後,便直接到其位置或index去進行read的動作,以下也是此方法的語法:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086FuLZCNU3jk.png

大致介紹完存取方法後,現在來看看關於系統的目錄架構吧!

Directory Structure

  • 在目錄中節點的蒐集是包含了關於所有檔案的資訊。而且目錄架構跟檔案也都會待在硬碟中,至於它們的備用架構則是留在tapes中。
  • 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/201120865pG7tIET3d.png
    了解了目錄架構,也要來了解硬碟架構囉~!
    Disk Strcture
  • 硬碟是可以被細分到partitions(分區)中的,且都會受到RAID的保護來預防失敗的情況。同時也可以使用raw--不是用檔案系統而是用檔案系統來格式化。
  • 包含檔案的entity(實體)稱之為volume。而每個volume1包含了檔案系統,也追蹤其在device directory跟volume table of contents的信息。像是general-prupose file system有許多special-purpose file system,經常在同一個系統或電腦中。
  • 以下是一般檔案系統的結構圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086LxHG1btQHC.png

Organize the Directory (Logically) to Obtain

  • 是很有效率的,可以快速找到檔案。以即可命名的,讓使用者可以方便辨認:
  1. 使用者之間可以擁有同樣名字卻不同內容的檔案。
  2. 一個檔案也可以擁有多個不同的名字。
  • 可以被分組的特性,也就是說會依照其properties對檔案進行邏輯分組。

接下來是層級目錄!

Single-Level Directory

  • 單一的目錄要給所有的使用者,但會出現命名跟分組的問題。
  • 以下是示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086ZHepZT3pOL.png
    Two-Level Directory
  • 是將目錄分割給每個使用者,所以會有路徑的名稱,以及可以將相同名稱的檔案分給不同的使用者。
  • 是種有效率的搜尋但是沒有分組的性能。
  • 以下是示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086yOhpGjnjgj.png
    Tree-Structured Directories
  • 是種有效率的搜尋架構,同時也有分組的性能;其路徑名也有分作是相對的以及絕對的。
  • 會在目前工作中的目錄中新增一個新的檔案,而刪除檔案語法是「rm (file-name)」;也會在目前工作中完成新增一個新的子目錄,語法為「mkdir (dir-name)」。

Acyclic-Graph Directories

  • 簡單來說就是共享子目錄以及檔案。
  • 可以有兩個不同的名稱,但也有可能是別名。
  • 如果字典要刪除list卻發生dangling pointer的話,解決方法為:
  1. 利用反向指針,可以刪除所有的pointer,但會有尺寸不同的問題。
  2. 而反向指針是使用daisy chain organization。
  • 新的目錄進入檔案種類:
  1. Link:其他名稱(pointer)到存在的檔案中。
  2. Resolve the link:允許pointer找到檔案。
  • 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086KTQf3Htr8O.png

General Graph Directory

  • 該如何保證說不會產生循環呢?以下有幾種方式:
  1. 僅能允許連結到檔案而不是子目錄。
  2. 廢物的蒐集。
  3. 每次添加連結時,便透過cycle detection algorithm來探測是否存在循環。
  • 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181110/20112086EEJMzoMNXF.png

剩下的部份我們明天繼續再接再厲!!


上一篇
DAY 25 Virtual Memory(虛擬記憶體) (下)
下一篇
DAY 27 File System(檔案系統) (下)
系列文
作業系統概論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言