从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

    • 我的操作系统学习笔记

    • 我的操作系统实验笔记

    • 操作系统网课-王道考研

      • 0_课程白嫖指南
      • 1_1_操作系统的概念(定义)、功能和目标
      • 1_2_操作系统的特征
      • 1_3_操作系统的发展与分类
      • 1_4_操作系统的运行机制与体系结构
      • 1_5_中断和异常
      • 2_1_6_系统调用
      • 2_1_1_进程的定义、组成、组织方式、特征
      • 2_1_2_进程的状态与转换
      • 2_1_3_进程控制
      • 2_1_4_进程通信
      • 2_1_5_线程概念和多线程模型
      • 2_2_1_处理机调度的概念、层次
      • 2_2_2_进程调度的时机、切换与过程、方式
      • 2_2_3_调度算法的评价指标
      • 2_2_4_FCFS、SJF、HRRN调度算法
      • 2_2_5_调度算法:时间片轮转、优先级、多级反馈队列
      • 2_3_1_进程同步、进程互斥
      • 2_3_2_进程互斥的软件实现方法
      • 2_3_3_进程互斥的硬件实现方法
      • 2_3_4_信号量机制
      • 2_3_5_用信号量实现进程互斥、同步、前驱关系
      • 2_3_6_生产者-消费者问题
      • 2_3_7_多生产者-多消费者问题
      • 2_3_8_吸烟者问题
      • 2_3_9_读者-写者问题
      • 2_3_10_哲学家进餐问题
      • 2_3_11_管程
      • 2_4_1_死锁的概念
      • 2_4_2_死锁的处理策略—预防死锁
      • 2_4_3_死锁的处理策略—避免死锁
      • 2_4_4_死锁的处理策略—检测和解除
      • 3_1_1_内存的基础知识
      • 3_1_2_内存管理的概念
      • 3_1_3_覆盖与交换
      • 3_1_4_连续分配管理方式
      • 3_1_5_动态分区分配算法
      • 3_1_6_基本分页存储管理的基本概念
      • 3_1_7_基本地址变换机构
      • 3_1_8_具有快表的地址变换机构
      • 3_1_9_两级页表
      • 43_3_1_10_基本分段存储管理方式
      • 3_1_11_段页式管理方式
      • 3_2_1_虚拟内存的基本概念
      • 3_2_2_请求分页管理方式
      • 3_2_3_页面置换算法
      • 3_2_4_页面分配策略
      • 4_1_1_初识文件管理
      • 4_1_2_文件的逻辑结构
      • 4_1_3_文件目录
      • 4_1_4_文件的物理结构(上)
      • 4_1_4_文件的物理结构(下)
      • 54_4_1_5_文件存储空间管理
      • 4_1_6_文件的基本操作
      • 4_1_7_文件共享
        • 硬连接
        • 软链接
        • 小结
      • 4_1_8_文件保护
      • 4_1_9_文件系统的层次结构
      • 4_2_1_磁盘的结构
      • 4_2_2_磁盘调度算法
      • 4_2_3_减少磁盘延迟时间的方法
      • 4_2_4_磁盘的管理
      • 5_1.2_I-O 控制器
      • 5_1.3_I-O 控制方式
      • 65_5_1_1_I-O 设备的概念和分类
      • 5_1_4_I-O 软件层次结构
      • 5_1_5_I-O 核心子系统
      • 5_1_6_假脱机技术
      • 5_1_7_设备的分配与回收
      • 5_1_8_缓冲区管理
  • Linux

  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • 操作系统
  • 操作系统网课-王道考研
2023-05-15
目录

417_文件共享

# 4.1_7_文件共享

‍各位同学大家好,在这个小节中我们会学习操作系统应该怎么实现文件共享的功能,‍‍用户可以使用操作系统提供的文件共享功能,‍‍然后方便的实现多个用户共享的使用同一个文件这样的事情。‍‍

‍

那文件共享的实现方式有这样的两种,一种是基于索引节点的共享方式,‍‍又叫硬链接的方式,另一种是基于符号链的共享方式,又叫软链接的共享方式。‍‍

