【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复

(一)文件操作

VFS 在读写操作之外提供了文件打开和关闭操作。

1、打开操作(open)——负责文件路径名解析和权限检查

打开操作创建file结构,一个 file 结构描述一个进程对一个文件或一种 I/O 操作方式,成为打开文件对象。ucore 的 file 结构:

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第1张图片

ucore 为每个进程准备了一个 file 结构数组,称为文件描述符表:

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第2张图片

idleproc 进程的 files_struct 是单独建立的,其余进程是从父进程复制的。

文件打开操作 open 。(具体过程见 ppt)

获得文件描述符后可对其进程行I/O 操作。在所有的文件I/O操作中,用文集爱你描述符代替文件名,避免路径名的重复解析。读写操作后会自动调整读写头的位置。

2、关闭操作(close)——释放打开文件对象

具体过程见 ppt。

3、文件读操作(read)

具体过程见 ppt。

4、文件写操作(write)

具体过程见 ppt。

文件读写两种方式:①直接读写(read、write);②间接读写(mmap 类系统调用--> 将文件映射到进程,读写时缺页,将工作交给虚拟内存管理)

5、

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第3张图片

6、Linux 的 open、close、read、write、seek (具体见 ppt)

关闭操作不会删除文件,不能再用描述符使用,还在系统中还可以再次打开。问阿金一旦被删除,就永远从系统消失了。write 返回的是真正写入的字节数,可能少于 count 参数。seek 将文件fd的读写头重定位到参数 offset 处。

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第4张图片

(二)文件缓存/共享

1、文件缓存

暂存文件内容的内存称为文件缓存。

建立缓存的方法——链表、Hash 表、基数树(类似于多级页表)

2、文件共享

共享 --> 一个文件能被多个用户或进程使用 -->可以实现进程间通信。

文件属主(owner)——文件拥有者;文件组(group)——一组用户,可共享该文件;其他用户(others)——既不是属主也不是同组用户

文件的共享权限:

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第5张图片

多个用户同时存取一个共享文件 --> 保持文件的一致性(完整性) --> 与进程的同步密切相关

3、文件保护

保护 -->文件存取控制,限制用户对文件的存取操作。

对文件的操作通常包括:读、写、执行、执行、追加、删除、列表、拷贝、换名等。

(1)直接保护方法

为每个文件或者目录定义一个存取控制表ACL(Access Control List),规定各用户可执行的操作。

浓缩 ACL——把用户分为三类(文件属主、同组用户、其他用户),值规定每类用户的存取权限。将文件的存取权限浓缩为三种(读、写、执行)。

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第6张图片

若觉得9位太粗,可以加 ACL,Linux 对两种均支持。--> 位图 + ACL

Windows --> DACL(自主存取控制表)

(2)其他保护方法

4、文件恢复

保证文件系统可靠性 --> eg:RAID、备份与恢复

备份方法:全量备份、增量备份 --> 异地备份、灾难恢复

由于缓存,文件系统的数据同时存在于内存和外存,需要保证一致性 --> 事务和日志。

(1)事务:完成一个特定任务所需的一组操作称为一个事务

为保证文件系统的一致性,事务应具有原子性。 --> 需在外存增加一个日志

(2)日志:记录各种事务

EXT4上增加了日志,EXT3还没有。

【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第7张图片
【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复_第8张图片

日志与事务能够保证系统的一致性。

你可能感兴趣的:(【我的笔记】文件系统(三)文件操作、文件缓存/共享/保护/恢复)