# 1. VFS 四大对象 inode、dentry、superblock、file 各自的职责与相互关系是什么? A 四个对象职责相同 B inode 描述文件元数据,dentry 缓存路径项,file 表示进程打开实例,superblock 描述文件系统全局 ✓ 正确答案 C dentry 描述文件元数据 D file 与 inode 一一对应
# 2. epoll 就绪通知与 io_uring 完成通知的模型差异,completion 直接携带结果为何能减少一次往返,文件系统多阶段操作如何受益? A 两者完全相同 B epoll 只通知就绪后需再调用取数据,io_uring 完成队列直接携带结果减少往返 ✓ 正确答案 C io_uring 需要更多 syscall D epoll 直接携带结果
# 3. dentry cache(dcache)如何加速路径解析,正负 dentry 分别缓存什么? A 负 dentry 缓存存在文件 B 正 dentry 缓存存在的目录项,负 dentry 缓存"不存在"结果,都加速路径解析 ✓ 正确答案 C dcache 不缓存路径 D dentry 只用于文件系统挂载
# 4. inode 与 file 为何分离,多个打开文件描述符指向同一 inode 时如何共享与隔离状态? A 两者保存相同信息 B 偏移存在 inode 中 C file 与 inode 无关 D inode 保存持久元数据,file 保存每次打开的偏移等状态,多打开共享 inode 但偏移独立 ✓ 正确答案
# 5. 硬链接为何只能指向 inode 而不能跨文件系统或指向目录(根目录除外)? A 硬链接可跨文件系统 B 硬链接可指向任何目录 C 硬链接会创建新 inode D 硬链接是同一 inode 的多个名字,受限于 inode 号只能在文件系统内,且指向目录会破坏树结构故禁止 ✓ 正确答案
# 6. inotify 的事件合并(coalescing)规则,同一 watch 上重复事件如何合并,为什么高吞吐场景需要 fanotify 或 IORING_OP_NOTIFY? A inotify 对同 watch 重复事件合并、队列满会丢事件,高吞吐场景需 fanotify 或 IORING_OP_NOTIFY ✓ 正确答案 B fanotify 比 inotify 更弱 C inotify 从不丢事件 D IORING_OP_NOTIFY 与事件无关
# 7. superblock 如何描述一个已挂载文件系统的整体信息,挂载点与 superblock 的关系是什么? A 每个挂载点一个 superblock B superblock 描述文件系统全局信息,挂载点是其在目录树中的入口,同一 superblock 可多次挂载 ✓ 正确答案 C superblock 与挂载无关 D 挂载点属于 inode
# 8. VFS 如何通过操作函数表实现对不同具体文件系统的多态抽象? A 每个文件系统用不同接口 B VFS 直接操作特定文件系统 C VFS 通过 inode/file/superblock 等操作函数表分发到具体 fs 实现,实现统一接口多态 ✓ 正确答案 D 函数表与多态无关
# 9. io_uring IORING_OP_NOTIFY 集成 inotify / fsnotify / signalfd 的事件通知? A 它只处理普通 IO B IORING_OP_NOTIFY 把 fsnotify/signalfd 等事件纳入 io_uring 完成队列,统一事件与 IO 处理 ✓ 正确答案 C 事件仍需单独 epoll D 与 signalfd 无关
# 10. inotify event coalescing 在高吞吐写入的工程取舍? A 合并不丢任何信息 B 高吞吐下 inotify 完全够用 C 合并减少事件量但可能丢失细节,需要精确事件时需增大队列或改用 fanotify/io_uring ✓ 正确答案 D 队列永远不会溢出
# 11. inotify watch descriptor + event mask(IN_CREATE、IN_DELETE、IN_MODIFY)的工程语义? A wd 表示事件数据 B wd 标识被监控路径,mask 指定事件类型(如 IN_CREATE/IN_MODIFY),目录事件带 name ✓ 正确答案 C 目录事件无 name D mask 只影响性能
# 12. io_uring 的提交/完成队列,与 epoll 相比如何减少 syscall? A io_uring 与 epoll 相同 B 每个操作都要一次 syscall C io_uring 用共享 SQ/CQ 批量提交与完成,配合 SQPOLL 大幅减少 syscall ✓ 正确答案 D 完成不能批量
# 13. io_uring 的 IORING_OP_NOTIFY 相比传统 signalfd/inotify 事件循环,如何把事件通知纳入同一提交队列以减少系统调用? A 仍需独立事件循环 B 它与 signalfd 完全等价 C 事件不能进 io_uring 队列 D IORING_OP_NOTIFY 把事件作为 io_uring 完成项返回,与 IO 统一在同一队列,减少 syscall ✓ 正确答案
# 14. inotify 事件队列溢出(IN_Q_OVERFLOW)与事件丢失,如何检测与应对,高吞吐监控为何要增大队列或换方案? A 队列永不溢出 B 溢出不影响事件 C 队列满触发 IN_Q_OVERFLOW 并丢事件,需增大队列或提高读取,高吞吐换 fanotify/io_uring ✓ 正确答案 D 处理溢出无需重建状态
# 15. io_uring 的超时与取消原语(IORING_TIMEOUT、IORING_OP_ASYNC_CANCEL),如何实现请求级超时与安全取消? A 取消总是立即成功 B io_uring 不支持超时 C IORING_TIMEOUT 提供超时信号,IORING_OP_ASYNC_CANCEL 取消未完成请求,实现请求级控制 ✓ 正确答案 D 超时与取消无关
# 16. fsnotify 在 fanotify 与 inotify 的继承层次工程价值? A 三者完全独立 B fanotify 是底层框架 C fsnotify 是底层事件框架,inotify/fanotify 是基于它的用户空间接口并共享事件逻辑 ✓ 正确答案 D fsnotify 与事件无关
# 17. file_operations 与 address_space_operations 的边界在哪里,分别服务于哪类操作? A 两者职责相同 B address_space_operations 管理打开实例 C file_operations 服务打开的 file 上的读写字调用,address_space_operations 服务 page cache 的页读写 ✓ 正确答案 D file_operations 管理页缓存
# 18. inotify/fanotify 的事件通知,目录监视与审计如何实现? A inotify 侧重事后通知,fanotify 支持权限事件的事前决策与审计,两者互补 ✓ 正确答案 B 两者完全相同 C fanotify 只能事后通知 D inotify 支持权限决策
# 19. io_uring 的多队列与 NUMA 感知,io-wq 如何调度? A 只有单队列 B io_uring 支持 per-CPU 多队列与 NUMA 感知,io-wq 是异步 worker 池按 NUMA 调度 ✓ 正确答案 C io-wq 只在单核运行 D NUMA 感知与性能无关
# 20. fanotify 的权限事件(FAN_OPEN_PERM/FAN_ACCESS_PERM),如何实现阻塞式访问决策与审计,与 inotify 异步通知有何差异? A fanotify 权限事件在访问前阻塞并允许/拒绝决策,inotify 是事后异步通知不决策 ✓ 正确答案 B inotify 会阻塞访问 C 两者都做决策 D fanotify 无法审计