这个地方大家需要注意,多个用户共享同一个文件意味着系统当中其实只有一份文件数据,‍‍并且只要某一个用户修改了这个文件数据,其他用户也可以看到文件数据的变化,‍‍

而与共享比较容易混淆的是复制的概念。‍‍如果是多个用户都复制了同一个文件的话,‍‍那么系统当中其实是有好几份文件数据,其中一个用户修改了自己的那一份‍‍文件数据,其他用户的文件数据其实并不会受到影响,所以这是复制和共享的一个区别。‍‍

‍

​

# 硬连接

‍ 接下来我们来介绍实现共享的第一种方式,也就是基于索引节点的共享方式,硬连接的方式。‍‍索引节点的知识咱们是在之前文件目录的小节当中进行介绍的,它其实就是一种文件目录的瘦身策略。‍‍由于我们在根据路径检索文件的时候,只需要使用文件名,所以我们可以把除了文件名之外的其他信息都放到索引节点当中,‍‍这样的话目录项就可以变得更小,它只需要包含文件名,还有指向索引节点的一个指针就可以了。‍‍

采用索引节点的这种策略能够带来什么好处,大家还能不能回忆起来呢?‍‍假设此时有一个用户 user1,他创建了一个新的文件叫做 AAA,‍‍那么这个文件会对应一个索引节点,‍‍并且这个索引节点当中会包含这个文件的物理地址,还有文件相关的其他的一些属性,也是包含在索引节点当中的。‍‍

另外索引节点当中还会设置一个叫做链接计数的变量,就是这个地方的 count 用于表示‍‍此时链接到这个索引节点上的用户目录项到底有多少个,什么意思呢?‍‍假设此时有第二个用户,他想共享的使用这个文件,那么用户的目录当中‍‍也会有一个目录项是指向这个文件的索引节点的,‍‍由于此时有两个目录项是指向索引节点的,所以 Count 的值应该加一也就是变成二,‍‍count 等于 2,也就说明此时有两个用户正在共享的使用这个文件。‍‍

这就是基于索引节点的共享方式,就是要让不同用户的目录项指向同一个文件的索引节点,并且在这个地方大家会发现,‍‍不同的用户对于这个文件起的名字其实是可以不同的,在用户一的目录下这个文件名叫 AAA,‍‍而用户二的目录下这个文件名叫 BBB,

​ ‍

如果说采用的是这种共享方式的话,在删除文件的时候需要注意一些小细节,‍‍如果一个用户决定删除这个文件,那么其实系统在背后做的只是删除了用户对应的文件的目录项,‍‍然后把这个链接给断掉,相应的索引节点的 count 值也需要减一,‍‍不过由于此时 count 的值是大于 0 的,说明此时还有别的用户正在使用这个文件,因此‍‍并不可以直接把这个文件的数据给干掉,‍‍除非 count 值变为了 0 的时候,这个文件还有它的索引节点,这些数据才可以真正的从系统当中删除。‍‍所以这是硬连接的共享方式当中,在删除文件的时候需要注意的一个细节。

​ ‍

# 软链接

接下来我们来看第二种,‍‍基于符号链的这种共享方式,又叫软链接的共享方式,我们还是接着刚才的例子继续往下分析。‍‍假设此时系统中有两个用户,user1 和 user2 正在使用硬链接的方式在共享的使用文件一,‍‍而另一个用户 user3 想使用软链接的方式来共享这个文件一,‍‍那么 user3 会建立一个新的文件,这个文件是一种特殊的 link 型的文件,‍‍这个文件当中记录了文件一的存放路径,比如说我们可以通过 c:/user1/AAA 这样的路径找到文件一,当然这个地方的存放路径也可以保存为‍‍ c 盘下面的 user2 这个目录,然后再下面的 BBB 这个文件,‍‍用这样的路径也是可以找到文件一的。‍‍

其实这种 link 类型的文件就有点类似于 windows 操作系统当中的快捷方式。‍‍ user3 想要访问 CCC 这个文件的时候,操作系统首先是判断 CCC 它属于 link 类型的文件,于是‍‍会根据这个文件当中记录的路径的信息,一层一层的来查找目录,‍‍然后最终找到 AAA 目录项,‍‍于是就可以开始访问文件一了,

