[转载]VFS—Kernel Space & User Space
在了解虚拟文件系统之前 , 需要先了解 Kernel Space 和 User Space 的区别 . 二者的差别在于内存使用上安全机制的差异 .
kernel 执行时会占据一段系统的内存空间 , 这段空间便是 Kernel Space , 所有的用户无法和 Kernel Space 直接交互 .
/proc/iomem 中的 Kernel Space
User
Space 强调的是用户执行任何程序所占用的内存部分 , 对这些 User Space 的程序而言 , 无法直接使用 Kernel
Space 中的资源 , 必须要经过一些系统所提供的 system calls 才可以使用 Kernel Space 的对象 .
这
也是 Ring 的主要概念 , 操作系统分为 Ring 0 , Ring 1 , Ring 2 , Ring 3 . Ring 0 是
kernel 存在的地方 ( 也就是 Kernel Space ) , 也是唯一可以和硬件直接交互的系统组件 . 所有 Ring 0 以外的软件
, 若需要用到硬件 , 都必须通过 Ring 0 执行 .
Ring
1 和 Ring 2 则是系统的模块部分 , 对用户来说 , 就是经常看到的一模块或者 /dev , /proc , /sys
等虚拟文件系统 (VFS) . 所以用户正常使用的应用程序 (也就是 User Space) 则是被限制在 Ring 3 ,
其目的就是让应用程序与 kernel 分开 , 当应用程序需要任何硬件设备时 , 要先通过虚拟文件系统或虚拟模块向 Kernel 请求支持 .
用户如果在正常的使用环境下想得知一些 kernel Space 的信息 , 必须通过中间的虚拟文件系统 – User Space 与 Kernel Space 的信息才可以交互 .
只要是 VFS 就没有一定要在哪一个目录下查看的限制 , 并且目录下的任何文件都不会占用硬盘空间 . 可以按如下方式挂载 VFS:
挂载 proc
# mount -t proc /mnt/vfs /mnt/vfs
或者
# mount -t proc proc /mnt/vfs
挂载 sys
mount -t sysfs /mnt/vfs /mnt/vfs
或者
mount -t sysfs sysfs /mnt/vfs
挂载 dev
mount –bind /dev /mn/vfs