为什么我们需要在内核空间和用户空间之间进行分离,即使我们在用户空间中创建进程,每个数据结构,每个内存资源都由内核管理?为什么我们需要这么大的架构?
所有页面表,上下文切换等都由内核管理,那为什么用户空间呢?我们难道不能只使用一个空间并在其上发展所有的东西吗?
这个问题可能听起来很奇怪,但我想真正理解为什么需要它?如果我必须设计一个全新的操作系统,并且我不在内核空间和用户空间之间进行这种划分,那会是什么问题?
由于
答案 0 :(得分:2)
你的问题根本不奇怪 - 你的直觉绝对正确,内核空间可能代表不必要的开销。实际上,许多操作系统都没有开销。您的操作系统很可能也不会拥有它。
额外复杂性的基本原理是这样的:
我们希望进程/任务分离。 我们希望确保执行不良操作的任务不会影响另一个任务。这要求任务在各自的隔离空间中执行。
我们希望为共享硬件控制器提供类似的保护。
任务无法建立自己的界限;如果是这种情况,行为不端的任务可能会故意破坏规则。所以我们需要第三方拥有比任务更高的权限,并且有你的内核(或特权)空间。
如果额外内核空间和分离的成本太高,无论是大小还是计算开销,操作系统都不具备这些功能。许多实时或嵌入式系统在单个空间中运行,具有单个(相同)权限级别(权限级别有时称为保护环),与您所描述的完全相同。
答案 1 :(得分:1)
分隔空间不是绝对必要的,但如果您需要保护操作系统结构不受用户代码的影响,以防止对它们进行错误或不良操作,那么您需要某种保护。否则这种糟糕的操作会破坏操作系统内部的连贯性,这通常是你不想要的。
答案 2 :(得分:1)
内核空间和用户空间是关于系统保护的,以使系统更加健壮。内核空间是特权模式,可以做一些用户空间无法做到的事情(比如直接与硬件/系统资源交互)。所有用户空间与硬件的交互只需要通过内核空间。
因此,错误编写的用户代码不能使系统崩溃/不能使系统不稳定。如果没有这种分离,错误编写的用户代码甚至可能导致系统崩溃。
答案 3 :(得分:1)
如果内核空间和用户空间之间或不同的用户进程之间没有保护,那么任何人都可以编写一些代码,这些代码会有意或无意地修改内核空间中的内存或另一个用户进程空间中的内存。看看那些缺乏这种保护的老式MS-DOS。