Kernel 用户程序的内核模式

Kernel 用户程序的内核模式,kernel,cpu-architecture,processor,instruction-set,kernel-mode,Kernel,Cpu Architecture,Processor,Instruction Set,Kernel Mode,我知道内核模式是一种特权模式,因此在内核模式下,所有硬件功能和指令集中的所有指令都可用。我还知道,当我们进行过程调用时,依次说read,然后进行系统调用。但在此之前,它陷入内核模式。我想知道,如果每个用户程序都可以在内核模式下运行,那么内核模式有什么用,因为所有过程调用和系统调用都可以用于用户程序。关于硬件、文件和操作系统的其他安全关键部分的问题是,它们只能以正确的方式操作,否则操作系统会被损坏,或者会发生其他不好的事情 没有内核-用户分离,应用程序本身就提供了一个与操作系统关键部分一起工作的代

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

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

没有内核-用户分离,应用程序本身就提供了一个与操作系统关键部分一起工作的代码。此代码可能是任意的。因此,格式错误的应用程序可能会损坏操作系统

在内核用户分离的情况下,应用程序接触硬件的唯一方式是系统调用。这只允许运行与操作系统的安全关键部分一起工作的有限代码。应用程序无法修改该代码


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

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

没有内核-用户分离,应用程序本身就提供了一个与操作系统关键部分一起工作的代码。此代码可能是任意的。因此,格式错误的应用程序可能会损坏操作系统

在内核用户分离的情况下,应用程序接触硬件的唯一方式是系统调用。这只允许运行与操作系统的安全关键部分一起工作的有限代码。应用程序无法修改该代码


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

分离地址空间有几个原因

第一个是安全。每个程序都可以调用内核,但内核不必强制执行。例如,您可以尝试要求内核以非特权用户的身份打开/dev/sda,O_RDWR,看看会发生什么。内核将防止您破坏其他用户正在使用的系统

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


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

分离地址空间有几个原因

第一个是安全。每个程序都可以调用内核,但内核不必强制执行。例如,您可以尝试要求内核以非特权用户的身份打开/dev/sda,O_RDWR,看看会发生什么。内核将防止您破坏其他用户正在使用的系统

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


第三个是同步。例如,如果两个进程想要使用内存,它们需要协作以避免使用同一内存块。如果一个程序有错误,它可能会导致许多其他程序出现问题。通过强制程序遵守的API强制执行内存管理意味着任何程序都不会导致此类问题。

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