非 SVR4 基于的文件系统架构解析
1. 常规文件访问与缓存机制
在对常规文件进行读写操作时, ino_rw() 函数会调用 rwip() 。 rwip() 主要通过调用 bmap() 函数将文件偏移量映射到磁盘块,然后调用缓冲区缓存来实际读取数据。 bmap() 函数会返回两个块,一个是同步读取的请求块,另一个是文件中的下一个块,会对其发起异步读取,以此实现预读功能,提升性能。虽然 bmap() 函数由 rwip() 直接调用,但文件系统特定代码的分离已初现端倪,为支持多文件系统类型的架构奠定了基础。
BSD 缓冲区缓存与其他地方描述的实现并无显著差异,这里不再赘述。
2. 4.3BSD 中的文件名缓存
BSD UNIX 引入了两种文件名缓存机制:
- 增强 namei() 函数 :当进程按顺序扫描目录时,增强后的 namei() 函数能实现更快的目录扫描。在合适的基准测试中,这种优化效果显著,但在实际应用中,其作用范围有限。
- 引入新的名称缓存 :新的名称缓存用于存储最近的文件名到索引节点(inode)的查找结果。该缓存后来在 SVR4 中被采用,称为目录名查找缓存(DNLC)。它包含将文件名和设备号映射到内核中索引节点指针的条目。BSD 名称缓存采用软持有机制,即缓存条目中引用的索引节点
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