因此如果采用的是软链接的共享方式的话,‍‍并不是把自己的目录项直接指向文件的索引节点,‍‍而是创建了一个新的 link 型的文件,然后 link 型的文件当中记录了文件的存放路径,‍‍之后操作系统会根据这个路径来找到想要共享的文件。‍‍

​ ‍

我们来看一下 windows 操作系统当中快捷方式的例子,比如说我的 QQ 程序是安装在这样的一个路径下的,‍‍然后在这个路径下有个 QQ 的启动程序点 exe 的一个文件,‍‍我们可以右键点击这个点 exe 文件,然后发送到桌面快捷方式,‍‍于是在桌面当中就会出现一个这样的快捷方式,并且我们可以给快捷方式随便取一个名字,‍‍

之后大家可以单击右键,然后查看一下快捷方式的属性。‍‍大家就会发现‍‍快捷方式其实就是用软链接,也就是用一个路径的方式把它链接到了‍‍ QQ 的启动程序那个地方。当我们双击桌面上的快捷方式的时候,其实操作系统会判断‍‍它是一个快捷方式类型的文件,也就是一种 link 类型的文件,于是会根据‍‍这个文件当中记录的路径信息来一层一层的往下检索目录,‍‍最终找到 QQ 的启动程序。‍‍大家在休息的时候可以自己试一下 windows 操作系统快捷方式的属性这些东西,‍‍然后通过你就可以理解软链接到底是怎么回事了。‍‍

​

接下来我们再来分析一下,如果采用软链接的方式共享文件的话,删除一个文件会不会对软链接进行造成什么影响?‍‍假设此时 user1 和 user2 都不再需要使用文件一,‍‍由于此时 Count 值变为了 0,因此这个文件还有它的索引节点就可以直接被干掉了。‍‍那此时如果 user3 访问 CCC 这个 link 型的文件,‍‍同样的操作系统首先会检查 c 盘下面的 user 这个目录,‍‍然后尝试从中找到 IAA 这个文件对应的文目录项。‍‍但是由于此时 AAA 目录项已经被删除了,所以通过这个路径其实已经找不到文件一了,‍‍因此软链接就失效了。

​ ‍

我们还是结合 windows 操作系统为例,我们把路径下的‍‍ QQ 的启动程序把它给删除。‍‍此时如果我们双击打开桌面上的快捷方式的话,‍‍操作系统就会提示我们此快捷方式所指向的项目 QQ .exe‍‍已经删除,也就是说通过软连接当中记录的路径已经找不到这个文件了,这个文件已经被删除了,‍‍因为这个文件名对应的目录项已经没了。

​

# 小结

那么这就是硬链接和软链接这两种文件共享方式。‍‍大家需要重点理解的是硬链接这种共享方式,在删除文件的时候需要注意的一些事情,‍‍只有 count 的值变为 0 的时候,才可以真正删除文件的数据,还有文件的索引节点,否则会导致指针悬空的情况。‍‍

而转链接或者叫符号链接的这种共享方式,大家只需要自己‍‍回去玩一下自己的 windows 操作系统的快捷方式,其实就可以理解了。‍‍它无非就是在 link 型文件当中记录了我们要共享的文件存放的路径到底是什么,然后操作系统会根据路径一层一层的查找目录,‍‍最终就可以找到需要共享的文件。‍‍

不过需要注意的是,如果软链接所指向的共享文件已经被删除的话,‍‍那么 Link 型的文件其实依然是存在的,‍‍只不过通过这个文件当中记录的路径,再去查找共享文件的时候,就会发生查找失败的‍‍情况,因为此时已经找不到共享文件所对应的目录项了。‍‍另外由于软连接这种方式,每一次在访问共享文件的时候都需要一层一层的去查询目录。‍‍通过之前的讲解,大家也知道在一层一层的查询目录的过程当中,其实是需要磁盘的 lO 操作的,‍‍因此通过软链接的方式去访问一个共享文件的速度,会比硬链接要更慢。‍‍

​ ‍

上次更新: 2025/5/17 12:26:09
4_1_6_文件的基本操作
4_1_8_文件保护

← 4_1_6_文件的基本操作 4_1_8_文件保护→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式