在研究VFS时,这个问题突然出现在我的脑海中。是否可以将 VFS 视为一个模块?
我之所以这么想,是因为VFS具有将实际文件管理简化到内核/用户空间的特点。这看起来像是设备驱动程序会做的事情,这让我开始思考。
但话又说回来,如果VFS是在内核中静态编译的东西,我想它不能被视为一个模块。
答案1
您没有指定您要询问的操作系统,但对于所有主流通用操作系统来说,答案可能都是相同的。
长话短说:VFS 不是一个模块。
一般来说,VFS 与内核的基本功能集成度太高,无法配置为(可选)模块。与文件、路径名、挂载点和文件系统有关的所有内容基本上都与 VFS 挂钩。每个采用路径名或文件描述符的系统调用(从 到open()
到rename()
到 都execve()
挂钩到 VFS)。如果没有最后一个,你就不能,嗯……运行任何软件。
有些操作系统没有 VFS 或者 VFS 是可选组件,但这些操作系统没有这样的概念文件与名字。想想微控制器,就像数字恒温器中的“操作系统”。
答案2
在 Solaris 上(请注意,VFS 是由 Sun SunOS-3.x 在 20 世纪 80 年代中期发明的)一切皆有可能动态加载到内核中......自 1992 年以来。然而,VFS 静态链接到/kernel/genunix
.即使krtld
内核运行时链接器已加载,但 genunix 需要能够提前挂载根文件系统作为第一个操作之一,因此无法使其可加载。