UNIX 文件系统结构 — UFS
1. 图示
2. 磁盘存储
如图所示,系统由 MBR(主引导区)引导启动,载入分区表,加载 VFS,文件系统开始进入工作状态。
每个分区维护自己的超级块,用于描述文件系统类型等的关键参数。
空闲空间表即指向空闲块的链表或指针数组。
i 节点表中的每个 i 节点对应一个文件,指向若干数据块,文件即由各个数据块连接而成,i 节点包含了文件属性、物理地址等信息(stat 数据结构除 i 节点编号和文件名的全部信息)
相同的硬链接指向同一个 i 节点,而符号链接只是数据块包含指向信息的 S_IFLINK 类型的文件,图中展示了一个硬链接的例子。
目录也是文件,但指向一个目录块的 i 节点至少要被两个目录块指向(即一个目录至少包含两个目录,分别是 . 与 ..)
3. 内存存储
当进程使用某个文件时,文件对应的 i 节点被载入内存,组成一个 v 节点表,因此,每个载入内存的文件都对应一个 v 节点表。
图中展示了由 fork 产生子进程后的情况,由于子进程复制父进程的地址空间,所以复制了完整的文件指针列表,所以与父进程指向了相同的文件表,但由于记录锁结构中保存的 pid 是父进程的 pid,所以记录锁不会被继承。
如果描述符被设置了 close-on-exec 标志,则在子进程执行 exec 函数后,所有继承得到的 fd 均将关闭,与之对应的所有记录锁均将被释放。
执行 dup 后,同一进程中的不同文件指针将指向相同文件表。
同一个进程打开文件两次,或两个不同的进程同时打开一个文件,则不同的两个文件表将指向同一个 v 节点表(即内存中同一文件)
4. 微信公众号
欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,只有全部原创,只有干货没有鸡汤。
《UNIX 文件系统结构 — UFS》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/362.html