用户程序的内核模式

问题描述 投票:0回答:1

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

kernel cpu-architecture processor instruction-set kernel-mode
1个回答
5
投票

关于硬件、文件和操作系统的其他安全关键部分的问题是,它们应该只在一个 正道否则操作系统就会被损坏(或者其他不好的事情会发生)。

如果没有内核和用户的分离,一个应用程序本身就提供了一个与操作系统关键部分一起工作的代码。这个 编码 可能是 任何. 因此,一个畸形的应用程序有可能损坏操作系统。

在内核和用户分离的情况下,应用程序接触硬件的唯一途径是一个 系统调用. 这允许只运行一个 限定代码 它与操作系统的安全关键部件一起工作。一个应用程序有 没有办法修改代码.

所以,在正确编写了处理系统调用的代码后,操作系统就可以保护其关键部分不受畸形应用的影响。


2
投票

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

第一个原因是 安全性. 每个程序都可以调用内核,但内核不一定要答应。举个例子,你可以尝试让内核调用 open("/dev/sda", O_RDWR) 作为一个无权限的用户,看看会发生什么。内核会防止你把其他用户正在使用的系统搞坏。

第二种是 便利. 在许多嵌入式系统上,确实没有用户空间。所以我们想象一下,我们在内核中写程序。现在我们的程序出现了一个小错误,它崩溃了,或者覆盖了重要的内存。在大多数情况下,这会把地址空间搞坏,你需要一个新的地址空间。但是如果你只有一个地址空间,唯一的办法就是重启。

第三种是 同步化. 例如,如果两个进程想使用内存,它们需要合作,才能不使用同一个内存块。如果一个程序出现了bug,可能会给其他很多程序带来问题。通过API强制程序遵守的内存管理,意味着任何程序都不能造成这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.