• [转载]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

  • 相关阅读:
    js 数组详解(javascript array)
    CentOS 修改IP地址, DNS, 网关
    Leetcode 652.寻找重复的子树
    Leetcode 650.只有两个键的键盘
    Leetcode 649.Dota2参议院
    Leetcode 648.单词替换
    Leetcode 647.回文子串
    Leetcode 645.最长数对链
    Leetcode 643.子数组最大平均数I
    Leetcode 640.求解方程
  • 原文地址:https://www.cnblogs.com/reality-soul/p/4671459.html
Copyright © 2020-2023  润新知