目录
6.6 文件共享和访问控制
1、同时存取
2、存取权限
3、文件共享的实现
6.6.1 基于索引结点的共享方式
1、基本思想
2、具体操作
6.6.2 利用符号链接实现文件共享
6.6.3 利用 URL 实现文件共享
6.7 文件保护
6.6 文件共享和访问控制
文件共享的有效控制涉及两个方面:
- 同时存取(Simultaneous Access)
- 存取权限(Access Rights)
1、同时存取
允许多个用户同时读文件内容,但不允许多个用户同时修改文件内容。
某一共享用户修改文件内容时,可以将整个文件作为临界资源,锁定整个文件,不允许其它共享用户同时读/写文件。也可以仅仅锁定指定的一条记录,允许其它共享用户读/写该文件的其它记录。后者的并发性能更好。
控制对文件的同时存取涉及进程的同步与互斥问题。
2、存取权限
授权用户以合法的方式访问文件,包括:
① 执行(Execution):用户可以装载并执行程序,但不允许拷贝程序内容。
② 读(Reading):允许用户读文件内容,包括拷贝和执行文件。某些系统严格地将浏览文件内容和拷贝权限分开,可以控制文件只能被浏览(显示),不能被拷贝。
③ 追加(Appending): 允许用户向文件添加数据,通常只能将数据添加到文件尾。但是,不能修改或删除文件内容。例如,超市收银员只能将新结帐的数据添加到文件中,不允许其修改或删除已有的数据。
④ 更新(Updating):允许用户修改、删除、增加文件内容。包括创建文件、重写文件的全部或部分内容、移动文件的全部或部分数据等操作。
⑤ 更改权限 (Changing protection):一般只有文件主才能更改共享该文件的其他用户对该文件的存取权限。有的系统允许文件主将更改文件存取权限赋予其他某个用户,但必须限制授权用户更改的权限范围。
⑥ 删除 (Deletion):允许用户删除文件。
3、文件共享的实现
文件共享的实质:是指可以从不同地方打开同一个文件。打开文件的首要步骤就是找到文件的目录项,读取文件在外存的起始地址。实现文件共享的方式:
- 基于索引结点的共享方式
- 利用符号链实现文件共享
6.6.1 基于索引结点的共享方式
1、基本思想
在树形结构的目录中,当多个用户要共享一个文件或子目录时,必须将被共享的文件或子目录链接到这些用户的目录中。此时的目录结构已不再是树形,而是 有向非循环图(DAG)
2、具体操作
当多个用户要共享一个文件时,
① 在自己的文件目录中新建一个目录项。填写该目录项中的文件名,可以直接用共享文件的原名,也可以使用其它文件名;填写该目录项中的索引节点指针,将其指向共享文件的索引节点。
② 在共享文件的索引节点中设置一个链接计数器 count,用于表示链接到本索引节点上的用户目录项的数目。
- 当用户 C 创建一个新文件时,TA 便是该文件的所有者,此时将 count 置 1;
- 当用户 B 要共享此文件时,count+1=2,但文件主仍然是用户 C 。
由上图可见,即使用户 C 不再需要此文件了,它也并不会把文件真正地 “删除”。
6.6.2 利用符号链接实现文件共享
符号链接:创建一个 LINK 类型的新文件,并添加到共享用户目录中,该文件仅包含被链接文件的路径名,称该链接方法为符号链接。
当用户正要读 LINK 类新文件中的路径信息时,此要求将被 OS 截获,OS 根据新文件中的路径名去找被链接的文件,然后对它进行读/写。
只有文件主才拥有指向被链接文件索引节点的指针,而共享该文件的其它用户则只有该文件的路径名,并不拥有指向其索引节点的只占。这样,也就不会发生在文件主删除一共享文件后留下一悬空指针的情况。
符号链接的优缺点
优点:使用路径名就能方便地链接任一文件。
缺点:
- 访问共享文件时开销大(沿路径访问需要多次读盘;耗费磁盘空间)
- 每一共享文件都要增加一 LINK 类文件(其索引节点耗费磁盘空间)
6.6.3 利用 URL 实现文件共享
URL (Uniform Resource Locator,统一资源定位器) 是 Internet 上用来链接超文本文件的一种方法。它可以链接同一台计算机中的本地文件,也可链接 Internet 中任何主机上的远程文件。
一个完整的 URL 包括访问文件的协议、文件所在的主机域名、目录路径名和文件名几部份。例如:http://www.uestc.edu.cn/templates/index2k3/index.html
Internet 上任何主机的用户都可以通过该 URL 地址链接此文件,使全球计算机用户都可以通过 Internet 共享该文件。
当通过该 URL 地址连接到电子科技大学 WWW 服务器时,用户计算机就会收到该服务器传输来的 index. html 文件。
再触发该文件中的 “中文版 ”超链,该服务器又传来另一个文件。
6.7 文件保护
不同对象允许实施的操作各不相同。
例如,文件可施加读、写、执行等操作,信号量只能施加 wait() 和 signal() 操作。
因此,系统为所有对象设置一个允许进程实施操作的操作集,任何对对象的操作必须符合操作集中的规定,防止未授权进程访问对象。