考研408《操作系统》复习笔记,第四章《4.2.2 文件操作、文件共享、文件保护》

一、文件的操作

思维导图

注意:

  • 所有下面这些的**【文件操作】都是用到【系统调用】**
    • 那么第一章学过,【系统调用】一定会导致CPU【变态(用户态--->内核态)】
    • 而【文件在内存】=【资源可用】
    • 【文件不在内存】=【资源暂时不可用】
      • 【进程】会由【运行态------>阻塞态(也可叫睡眠等待态)】

1、创建文件:creat系统调用

做2件事:

  • 1、在【外存磁盘】找到该类型文件【所需空间】
  • 2、在创建文件的那层目录的【目录文件】里添加【目录项】
    • 目录项记录了【文件名】、【该文件在外存存放的信息】

2、删除文件:delete系统调用

做3件事:

  • 1、根据该文件,到外存【找到此文件所在的目录文件】以及【目录文件里该文件所在的目录项】
  • 2、根据目录项信息,去【外存释放该文件占用的磁盘块】
  • 3、最后回到目录文件【删除目录项】

3、打开文件:open系统调用

  • (文件已经被创建在磁盘,进程【读】/【写】前,要先打开它)

    • 1、根据该文件到外存找到其目录文件,再找到【该文件在目录文件所在的目录项】
    • 2、将【该文件的目录项】复制到【内存里的 "文件打开表" 】(注意是目录项,也就是"它在哪";而是文件本身)
      • 并将【该目录项在 "文件打开表" 里的编号】发给进程(该"编号"也叫"索引号"、"文件描述符" )
      • 之后每次查找该文件都可直接去【打开文件表】找到它的信息,再去外存取文件

【文件打开表】

  • 【系统文件打开表】
    • 整个系统只有1个【系统打开文件表】:供所有进程查找文件位置信息
    • 里面有一个【打开计数器】:记录有几个进程打开了该文件
    • 注意:有的题目会提到【当前工作目录】,可以等价理解为【系统文件打开表】
  • ​​​​​​​【用户文件打开表】
    • 各个进程有自己的【用户打开文件表】 :
      • 进程在打开一次该文件后,可以复制【系统打开文件表里的 该表项】存到【自己的用户打开文件表】,后续【方便自己读文件】
      • 注意 :
        • 不同进程的【用户文件打开表】中,对同一文件的表项,内容并不一样!!!
        • 而且不止是【read读操作】会打开文件,【write写操作】也会!!
  • 注意

4、关闭文件:close系统调用

​​​​​​​做两件事:

  • 1、把【进程的 打开文件表】里【该文件的表项】删除
  • 2、在【系统的 打开文件表】里把【该文件的打开计数器值-1】
  • 注意:【参数不需要:文件名】!!!!

【超级超级大重点,真题超级大误区!!】

  • 1、这里不管是【用户打开表】、【系统打开表】,都在【内存】!!!!!!!!!
    • 当进程【close关闭】一个文件时,只是对【内存里的这些表】里面【计数器的count-1】
  • 2、下面要学的【文件共享------硬链接】
    • 这个【链接计数器count】才是在该文件的【索引节点】里的,而索引节点在【外存磁盘】!!!
    • 【close】关闭文件跟它无关!!!!

5、读文件:read系统调用

就1件事:

  • 去【进程的 打开文件表】找到该文件表项,传入相应参数到read()系统调用来读入数据、并展示在显示屏
    • 注意:【参数不需要:文件名】!!!!!
    • 而且不止是【read读操作】会打开文件,【write写操作】也会!!

6、写文件:write系统调用

就1件事:

  • 去【进程的 打开文件表】找到该文件表项,传入相应参数到write()系统调用来写入数据,write()系统调用把新数据写回到外存里,使该文件在内存、外存保持内容一致
  • 注意:【参数不需要:文件名】!!!!
  • 而且不止是【read读操作】会打开文件,【write写操作】也会!!

【总结】

【重要的几个系统调用参数】

【例题】

二、文件共享

  • 区分概念:
    • 共享:
    • 复制:

1、【硬链接】:基于索引节点的共享方式

重点记忆方法:多个进程用【同一个文件】

  • 注意:【删除文件】一定要有前提条件:
    • 【count=0】才可以!!否则先删除文件,count还不为0就表示还有指针指向空节点

【超级超级大重点,真题超级大误区!!】

  • 1、这里不管是【用户打开表】、【系统打开表】,都在【内存】!!!!!!!!!
    • 当进程【close关闭】一个文件时,只是对【内存里的这些表】里面【计数器的count-1】
  • 2、下面要学的【文件共享------硬链接】
    • 这个【链接计数器count】才是在该文件的【索引节点】里的,而索引节点在【外存磁盘】!!!
    • 【close】关闭文件跟它无关!!!!

2、【软连接】:利用符号链接实现共享

重点记忆方法:软链接进程 和 其他进程用【不同的文件】!!!

  • 重点:软连接是要共享的进程自己创建【独立的链接文件】指向该共享文件
    • 【独立的链接文件】它不是真的指针、他只是一个记录了【共享文件路径】的特殊文件
      • 他就是共享文件的 "快捷方式"
      • 因此【删除link文件】、【增加link文件】和原共享文件的索引节点的count值一丁点关系没有
    • 【软链接count值】:而【link文件】本身也属于文件,那么肯定一个进程的link文件肯定也会对应一个索引节点,索引节点里会有这个link文件的count值,但是他永远只会是1,因为不会有别的进程硬链接到这个link文件上
      • 删除【共享文件的 硬链接】,不影响【软连接】
      • 删除、增加【共享文件的 软连接】,不影响【原共享文件】、【硬链接】
      • 删除【原共享文件】,也不会删除【软链接】!

【例题】

三、文件保护

1、口令保护

2、加密保护

3、访问权限控制

【例题】

相关推荐
律宏阔4 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔4 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴4 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千4 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei375 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei375 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei375 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW5 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW5 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
yunwei375 小时前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化