学习日期:2024.7.18
内容摘要:文件共享,文件保护,文件系统的层级结构和全局结构,虚拟文件系统
文件共享
操作系统提供的文件共享功能,可以让多个用户共享使用同一个文件。文件共享和文件复制是不一样的,共享意味着系统中只有“一份”文件数据,一个用户修改,其他的用户都可以看到文件数据的变化。而复制意味着有好几份数据,用户修改自己的那份,对其他用户没有影响。
基于索引节点的共享方式(硬链接)
之前介绍过,索引节点是只包括文件名和索引节点指针的结构。索引节点中设计了一个链接计数变量count,统计链接到本索引节点上的用户目录项数。
通过共享同一个节点来共享文件,当用户决定删除文件时,事实上操作系统只是删除了用户目录中与该文件对应的目录项,并且让count--了,只有当count==0时,才真正删除文件的数据。
基于符号链的共享方式(软链接)
比如说,当User3也共享这个文件时,使用一个Link类型的文件指向文件1,这个Link就类似快捷方式,User3的索引节点指针不是直接指向要访问的文件,而是指向Link类型文件,再通过Link类型的文件访问要共享的文件。
当文件1被删除时,软链接方式找不到文件1了,此快捷方式就失效了,在Windows操作系统中,会提示我们“此快捷方式指向的项目xxx已删除”。
文件保护
口令保护
用户为文件设置一个口令(一般是一个字符串,保存在文件对应的FCB或索引节点当中,访问前操作系统会比对),用户请求访问该文件时必须提供该口令,否则不允许访问。
优点:空间开销和时间开销都很小。
缺点:正确的口令放在系统内部,可能被入侵,不够安全。
加密保护
使用某个“密码”(与口令的本质区别是,设置了加密算法,且不需要存在系统当中)对文件进行加密,在访问文件时需要提供正确的密码才能解密。
优点:保密性强,不需要在系统中存储密码。
缺点:编码和解码需要一定的时间开销。
访问控制
系统会在每个文件的FCB或索引节点中增加一个访问控制表(Access-Control List,ACL),该表中记录了用户可以对文件进行的访问操作权限。 在用户访问前,操作系统会检查访问控制表,确认用户的权限。
而用户很多时,控制表可能会比较复杂,此时就把用户分成几组,比如说可以分成系统管理员,文件主,文件主的伙伴,其他用户 这几个分组。 在Windows中,“以管理员身份运行”就是这样。
优点:实现灵活,可以实现复杂的文件保护功能。
文件的层次结构
用一个例子来帮助记忆层次:
一个用户想删除文件"D:/工作记录:/学生信息.xlsx"的最后100条记录。
1.用户需要通过操作系统提供的接口发出请求——用户接口
2.由于用户提供的是文件的路径,操作系统需要按照路径一层一层的查找目录,找到对应的目录项——文件目录系统
3.不同的用户对文件有不同的操作权限,操作系统要确认用户的权限——存取控制模块
4.在验证了用户有权限后,操作系统把用户提供的“记录号”转换为对应的逻辑地址——逻辑文件系统与文件信息缓冲区
5.把上一层提供的逻辑地址再转换为实际的物理地址——物理文件系统
6.有了物理地址,再对磁盘设备发出请求,删除数据——设备管理程序模块
7.删除这些记录后,肯定有一些盘块空闲,将这些盘块重新回收——辅助分配模块
文件系统的全局结构
从一个磁盘出厂开始,文件系统在外存中是如何一步步建立的?
物理格式化:将磁盘分成一个个扇区,并用备用扇区替换。
坏扇区对操作系统也是透明的,操作系统不知道有坏扇区的存在,因为已经被自动替换了。
逻辑格式化:磁盘分区(CDE盘),划分超级块等方便找到空闲块的结构。
空闲空间管理块在之前介绍过,主要用于记录空闲空间,而i节点区主要存放索引节点。
内存中会有最近打开的目录的缓存(相对路径,详见文件管理基础)以此来快速访问附近的文件,不需要每次都从磁盘读入,而进程打开文件表和系统打开文件表,分别记录了进程打开的文件和系统打开的全部文件。当我们删除文件时,有时会提示“无法删除,因为该文件正在被xx进程占用”这就是系统/进程打开文件表记录的作用,它能避免不同进程访问同一文件时的一些冲突。
虚拟文件系统
虚拟文件系统和虚拟内存一样,存在的目的都是向下屏蔽差异,向上提供统一,本质上是为了方便程序员调用的。
在日常生活中我们使用计算机时,难免会有好几种外存设备同时使用的情况(移动硬盘,U盘,磁盘等),为了避免不同的外存设备的调用接口不同的问题,引入了虚拟文件系统(Virtual File System,VFS)。
①VFS要求下层的文件系统必须实现某些规则的函数功能,如open/read/write,一个新的文件系统想要在某个操作系统上被使用,就必须满足其VFS的要求。
②每打开一个文件,VFS就会在主存中新建一个vnode,里面保存了具体的函数功能指针,用统一的数据结构表示该文件,无论其存储在哪个文件系统。vnode只存在于主存当中,而inode既会被调入主存,也会在外存当中存储。
感谢您看到这里,如果满意的话麻烦您点个赞支持一下,个人主页还有更多内容分享。
个人能力不足,如有错漏还请指出,我会尽快修改。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》