《操作系统笔记》--访问矩阵

文章目录

  • 访问矩阵
    • 切换
    • 复制,所有者与控制
    • 访问矩阵的实现
      • 全局表
      • 对象的访问列表
      • 域的能力列表
      • 锁-钥匙机制

访问矩阵

访问矩阵(access matrix):通用保护模型可以抽象为一个矩阵。矩阵的行表示域,列表示对象。每个矩阵条目包括访问权限的一个集合。
访问条目access(i,j)定义了执行在域Di中的进程可以针对对象Oj调用的操作集合。
如下图,有四个域和四个对象,即3个文件(F1,F2,F3)和一台激光打印机:
《操作系统笔记》--访问矩阵_第1张图片
执行在域D1中的进程可以读取文件F1,F3,执行在域D4中的进程与执行在域D1具有同样的特权,但是另外还可以写入文件1和F3。激光打印机只能由执行在域D2中的进程来访问。

切换

当切换一个进程从一个域到另一个域时,我们为域内对象执行操作switch(切换)。通过采用访问矩阵对象的域,可以控制域切换。
要使从域Di到Dj的切换是允许的,当且仅当访问权限switch属于access(i,j)。
如图:
《操作系统笔记》--访问矩阵_第2张图片
执行在域D2中的进程可以切换到域D3或域D4。域D4的进程可以切换到D1,而域D1的进程可以切换到D2

复制,所有者与控制

访问矩阵条目内容的受控更改需要三个附加操作:复制(copy)所有者(owner)控制(control)
复制(copy):复制访问矩阵的一个域(或行)的访问权限到另外一个的能力。通过访问权限后面附加的星号“*”来标记。

复制权限允许在列内,复制访问权限.

如图:
《操作系统笔记》--访问矩阵_第3张图片
执行在域D2中的进程可以复制读操作到与文件F2关联的任何条目。
分清楚是与文件F2关联的任何条目,而不是与域D2关联的任何条目
于是可以转换到下图:
《操作系统笔记》--访问矩阵_第4张图片
复制有两种附加变形:

  • 权限从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的任何条目任何权限
如图:
《操作系统笔记》--访问矩阵_第5张图片
域D1为F1的所有者,并且可以增加和删除列F1的任何有效权限。
同样,域D2为F2与F3的所有者,因此可以增加和删除列F1的任何有效权限。
所以可以改成图14-6b的样子
《操作系统笔记》--访问矩阵_第6张图片
复制与所有者权限允许进程修改列内的条目,那么,还需要一种机制来修改行内的条目。
控制权限:控制权限只能用于列对象。如果access(i,j)包含控制权限,则执行在域Di内的进程可以删除行j内的任何访问权限。
如图:
《操作系统笔记》--访问矩阵_第7张图片
假设14-4中的access(D2, D4)包含控制权限,那么,执行在域D2内的进程可以修改域D4
如图:
《操作系统笔记》--访问矩阵_第8张图片

访问矩阵的实现

全局表

全局表是访问矩阵的最简单实现,它包括一组有序三元组
当在域Di内对对象Oj进行操作M时,就在全局表中查找三元组i, Oj, Rk>,其中操作M属于Rk
如果遇到这个三元组,则操作允许继续,否则,就会引起异常或者错误。
缺点:表通常很大,所以不能存放在内存中,所以需要额外的I/O操作。

对象的访问列表

访问矩阵的每个列,可以实现为一个对象的访问列表。
每个对象的访问列表包括一组有序对,以定义具有非空访问权限集合的那些域。
当在域Di中对对象Oj尝试操作M时,搜索对象Oj的访问列表,查找条目i, Rk>,其中M属于Rk。如果找到条目,则允许操作,如果没有找到,则检查默认集合。如果默认集合有M, 则允许访问,否则,拒绝访问,并引起异常。

有时候为了提高效率,可以首先检查默认集合,然后搜索访问列表

默认集合:定义一个列表加上一个访问权限。

域的能力列表

**域的能力列表(capability list)**将每行与其域相关联,而不是将访问矩阵的列与对象按访问列表来关联。
域的能力列表是一个列表,由一组对象以及对象允许的操作组成。
对象表示通常采用物理名称或地址,称为能力(capability)。
当对对象Oj执行操作M时,进程执行操作M,从而执行对象Oj的能力作为参数。能力的简单拥有意味着允许访问。
为了提供固有保护,必须区分能力和其他对象类型。通常采用以下两种途径来区分能力和其他数据:

  • 每个对象都有一个标签(tag),以表示它是能力还是可以访问的数据。
  • 把与程序关联的地址空间分为两个部分。一部分包含程序的普通数据和指令,可由程序直接访问。另一部分包含能力列表,只能由操作系统访问。

锁-钥匙机制

**锁-钥匙方案(lock-key scgene)**是访问列表和能力列表的折中。
每个对象都有唯一的位模式列表,称为锁(lock)。类似的,每个域都有一个唯一的位模式列表,称为钥匙(key)。
列表的折中。
每个对象都有唯一的位模式列表,称为锁(lock)。类似的,每个域都有一个唯一的位模式列表,称为钥匙(key)。
执行在域中的进程可以访问一个对象,仅当该域具有匹配这个对象锁的的一个钥匙时。

你可能感兴趣的:(《操作系统概念》笔记,操作系统)