《操作系統筆記》--訪問矩陣

訪問矩陣

訪問矩陣(access matrix):通用保護模型可以抽象爲一個矩陣。矩陣的行表示域,列表示對象。每個矩陣條目包括訪問權限的一個集合。
訪問條目access(i,j)定義了執行在域Di中的進程可以針對對象Oj調用的操作集合。
如下圖,有四個域和四個對象,即3個文件(F1,F2,F3)和一臺激光打印機:
圖14-3
執行在域D1中的進程可以讀取文件F1,F3,執行在域D4中的進程與執行在域D1具有同樣的特權,但是另外還可以寫入文件1和F3。激光打印機只能由執行在域D2中的進程來訪問。

切換

當切換一個進程從一個域到另一個域時,我們爲域內對象執行操作switch(切換)。通過採用訪問矩陣對象的域,可以控制域切換。
要使從域Di到Dj的切換是允許的,當且僅當訪問權限switch屬於access(i,j)。
如圖:
圖14-4
執行在域D2中的進程可以切換到域D3或域D4。域D4的進程可以切換到D1,而域D1的進程可以切換到D2

複製,所有者與控制

訪問矩陣條目內容的受控更改需要三個附加操作:複製(copy)所有者(owner)控制(control)
複製(copy):複製訪問矩陣的一個域(或行)的訪問權限到另外一個的能力。通過訪問權限後面附加的星號“*”來標記。

複製權限允許在列內,複製訪問權限.

如圖:
圖14-5a
執行在域D2中的進程可以複製讀操作到與文件F2關聯的任何條目。
分清楚是與文件F2關聯的任何條目,而不是與域D2關聯的任何條目
於是可以轉換到下圖:
圖14-5b
複製有兩種附加變形:

  • 權限從access(i,j)複製到access(k,j),然後權限從access(i,j)刪除。這種行爲可以稱爲權限遷移。
  • 還有一種就是限制複製權限的傳播。也就是說,當權限R從access(i,j)複製到access(k,j),只是創建了權限R**(而不是R)**。執行在域Dk中的進程不能進一步複製權限R。

系統可以只選擇這三種複製權限的一種,也可以提供所有3種並分別標識爲:複製(copy),遷移(transfer)以及有限複製(limited copy)

所有者權限:所有者權限控制增加新的權限和取消某些權限這些操作。
如果access(i,j)包括所有者權限,則執行在域Di中的進程可以增加和刪除列j的任何條目的任何權限。
注意是列j的任何條目任何權限
如圖:
圖14-6a
域D1爲F1的所有者,並且可以增加和刪除列F1的任何有效權限。
同樣,域D2爲F2與F3的所有者,因此可以增加和刪除列F1的任何有效權限。
所以可以改成圖14-6b的樣子
在這裏插入圖片描述
複製與所有者權限允許進程修改列內的條目,那麼,還需要一種機制來修改行內的條目。
控制權限:控制權限只能用於列對象。如果access(i,j)包含控制權限,則執行在域Di內的進程可以刪除行j內的任何訪問權限。
如圖:
在這裏插入圖片描述
假設14-4中的access(D2, D4)包含控制權限,那麼,執行在域D2內的進程可以修改域D4
如圖:
圖14-7

訪問矩陣的實現

全局表

全局表是訪問矩陣的最簡單實現,它包括一組有序三元組<domain, object, rights-set>。
當在域Di內對對象Oj進行操作M時,就在全局表中查找三元組<Di, Oj, Rk>,其中操作M屬於Rk
如果遇到這個三元組,則操作允許繼續,否則,就會引起異常或者錯誤。
缺點:表通常很大,所以不能存放在內存中,所以需要額外的I/O操作。

對象的訪問列表

訪問矩陣的每個列,可以實現爲一個對象的訪問列表。
每個對象的訪問列表包括一組有序對<domain, rights-set>,以定義具有非空訪問權限集合的那些域。
當在域Di中對對象Oj嘗試操作M時,搜索對象Oj的訪問列表,查找條目<Di, Rk>,其中M屬於Rk。如果找到條目,則允許操作,如果沒有找到,則檢查默認集合。如果默認集合有M, 則允許訪問,否則,拒絕訪問,並引起異常。

有時候爲了提高效率,可以首先檢查默認集合,然後搜索訪問列表

默認集合:定義一個列表加上一個訪問權限。

域的能力列表

**域的能力列表(capability list)**將每行與其域相關聯,而不是將訪問矩陣的列與對象按訪問列表來關聯。
域的能力列表是一個列表,由一組對象以及對象允許的操作組成。
對象表示通常採用物理名稱或地址,稱爲能力(capability)。
當對對象Oj執行操作M時,進程執行操作M,從而執行對象Oj的能力作爲參數。能力的簡單擁有意味着允許訪問。
爲了提供固有保護,必須區分能力和其他對象類型。通常採用以下兩種途徑來區分能力和其他數據:

  • 每個對象都有一個標籤(tag),以表示它是能力還是可以訪問的數據。
  • 把與程序關聯的地址空間分爲兩個部分。一部分包含程序的普通數據和指令,可由程序直接訪問。另一部分包含能力列表,只能由操作系統訪問。

鎖-鑰匙機制

**鎖-鑰匙方案(lock-key scgene)**是訪問列表和能力列表的折中。
每個對象都有唯一的位模式列表,稱爲鎖(lock)。類似的,每個域都有一個唯一的位模式列表,稱爲鑰匙(key)。
列表的折中。
每個對象都有唯一的位模式列表,稱爲鎖(lock)。類似的,每個域都有一個唯一的位模式列表,稱爲鑰匙(key)。
執行在域中的進程可以訪問一個對象,僅當該域具有匹配這個對象鎖的的一個鑰匙時。

發佈了45 篇原創文章 · 獲贊 6 · 訪問量 4870
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章