四宵蛀、文件系統(tǒng)的安全性
這里我們討論如何確保未經(jīng)授權的用戶不能存取某些文件?
4.1 文件保護機制
- 用于提供安全性县貌、特定的操作系統(tǒng)機制
- 對擁有權限的用戶术陶,應該讓其進行相應的操作,否則煤痕,應禁止
- 防止其他用戶冒充對文件進行操作
于是在實現(xiàn)的時候需要考慮用戶身份驗證和訪問控制梧宫。對于用戶身份我們可以采用比如密碼、口令等方式摆碉。
4.2 文件的訪問控制
有不同的訪問控制手段塘匣,比如主動控制(使用訪問控制表)和能力表(使用權限表)。
主動控制
每個文件一個
記錄用戶ID
和訪問權限
用戶可以是一組用戶
文件可以是一組文件能力表
每個用戶一個
記錄文件名及訪問權限
用戶可以是一組用戶
文件可以是一組文件
4.3 UNIX的文件訪問控制
采用文件的二級存取控制巷帝,審查用戶的身份馆铁、審查操作的合法性
-
第一級:對訪問者身份的識別
對用戶分類:- 文件主(
owner
) - 文件主的同組用戶(
group
) - 其他用戶(
other
)
- 文件主(
-
第二級:對操作權限的識別
對操作分類:- 讀操作(
r
) - 寫操作(
w
) - 執(zhí)行操作(
x
) - 不能執(zhí)行任何操作(
-
)
- 讀操作(
五、文件系統(tǒng)的性能
5.1 文件系統(tǒng)的性能問題
磁盤服務:速度成為系統(tǒng)性能的主要瓶頸之一锅睛。因此埠巨,在設計文件系統(tǒng)時應盡可能減少磁盤訪問次數(shù)
提高文件系統(tǒng)性能的方法:
目錄項(FCB
)分解、當前目錄现拒、磁盤碎片整理辣垒、塊高速緩存、磁盤調(diào)度印蔬、提前讀取勋桶、合理分配磁盤空間、信息的優(yōu)化分布侥猬、RAID
技術等等
5.2 提高文件系統(tǒng)性能:塊高速緩存(BLOCK CACHE)
又稱為文件緩存例驹、磁盤高速緩存、緩沖區(qū)高速緩存退唠。是指在內(nèi)存中為磁盤塊設置的一個緩沖區(qū)鹃锈,保存了磁盤中某些塊的副本。當對文件系統(tǒng)進行操作的時候:
- 檢查所有的讀請求瞧预,看所需塊是否在塊高速緩沖中
- 如果在屎债,則可直接進行讀操作仅政;否則,先將數(shù)據(jù)塊讀入塊高速緩存盆驹,再拷貝到所需的地方圆丹。
- 由于訪問的局部性原理,當一數(shù)據(jù)塊被讀入塊高速緩存以滿足一個
I/O
請求時躯喇,和可能將來還會再次訪問到這一數(shù)據(jù)塊肛度。
5.3 如何實現(xiàn)塊高速緩存
-
塊高速緩存的組織方式
說明:在塊高速緩存中有若干個數(shù)據(jù)塊扇丛,首先將這些塊使用一個雙向鏈表組織起來榔袋,當要訪問這個鏈的時候就將其從此鏈中拿出來请琳,然后掛接到鏈尾扁誓,而我們對于某個文件使用的塊要檢查其是否在高速緩存中凸丸,所以這里又使用塊號進行散列以提高檢查速度绅络。 塊高速緩存的置換問題(修改
LRU
)
因為此緩存的空間肯定是不會很大的挨队,所以當其滿時我們需要對其進行置換弧可。對于以后可能會再次使用的塊我們將其放在鏈尾蔑匣,而對于使用概率很小的塊可能就需要將其剔除。塊高速緩存的寫入策略
在文件系統(tǒng)中棕诵,我們需要考慮該塊是否會影響文件系統(tǒng)的一致性裁良。這里如前面所講,不同的操作系統(tǒng)采用了不同的一致性解決方案校套。-
提前讀取
- 思路:每次訪問磁盤价脾,多讀入一些磁盤塊
- 依據(jù):程序執(zhí)行的空間局部性原理
- 開銷:較小(只有數(shù)據(jù)傳輸時間)
- 具有針對性
5.4 Windows的文件訪問方式
一般有下面三種方式:
-
不使用文件緩存
- 普通方式
- 通過
Windows
提供的FlushFileBuffer
函數(shù)實現(xiàn)
-
使用文件緩存(塊高速緩存)
- 預讀取笛匙。每次讀取的塊大小侨把、緩沖區(qū)大小、置換方式
- 寫回妹孙。寫回時機選擇秋柄、一致性問題
-
異步模式
- 不再等待磁盤操作的完成。
- 使處理器和
I/O
并發(fā)工作
用戶對磁盤的訪問通過訪問文件緩存來實現(xiàn):
-
由
Windows
的Cache Manager
實現(xiàn)對緩存的控制- 讀取數(shù)據(jù)的時候預取
- 在
Cache
滿時蠢正,根據(jù)LRU
原則清除緩存的內(nèi)容 - 定期更新磁盤內(nèi)容使其與
Cache
一致(每秒)
-
write-back
機制- 在用戶要對磁盤寫數(shù)據(jù)時骇笔,只更改
Cache
中的內(nèi)容,由Cache Manager
決定何時將更新反映到磁盤
- 在用戶要對磁盤寫數(shù)據(jù)時骇笔,只更改
5.5 提高文件系統(tǒng)性能:合理分配磁盤空間
分配磁盤塊時嚣崭,把有可能順序存取的塊放在一起(盡量分配在同一柱面上笨触,從而減少磁盤臂的移動次數(shù)和距離)
說明:我們讀取文件系統(tǒng)時,每次都要先找到
i
節(jié)點區(qū)雹舀,然后再去找到文件位置芦劣,如果i
節(jié)點區(qū)在最外道,而相關文件在最里道说榆,則在讀取的時候磁臂就需要不斷的移動持寄,這樣顯示效率低下源梭。一種解決方案如(a)
,我們將i
節(jié)點區(qū)和相關文件放在距離較近的磁道上稍味;另一種是如(b)
废麻,首先將磁道分成了若干組,然后將i節(jié)點區(qū)也劃分成若干部分模庐,每一組磁道都有一個i
節(jié)點區(qū)烛愧,而每個文件都和其i
節(jié)點區(qū)在同一組,這樣磁臂也不需要很大的移動掂碱。
5.6 提高文件系統(tǒng)性能:磁盤調(diào)度
當有多個訪盤請求等待時怜姿,采用一定的策略,對這些請求的服務順序調(diào)整安排疼燥,從而降低平均磁盤服務時間沧卢,達到公平、高效的目的醉者。
- 公平
一個IO請求在有限時間內(nèi)滿足 - 高效
減少設備機械運動帶來的時間開銷
一次訪盤時間 = 尋道時間 + 旋轉(zhuǎn)延遲時間 + 傳輸時間
- 減少尋道時間
- 減少延遲時間
5.7 磁盤調(diào)度算法
例子:假設磁盤訪問序列:98但狭、183、37撬即、122立磁、14、124剥槐、65唱歧、67
,這些數(shù)字表示柱面號或磁道號粒竖。讀寫頭起始位置為53
颅崩。請計算磁頭服務序列和磁頭移動總距離(道數(shù))。下面使用幾種算法進行計算:
-
1蕊苗、先來先服務(
FCFS
)
按訪問請求到達的先后次序服務- 優(yōu)點:簡單沿后、公平
- 缺點:效率不高,相鄰兩次請求可能會造成最內(nèi)到最外的柱面尋道岁歉,使磁頭反復移動得运,增加了服務時間,對機械也不利锅移。
磁道服務序列和訪問序列一致熔掺,磁頭移動總距離為640
,平均80
非剃。
-
2置逻、最短尋道時間優(yōu)先(
Shortest Seek Time First
)
優(yōu)先選擇距當前磁頭最近的訪問請求進行服務,主要考慮尋道優(yōu)先备绽。- 優(yōu)點
改善了磁盤平均服務時間 -
缺點
造成某些訪問請求長期等待而得不到服務
- 優(yōu)點
-
3券坞、掃描算法(
SCAN
電梯算法)
當設備無訪問請求時鬓催,磁頭不動;當有訪問請求時恨锚,磁頭按一個方向移動宇驾,在移動過程中遇到的訪問請求進行服務,然后判斷該方向上是否有訪問請求猴伶,如果有則繼續(xù)掃描课舍;否則改變移動方向,并為經(jīng)過的訪問請求服務他挎,如此反復筝尾。其實是一種對距離和方向的折中算法。
-
4办桨、單向掃描算法(
C-SCAN
)
這是對掃描算法的一種改進筹淫。- 總是從零號柱面開始向里掃描
- 按柱面(磁道)位置選擇訪問者
- 移動臂到達最后一個柱面后,立即帶動讀寫磁頭快速返回到零號柱面
- 返回時不為任何的等待訪問者服務
- 返回后可再次進行掃描
主要的目的是減少了新請求的最大延遲呢撞。
- 5损姜、
N-step-SCAN
策略- 把磁道請求隊列分成長度為
N
的子隊列,每一次用SCAN
處理一個子隊列 - 在處理某一個隊列時狸相,新請求添加到其他子隊列中
- 如果最后剩下請求數(shù)小于
N
薛匪,則它們?nèi)慷紝⒃谙乱淮螔呙钑r處理 -
N
值比較大時捐川,其性能接近SCAN
脓鹃;當N = 1
時,即FIFO
- 把磁道請求隊列分成長度為
主要是為了解決磁頭臂的粘性問題古沥。
- 6瘸右、
FSCAN
策略- 使用兩個子隊列
- 掃描開始時,所有請求都在一個隊列中岩齿,而另一個隊列為空
- 掃描過程中太颤,所有新到的請求都放入另一個隊列中
- 對新請求的服務延遲到處理完所有老請求之后
主要是為了解決磁頭臂的粘性問題。本算法及以上都是對磁臂移動的優(yōu)化算法盹沈。
- 7龄章、旋轉(zhuǎn)調(diào)度算法
根據(jù)延遲時間來決定執(zhí)行次序的調(diào)度。一般有三種情況:- 若干等待訪問請求訪問同一磁頭上的不同扇區(qū)
- 若干等待訪問請求訪問不同磁頭上的不同扇區(qū)
- 若干等待訪問請求訪問不同磁頭上的相同扇區(qū)
解決方案: - 對于前兩種情況:總是讓首先到達讀寫磁頭位置下的扇區(qū)先進行傳送操作
- 對于第三種情況:這些扇區(qū)同時到達讀寫磁頭位置下乞封,可任意選擇一個讀寫磁頭進行傳送操作
5.8 提高文件系統(tǒng)性能:信息優(yōu)化分布
記錄在磁道上的排列方式也會影響輸入輸出操作的時間做裙。
說明:如果信息是按左邊那樣分布的,那么如果首先讀到
1
號記錄肃晚,然后花5ms
處理锚贱,但是此時磁盤已經(jīng)轉(zhuǎn)到了4
號記錄,于是如果我們要處理2
號記錄关串,則必須將4拧廊、5监徘、6、7吧碾、8
都旋轉(zhuǎn)過去之后才能處理2
號記錄凰盔;而如果信息是按右邊那樣分布的,當處理完1
號記錄倦春,而此時磁盤也剛好旋轉(zhuǎn)到了2
號記錄處廊蜒,這樣就能極大的提高文件系統(tǒng)的性能。
5.9 提高文件系統(tǒng)性能:記錄的成組與分解
- 記錄的成組
把若干個邏輯記錄合成一組存放在一塊的工作 - 進行成組操作時必須使用內(nèi)存緩沖區(qū)溅漾,緩沖區(qū)的長度等于邏輯記錄長度乘以成組的塊因子(成組的長度)山叮。
- 成組的目的:提高了存儲空間的利用率;減少了啟動外設的次數(shù)添履,提高系統(tǒng)的工作效率屁倔。
- 記錄的分解
從一組邏輯記錄中把一個邏輯記錄分離出來
典型的例子就是目錄文件的存儲。
5.10 提高文件系統(tǒng)性能:RAID技術
起始就是獨立磁盤冗余陣列(Redundant Arrays of Independent Disks
)暮胧,就是將多塊磁盤按照一定要求構成一個獨立的存儲設備锐借。目的就是提高可靠性和性能。在實現(xiàn)時往衷,需要考慮存儲系統(tǒng)的速度钞翔、容量、容錯席舍、數(shù)據(jù)災難發(fā)生后的數(shù)據(jù)恢復布轿。
-
數(shù)據(jù)是如何組織的
- 通過把多個磁盤組織在一起,作為一個邏輯卷提供磁盤跨越功能
- 通過把數(shù)據(jù)分成多個數(shù)據(jù)塊来颤,并行寫入/讀出多個磁盤汰扭,以提高數(shù)據(jù)傳輸率(數(shù)據(jù)分條
stripe
) - 通過鏡像或校驗操作,提供容錯能力(冗余信息的保存)
- 最簡單的組織方式是鏡像福铅,最復雜的是塊交錯校驗萝毛。
-
例1:
RAID 0
- 條帶化- 數(shù)據(jù)分布在陣列的所有磁盤上
- 有數(shù)據(jù)請求時,同時多個磁盤并行操作
-
充分利用總線寬帶滑黔,數(shù)據(jù)吞吐率提高笆包,驅(qū)動器負載均衡
這種方式?jīng)]有冗余信息保存,即無差錯控制略荡,性能是最佳的庵佣。
-
例2:
RAID 1
-鏡像- 最大限度保證數(shù)據(jù)安全和可恢復性
- 所有數(shù)據(jù)同時存在與兩塊磁盤的相同位置
- 磁盤利用率為
50%
數(shù)據(jù)的安全性是最好的,但是磁盤利用率較低撞芍。
-
例3:
RAID 4
-交錯塊奇偶校驗- 帶奇偶校驗
-
以數(shù)據(jù)塊為單位
數(shù)據(jù)保存在前四塊盤上秧了,而校驗信息保存在第五塊盤上。