考研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、访问权限控制

【例题】

相关推荐
Mr.HeBoYan1 小时前
DPDK为什么越来越少使用rte_ring?——从Lock-Free到Run-to-Completion,重新理解现代DPDK架构演进(上)
linux·网络·算法·性能优化·架构·dpdk
CS创新实验室1 小时前
现代操作系统与大学教材的鸿沟:从理论抽象到工程实践的跨越
操作系统
云栖梦泽2 小时前
从 IMX415 摄像头驱动理解 Media Controller 框架
linux·开发语言·c++·嵌入式硬件
纳兰青华2 小时前
CentOS Stream 9 下载与安装完全指南:为什么它是当前最稳妥的选择?
linux
草邦设计开发团队_媒体资源平台2 小时前
Linux 稳定常驻启动 PHP 队列,服务器重启自动恢复
linux·服务器·php·队列执行
A_humble_scholar3 小时前
Linux(十六)从页表到线程封装:深入理解 Linux 线程的共享、控制与封装
linux
海盗12343 小时前
.NET编码规范03-C#命名规范大全
linux·服务器·.net
WZF-Sang3 小时前
TCP和UDP协议
linux·服务器·网络·c++·学习·tcp/ip·udp
做个文艺程序员4 小时前
Linux第11篇:存储管理——磁盘分区、LVM 与文件系统
linux·运维·服务器