文件系统路径名管理与Unix文件系统解析
1. 段映射(segmap)统计与操作
段映射(segmap)在文件系统中起着重要作用。从示例的segmap统计数据可知,在总共16,109,564次getmap调用中,有15,257,790次槽位被回收,文件和偏移的槽位重用率达到95%,即segmap中文件系统页面的缓存命中率为95%。实际的页面到缓存命中率可能更高,因为即使在segmap中未命中,页面仍可能存在于页面缓存中,只需重新加载页面的地址转换信息。
写入操作与读取类似,调用segmap_getmap为文件和偏移检索或创建映射,完成I/O操作后释放segmap槽位。若文件扩展或在文件空洞中创建新页面,则需额外调用segmap_pagecreate函数创建并锁定新页面,再调用segmap_pageunlock解锁。segmap缓存会随页面的换入换出和页面扫描器的操作而增减,但最大尺寸受限于特定架构。
2. 路径名管理
大多数vnode方法基于vnode指针操作,而非路径名或文件描述符。在调用文件系统vnode方法前,vnode框架需将路径名和文件描述符转换为vnode引用。文件描述符可直接转换为对应文件的vnode,而路径名则需通过查找路径名组件并引用底层文件来转换。独立于文件系统的lookuppn()函数可将路径名转换为vnode,lookupname()函数则用于转换用户模式系统调用中的路径名。
下面是一些相关操作的说明:
-rel_abort:因写入失败而释放槽位,并请求从seg_map段中移除。
-rel_dontneed:释