【问题标题】:Kernel mode for user program用户程序的内核模式
【发布时间】:2020-09-10 09:59:41
【问题描述】:

我知道内核模式是一种特权,因此在内核模式下,所有硬件功能和指令集中的所有指令都可用。我也知道,当我们进行过程调用(比如 read())时,它又会进行系统调用。但在此之前它会陷入内核模式。我想知道如果每个用户程序都可以在内核模式下运行,因为所有过程调用和系统调用都对用户程序可用,那么内核模式有什么用处。

【问题讨论】:

  • 只需在您的计算机上运行 DOS、Windows 95、Windows 98 或 Windows ME 一周左右。这些操作系统中没有内核模式/用户模式分离。试试看,自己看看。

标签: kernel cpu-architecture processor instruction-set kernel-mode


【解决方案1】:

分隔地址空间有几个原因。

第一个是安全。每个程序都可以调用内核,但内核不必强制执行。例如,您可以尝试以非特权用户的身份向内核询问open("/dev/sda", O_RDWR),看看会发生什么。内核将防止您搞砸其他用户正在使用的系统。

第二个是方便。在许多嵌入式系统上,确实没有用户空间。所以让我们想象一下我们正在内核中编写我们的程序。现在我们的程序有一个小错误,它崩溃了,或者覆盖了重要的内存。在大多数情况下,这会破坏地址空间,您需要一个新的地址空间。但是,如果您只有一个地址空间,那么到达那里的唯一方法就是重新启动。

第三个是同步。例如,如果两个进程要使用内存,它们需要合作才能不使用同一个内存块。如果一个程序有错误,它可能会导致许多其他程序出现问题。强制通过程序强制遵守的API来进行内存管理,意味着没有程序会导致这样的问题。

【讨论】:

    【解决方案2】:

    操作系统的硬件、文件和其他安全关键部分的问题在于,它们只能以正确的方式操作,否则操作系统会损坏(或发生其他坏事) .

    如果没有内核-用户分离,应用程序本身会提供与操作系统关键部分一起使用的代码。这个code可以是any。因此,格式错误的应用程序可能会损坏操作系统。

    通过内核-用户分离,应用程序接触硬件的唯一方法是系统调用。这允许仅运行与操作系统的安全关键部分一起使用的有限代码。应用程序无法修改该代码

    因此,在正确编写处理系统调用的代码后,操作系统可以保护其关键部分免受格式错误的应用程序的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2016-06-10
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      相关资源
      最近更新 更多