iT邦幫忙

3

【小黑馬作業系統教室】(18) (Ch10) File System Interface(檔案系統)

嗨嗨,大家好,我是心原一馬,
今天給大家介紹電腦上常見的檔案系統,
可以感覺到對電腦愈熟悉的話學的愈快呢。

檔案觀念

一、什麼是檔案?

檔案(file)是由OS所創建的數據資料(logical storage unit),
若是存放在光碟(disk)內的資料稱為physical storage unit。

記錄一個檔案的屬性為Metadata,比如說name(檔名), size(檔案大小), type(檔案型別),
location(檔案位置), protection(保護) 兩個資訊尤其重要。
如果location的資訊不見,
只知道檔案在硬碟裡,
但不知道在放在硬碟的哪裡。

要知道檔案的確切地址,
File system會做一些location的映射,類似memory的page table。

二、檔案操作

我們可以對檔案進行的操作如下:

  • 創建檔案
  • 寫入檔案
  • 讀取檔案
  • 重置擋案 (file seek)
  • 刪除檔案
  • 截短檔案 (Truncating file): 將檔案尾巴的資料切掉

三、open-file table

在process的PCB(process control block)裡,
會有一個地方指向open-file,
必須要記錄哪支程式開了這個檔案,
以及開過檔案的資訊。
依檔案屬性是否為processes之間共用又分為兩種:

  • Per-process table: 記錄與process獨立的資訊,比如讀檔位置、開檔權限,每支程式讀檔位置可不相同,比如P1從開頭讀、P2想從中間讀; 開檔權限也可不同,比如P1用read開,P2用write開。
  • System-wide table: 所有process共用的資訊 (當檔案被修改時,對所有process要同步更新的資訊,如檔名、檔案內容)

存取檔案的方式

以下介紹三種常見存取檔案的方式:

一、sequential access (連續的存取)

檔案讀寫每次只能從上一次的讀寫位置繼續做,
例如C語言的fread, fwrite。
檔案設計上常用這種方式,因為檔案讀寫通常是連續的

二、Direct(relative) access (任意位置開始的存取)

可以從檔案的任意位置進行存取,
但缺點是需要額外用一個變數存位置資訊,
讀檔的程式碼會變複雜。

三、Index access method

此種方式與Direct(relative) access的差別在於,
Direct(relative) access是用「檔案的位置」去做為查找,
比如說可以指定讀取檔行的第5行內容。

Index access method則是更彈性的存取,
可以用自訂資訊來查找檔案內容。
類似於你的電話簿,
你可以用「姓名」來查詢「電話號碼」(內容)。

檔案目錄結構(Directory Structure)

Directory指的是存放檔案的路徑,中文翻譯為目錄
是metadata的一部分,directory包括檔名。
以下介紹幾種檔案目錄結構:

一、Single-Level Directory

https://ithelp.ithome.com.tw/upload/images/20200103/20117114E0iekdw7wH.png

將所有檔案放在同一個目錄下,
而沒有資料夾(folder)的概念,
缺點是檔名必須是唯一的,
並且若檔案數量多,找到檔案的效率會下降。

二、Two-Level Directory

https://ithelp.ithome.com.tw/upload/images/20200103/20117114JX8aqx4UnL.png

Single-Level Directory的改良版,
以不同的user來區分檔案,
檔案的路徑= 使用者名稱+檔案名稱。
但是對於每個user來說,
仍會有Single-Level Directory的缺點。

三、Tree-structured Directory

https://ithelp.ithome.com.tw/upload/images/20200103/20117114q0OgVw5uUG.png

這個結構已經非常接近平時使用電腦的感覺了,
檔案的路徑又可分為「絕對路徑」與「相對路徑」兩種。

四、Acyclic Graph Directory(沒有cycle的graph)

https://ithelp.ithome.com.tw/upload/images/20200103/201171142uUfkwiI3e.png
現代電腦的真實系統多是做成這樣的,可以不同路徑但指到同一個檔案。
小馬覺得不同路徑但指到同一個檔案,
可能說的便是能夠幫檔案在桌面「建立捷徑」的功能吧,如下:
(用滑鼠右鍵點選一個檔案可看到)

https://ithelp.ithome.com.tw/upload/images/20200103/20117114q7P4SwaWOq.png

五、(不太重要)General Graph Directory(允許cycle)

缺點: 導致使用者混亂(允許cycle導致路徑可以很長),真實系統罕見會這樣設計。

檔案權限管理(在linux系統下)

每個檔案有三種屬性owner, group, other,
判斷這個檔案由不同人開啟的權限。

  • 每個file會有一個唯一的owner,表示誰創建了這個檔案。
  • group是一個管理檔案的群
  • other是不在owner也不在group裡的

比如說我們班寫作業系統作業,兩人一組,老師把班上的同學都加到一個group中,則:

  • 我和我的組員(共用帳號)開我們創建的檔案,權限叫「owner」,
  • 我的同班同學開我的組別檔案,權限叫「Group」,
  • 隔壁班同學開我們組的檔案,權限叫「Other」。

在linux系統下,每個檔案存3*3=9個bits,
記錄在每個level(順序一定是owner, group, others)的權限(RWX),
其中R: read(可讀), W: write(可寫), X: excute(可執行)。

真實系統例子如下:
https://ithelp.ithome.com.tw/upload/images/20200103/201171144rJzLfmhV3.png

以第一列為例,
第一行有十碼記錄檔案讀寫權限,
第一碼d指的是directory, - 指的是 file,
末九碼分別對應檔案對owner, group, others
最後一行則是檔名或資料夾名。

以第一列 -rw-rw-r-- ... intro.ps為例,
指的是intro.ps是一個檔案(而非資料夾),
此檔案對owner的權限為R, W(可讀可寫),
對group的權限為R, W(可讀可寫),
對others的權限為R(只可讀)。

linux指令學習 - chmod

chmod 664 intro.ps 指的是設定intro.ps的檔案權限
(令r = 4, w = 2, x = 1, - = 0)
所以這個指令便是將owner, group, others的權限依序設為6(rw-), 6(rw-), 4(r--)。


尚未有邦友留言

立即登入留言