为什么我们需要在内核空间和用户空间之间分离,即使我们在用户空间创建一个进程,每个数据结构,每个内存资源都由内核管理?为什么我们需要这么大的建筑?为什么我们需要内核空间?
所有的页表,上下文切换等由内核管理,那么为什么用户空间?我们能不能只使用一个空间并开发所有的东西?
这个问题听起来很奇怪,但我想真正理解为什么需要它?如果我必须设计一个全新的操作系统,而且我不在内核空间和用户空间之间进行这种划分,那么会出现什么问题?
感谢
为什么我们需要在内核空间和用户空间之间分离,即使我们在用户空间创建一个进程,每个数据结构,每个内存资源都由内核管理?为什么我们需要这么大的建筑?为什么我们需要内核空间?
所有的页表,上下文切换等由内核管理,那么为什么用户空间?我们能不能只使用一个空间并开发所有的东西?
这个问题听起来很奇怪,但我想真正理解为什么需要它?如果我必须设计一个全新的操作系统,而且我不在内核空间和用户空间之间进行这种划分,那么会出现什么问题?
感谢
如果内核空间与用户空间然后任何人之间或不同的用户进程之间没有保护可以写一些代码,用于将有意或无意地修改在内核空间或存储器或者存储器中的另一个用户进程的空间。看看缺乏这种保护的老式MS-DOS。
分离的空间是不是绝对必要的,但如果你需要保护OS结构从用户代码,以防止他们的错误或不好操作,那么你需要某种形式的保护。否则,如此糟糕的操作将会破坏操作系统内部的一致性,这通常是你不想要的。
感谢让得到它:) – anupamD
内核空间和用户空间是关于系统保护,使系统更强大。内核空间是特权模式,可以执行某些用户空间无法执行的操作(如直接与硬件/系统资源交互)。所有与硬件的用户空间交互只能经过内核空间。
所以,一个错字用户代码不能导致系统崩溃/无法使系统不稳定。没有这种分离,写错的用户代码甚至可能会使系统崩溃。
感谢@UKAgr得到了你的观点:) – anupamD
你的问题是不奇怪的话 - 是完全正确的,你的直觉,即内核空间可能代表一个不必要的开销。事实上,许多操作系统都没有这个开销。你的操作系统很可能也不会有。
了额外的复杂性的基本原理是这样的:
我们要处理/任务的分离。 我们想确保一个做坏事的任务不会影响另一个任务。这要求任务在各自的孤立空间中执行。
我们希望共享的硬件控制器类似的保护。
的任务无法建立自己的界限;如果是这样的话,一项行为不当的行为可能会故意违反规定。所以我们需要一个比任务拥有更高权限的第三方,并且有你的内核(或特权)空间。
如果额外的内核空间和分离的代价太高,无论是在规模上还是在计算开销上,操作系统都不具备这些功能。许多实时或嵌入式系统在单一空间中运行,具有与您所描述的完全相同的特权级别(特权级别有时称为保护环)。
谢谢我也需要一个例子。 :) – anupamD