【问题标题】:in kernel and user space在内核和用户空间
【发布时间】:2015-05-13 07:08:18
【问题描述】:

现在我知道应该避免开发进入内核空间的应用程序——它难以调试、复杂等...... 考虑到这一点,将应用程序从用户空间移动到内核有什么好处?毕竟,如果没有积极的一面,它就永远不会完成......有什么?

【问题讨论】:

    标签: kernel


    【解决方案1】:

    一些可能的优势:

    • 系统调用可能会更快(即延迟更低),因为 CPU 不必从应用程序模式切换进入内核模式。 (这不一定正确,因为 CPU 可能比简单的“用户空间”和“内核空间”做出更好的区分。例如,Intel x86 CPU 有一个包含 4 个不同权限级别的环模型。)1 )

    • 您可以通过内存和 I/O 端口直接访问系统硬件

    • 如果您需要在不被打扰的情况下做某事,您也许可以禁止任务切换

    • 您也许能够绕过操作系统强制执行的安全机制(例如读取/修改其他进程的内存)。 (如果恶意软件作为内核模式设备驱动程序安装,它可能会利用这一点。)

    (当然,正如您所知,存在许多缺点和安全风险。应用程序空间和内核空间之间的区别是有充分理由的。)


    1) 参见例如文章Making system calls from kernel space from Linux mag

    例如,高性能 Web 服务器可能希望驻留在内核中以提高吞吐量并降低延迟。但是,也存在安全权衡 [...]

    【讨论】:

    • 您也可以安排在用户空间中直接访问系统硬件(至少对于 I/O 端口和设备内存区域)。但是,中断服务例程不能这样做。
    【解决方案2】:

    您的程序中的一个小错误可能会在整个内存中乱涂乱画,并破坏整个系统及其所有进程和功能。如果运气好,系统会崩溃。

    【讨论】:

      【解决方案3】:

      搜索选项时我想到的一些原因,即内核模式与用户模式:

      1) 当需要专用处理并且我们想使用操作系统中内置的实用程序时。例如:如果我们要设计一个 IO 服务器。这里的延迟是 1-5 毫秒。由于内核-用户模式的权衡,人们不能等待上下文切换。但是如果必须依赖内核提供的 TCP IP 框架。它必须在内核模式下实现,紧密结合网络/TCP/IP 框架和您预期的传输框架。

      2) 当您想完全拥有调度框架时。虽然使用各种系统调用和 pthread 框架可以直观地实现这一点。 但是,如果您的产品/线程完全拥有处理器,那么您可能希望从中恢复死锁或活锁的情况。在这种情况下,您需要一个框架来考虑每个线程所花费的时间。这不能从用户 lan 完成,因此需要内核调度程序/调度子系统的支持。

      3) 当您想要对内存进行过载访问时,同样是在资源专用于特定操作的环境中。为虚拟线程覆盖物理内存/内核内存是有意义的。

      4) 当您想要虚拟化磁盘访问以增加冗余或提高读/写性能时。

      除了核心根本原因之外,可能还有更多原因:

      1) 每当您想减少层数以提高性能时,您都可以使用内核。由于内核添加了用于公平共享资源(cpu、ram、网络、磁盘)的虚拟化框架。

      2) 每当您想使用难以移植到用户局域网(Tcp/ip 或 shceduler)的内核基础架构时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-02
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 1970-01-01
        • 2011-09-25
        相关资源
        最近更新 更多