7.4 文件共享
L44
学习目标
文件共享通过有向无环图和符号链接实现,提高存储利用率。
- 基于有向无循环图实现文件共享:多个目录项指向同一索引结点,实现硬链接共享。
- 利用符号链接实现文件共享:创建特殊文件(符号链)指向共享文件的路径,访问时按路径查找。
- 硬链接与符号链接的区别:硬链接直接指向索引结点,符号链接通过路径名间接指向。
- 符号链接的问题:每次访问需读盘查找路径,开销大;需为每个链接配置索引结点,耗费空间。
原理 · 深入理解
7.4 文件共享
本节概览:先建立「文件共享」的框架,再依次展开下列小节。
- 基于有向无循环图实现文件共享
- 利用符号链接实现文件共享
7.4.1 基于有向无循环图实现文件共享
严格的树形结构目录中,每个文件只允许有一个父目录,由属主目录独占;其它用户要访问必须经过属主目录,共享是不对称的,因此树形目录不适合文件共享。
若允许一个文件有多个父目录(属于不同用户),即构成有向无循环图 DAG(Directed Acyclic Graph),便可用对称方式实现共享,而不必再通过属主目录。
实现 DAG 共享的关键是引用索引结点:文件的物理地址及其它属性不再放在目录项中,而是放在索引结点中;目录项只设文件名及指向相应索引结点的指针。
这样多个目录项可指向同一个索引结点,文件主与链接者通过各自的目录项共享同一索引结点,再由索引结点中的连接计数 N 记录共享者数量。
三个用户共享文件:C 创建新文件(文件主),其他用户通过链接共享该文件。
7.4.2 利用符号链接实现文件共享
符号链接方式也存在一些问题。
- 访问开销大:其它用户读共享文件时,系统按给定路径名逐个分量查找目录,直至找到索引结点,每次访问都可能多次读盘,启动磁盘频率高。
- 占用磁盘空间:要为每个共享用户建立一条符号链,链本身是一个文件,尽管很简单,仍需配置一个索引结点,耗费一定磁盘空间。
符号链接(Symbolic Linking)的基本思想:允许一个文件或子目录有多个父目录,但其中只有一个作为主(属主)父目录,其它几个父目录都通过符号链接方式与之相链接,简称链接父目录。
为使链接父目录 D5 共享文件 F8,由系统创建一个 LINK 类型的新文件,取名为 F,写入 D5 中。新文件 F 中只含被链接文件 F8 的路径名,这种链接方法称为符号链接,新文件中的路径名即符号链。
当用户通过 D5 访问被链接的文件 F8、且要读 LINK 类新文件时,请求被 OS 截获;OS 根据新文件中的路径名找到 F8,再对它进行读(写),从而实现用户对文件 F 的共享。
利用符号链的共享方式存在的问题。
- 其他用户读共享文件时,系统按文件路径名逐个分量查找目录,每次访问可能多次读盘,访问开销大
- 要为每个共享用户建立一条符号链,链本身也是文件,需配置索引结点,耗费磁盘空间
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
文件共享
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能举出嵌入式简化保护的一种做法。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
延伸思考
- 多租户物联网网关为何又要细粒度 ACL?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?