考研408《操作系统》复习笔记,第四章《4.1.3 文件操作、文件共享、文件保护》
·
一、文件的操作
思维导图
注意:
- 所有下面这些的【文件操作】都是用到【系统调用】
- 那么第一章学过,【系统调用】一定会导致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、访问权限控制
【例题】
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐















































所有评论(0)