用户和内核模式之间的差异

用户模式和内核模式之间有什么区别,为什么以及如何激活(用例?)。

  1. 内核模式

    在内核模式下,正在执行的代码可以完全无限制地访问底层硬件。 它可以执行任何CPU指令并引用任何内存地址。 内核模式通常保留给操作系统的最底层,最可信任的function。 在内核模式下崩溃是灾难性的; 他们将停止整个PC。

  2. 用户模式

    在用户模式下,正在执行的代码无法直接访问硬件或引用内存。 在用户模式下运行的代码必须委托给系统API来访问硬件或内存。 由于这种隔离提供的保护,用户模式下的崩溃总是可恢复的。 在您的计算机上运行的大多数代码将以用户模式执行。

阅读更多

了解用户和内核模式

这是计算机可以运行的两种不同模式。 在此之前,当电脑像一个大房间,如果有什么事情崩溃 – 它停止整个电脑。 所以电脑build筑师决定改变它。 现代微处理器在硬件中实现至less两种不同的状态。

用户模式:

  • 所有用户程序执行的模式。 它无法访问RAM和硬件。 原因是因为如果所有程序都以内核模式运行,它们将能够覆盖对方的内存。 如果需要访问这些function中的任何一个 – 它会调用底层的API。 除了系统进程以外,每个进程都以用户模式运行。

内核模式:

  • 所有内核程序执行的模式(不同的驱动程序)。 它可以访问每个资源和底层硬件。 任何CPU指令都可以执行,每个内存地址都可以被访问。 该模式是为在最低级别运行的驱动程序保留的

交换机如何发生。

从用户模式切换到内核模式不是由CPU自动完成的。 CPU被中断(定时器,键盘,I / O)中断。 当中断发生时,CPU停止执行当前正在运行的程序,切换到内核模式,执行中断处理程序。 该处理程序保存CPU的状态,执行操作,恢复状态并返回到用户模式。

http://en.wikibooks.org/wiki/Windows_Programming/User_Mode_vs_Kernel_Mode

http://tldp.org/HOWTO/KernelAnalysis-HOWTO-3.html

http://en.wikipedia.org/wiki/Direct_memory_access

http://en.wikipedia.org/wiki/Interrupt_request

运行Windows的计算机中的处理器有两种不同的模式:用户模式和内核模式。 处理器根据处理器上运行的代码types在两种模式之间切换。 应用程序以用户模式运行,核心操作系统组件以内核模式运行。 虽然许多驱动程序以内核模式运行,但某些驱动程序可能以用户模式运行

当您启动一个用户模式的应用程序时,Windows为应用程序创build一个进程。 该进程为应用程序提供私有虚拟地址空间和私有处理表。 由于应用程序的虚拟地址空间是私有的,因此一个应用程序不能更改属于另一个应用程序的数据。 每个应用程序都是独立运行的,如果应用程序崩溃,则崩溃仅限于一个应用程序。 其他应用程序和操作系统不会受到崩溃的影响。

除了私有之外,用户模式应用的虚拟地址空间也是有限的。 以用户模式运行的处理器无法访问为操作系统保留的虚拟地址。 限制用户模式应用程序的虚拟地址空间可防止应用程序改变并可能损坏关键操作系统数据。

在内核模式下运行的所有代码共享一个虚拟地址空间。 这意味着内核模式驱动程序不是与其他驱动程序和操作系统本身隔离的。 如果内核模式驱动程序意外地写入错误的虚拟地址,属于操作系统或其他驱动程序的数据可能会受到影响。 如果内核模式驱动程序崩溃,整个操作系统崩溃。

如果你是Windows用户,一旦通过这个链接,你会得到更多。

用户模式和内核模式之间的通信

我要在黑暗中刺探,猜测你在谈论Windows。 简而言之,内核模式可以完全访问硬件,但用户模式不能。 例如,很多(如果不是大多数)设备驱动程序是以内核模式编写的,因为它们需要控制其硬件的更精细的细节。

另见这个wikibook 。

其他答案已经解释了用户和内核模式之间的差异。 如果你真的想深入细节,你应该得到一个Windows内部的副本,这是一本由Mark Russinovich和David Solomon编写的出色的书,描述了各种Windows操作系统的体系结构和内部细节。

什么

基本上,内核模式和用户模式之间的区别并不取决于操作系统,只能通过硬件devise限制某些指令在内核模式下运行。 所有其他目的,如内存保护,只能通过限制来完成。

怎么样

这意味着处理器处于内核模式或用户模式。 使用一些机制,体系结构可以保证,只要切换到内核模式,操作系统代码就会被提取运行。

为什么

拥有这些硬件基础架构可以在常见的操作系统中实现:

  • 保护用户程序访问整个内存,不让程序覆盖操作系统,例如,
  • 阻止用户程序执行敏感指令,例如那些改变CPU内存指针边界的敏感指令,不让程序中断其内存边界。