(一)文件操作
VFS 在读写操作之外提供了文件打开和关闭操作。
1、打开操作(open)——负责文件路径名解析和权限检查
打开操作创建file结构,一个 file 结构描述一个进程对一个文件或一种 I/O 操作方式,成为打开文件对象。ucore 的 file 结构:
ucore 为每个进程准备了一个 file 结构数组,称为文件描述符表:
idleproc 进程的 files_struct 是单独建立的,其余进程是从父进程复制的。
文件打开操作 open 。(具体过程见 ppt)
获得文件描述符后可对其进程行I/O 操作。在所有的文件I/O操作中,用文集爱你描述符代替文件名,避免路径名的重复解析。读写操作后会自动调整读写头的位置。
2、关闭操作(close)——释放打开文件对象
具体过程见 ppt。
3、文件读操作(read)
具体过程见 ppt。
4、文件写操作(write)
具体过程见 ppt。
文件读写两种方式:①直接读写(read、write);②间接读写(mmap 类系统调用--> 将文件映射到进程,读写时缺页,将工作交给虚拟内存管理)
5、
6、Linux 的 open、close、read、write、seek (具体见 ppt)
关闭操作不会删除文件,不能再用描述符使用,还在系统中还可以再次打开。问阿金一旦被删除,就永远从系统消失了。write 返回的是真正写入的字节数,可能少于 count 参数。seek 将文件fd的读写头重定位到参数 offset 处。
(二)文件缓存/共享
1、文件缓存
暂存文件内容的内存称为文件缓存。
建立缓存的方法——链表、Hash 表、基数树(类似于多级页表)
2、文件共享
共享 --> 一个文件能被多个用户或进程使用 -->可以实现进程间通信。
文件属主(owner)——文件拥有者;文件组(group)——一组用户,可共享该文件;其他用户(others)——既不是属主也不是同组用户
文件的共享权限:
多个用户同时存取一个共享文件 --> 保持文件的一致性(完整性) --> 与进程的同步密切相关
3、文件保护
保护 -->文件存取控制,限制用户对文件的存取操作。
对文件的操作通常包括:读、写、执行、执行、追加、删除、列表、拷贝、换名等。
(1)直接保护方法
为每个文件或者目录定义一个存取控制表ACL(Access Control List),规定各用户可执行的操作。
浓缩 ACL——把用户分为三类(文件属主、同组用户、其他用户),值规定每类用户的存取权限。将文件的存取权限浓缩为三种(读、写、执行)。
若觉得9位太粗,可以加 ACL,Linux 对两种均支持。--> 位图 + ACL
Windows --> DACL(自主存取控制表)
(2)其他保护方法
4、文件恢复
保证文件系统可靠性 --> eg:RAID、备份与恢复
备份方法:全量备份、增量备份 --> 异地备份、灾难恢复
由于缓存,文件系统的数据同时存在于内存和外存,需要保证一致性 --> 事务和日志。
(1)事务:完成一个特定任务所需的一组操作称为一个事务
为保证文件系统的一致性,事务应具有原子性。 --> 需在外存增加一个日志
(2)日志:记录各种事务
EXT4上增加了日志,EXT3还没有。
日志与事务能够保证系统的一致性。
网友评论