![]() |
1
126
多读 |
![]() |
2
44
这是两种不同的计算机操作模式。在此之前,当计算机就像一个大房间,如果有什么东西崩溃,它会停止整个计算机。所以计算机架构师决定改变它。现代微处理器在硬件上实现至少两种不同的状态。 用户模式:
内核模式:
开关是如何发生的。 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 |
![]() |
3
8
运行Windows的计算机中的处理器有两种不同的模式:用户模式和内核模式。处理器根据处理器上运行的代码类型在两种模式之间切换。应用程序以用户模式运行,核心操作系统组件以内核模式运行。当许多驱动程序在内核模式下运行时,一些驱动程序可能在用户模式下运行。 启动用户模式应用程序时,Windows会为该应用程序创建一个进程。这个过程为应用程序提供了一个私有虚拟地址空间和一个私有句柄表。由于应用程序的虚拟地址空间是私有的,因此一个应用程序无法更改属于另一个应用程序的数据。每个应用程序都是独立运行的,如果应用程序崩溃,则崩溃仅限于该应用程序。其他应用程序和操作系统不受崩溃影响。 除了私有之外,用户模式应用程序的虚拟地址空间也受到限制。以用户模式运行的处理器无法访问为操作系统保留的虚拟地址。限制用户模式应用程序的虚拟地址空间可防止应用程序更改并可能损坏关键操作系统数据。 在内核模式下运行的所有代码共享一个虚拟地址空间。这意味着内核模式驱动程序与其他驱动程序和操作系统本身没有隔离。如果内核模式驱动程序意外写入错误的虚拟地址,则属于操作系统或其他驱动程序的数据可能会受到损害。如果内核模式驱动程序崩溃,整个操作系统就会崩溃。 如果您是Windows用户,一旦浏览此链接,您将获得更多信息。 |
![]() |
4
5
我要在黑暗中捅一刀,猜你是在说窗户。简而言之,内核模式可以完全访问硬件,但用户模式不能。例如,许多设备驱动程序(如果不是大多数)都是以内核模式编写的,因为它们需要控制硬件的更详细信息。 也见 this wikibook . |
![]() |
5
3
其他答案已经解释了用户模式和内核模式之间的区别。如果你真的想了解细节,你应该得到一份 Windows Internals 这是一本由MarkRussinovich和DavidSolomon撰写的优秀书籍,描述了各种Windows操作系统的体系结构和内部细节。 |
![]() |
6
2
CPU环是最明显的区别 在x86保护模式下,CPU始终处于4个环中的一个环中。Linux内核仅使用0和3:
这是内核与用户土地之间最难和最快的定义。 为什么Linux不使用环1和环2: CPU Privilege Rings: Why rings 1 and 2 aren't used? 当前环是如何确定的? 当前环通过以下组合选择:
每个戒指能做什么? CPU芯片的物理结构如下:
程序和操作系统如何在环之间转换?
有多个环有什么意义? 分离内核和用户土地有两个主要优点:
怎么玩它? 我已经创建了一个裸机设置,它应该是直接操作环的好方法: https://github.com/cirosantilli/x86-bare-metal-examples 不幸的是,我没有耐心去做一个userland示例,但我确实做了分页设置,所以userland应该是可行的。我很想看到拉车请求。 或者,Linux内核模块在环0中运行,因此您可以使用它们来尝试特权操作,例如读取控制寄存器: How to access the control registers cr0,cr2,cr3 from a program? Getting segmentation fault 这里是一个 convenient QEMU + Buildroot setup 在不杀死主人的情况下尝试一下。 内核模块的缺点是其他kthread正在运行,可能会干扰您的实验。但理论上,您可以用内核模块接管所有中断处理程序,并拥有系统,这实际上是一个有趣的项目。 负环 虽然在Intel手册中没有实际引用负环,但实际上有一些CPU模式比环0本身具有更多的功能,因此非常适合“负环”名称。 一个例子是虚拟化中使用的管理程序模式。 有关更多详细信息,请参阅: https://security.stackexchange.com/questions/129098/what-is-protection-ring-1 手臂 在ARM中,环被称为异常级别,但主要思想保持不变。 ARMV8中存在4个异常级别,通常用作:
这个 ARMv8 Architecture Reference Model DDI 0487C.a -第D1章-AARCH64系统级程序员模型-图D1-1完美地说明了这一点:
请注意,ARM如何在不需要负级别的情况下,为特权级别提供比x86更好的命名约定,这可能是由于事后诸葛亮:0是低级别,3是高级别。更高的级别往往比低级别更容易创建。
当前EL可以通过
ARM并不要求所有异常级别都存在,以允许不需要该特性来保存芯片区域的实现。ARMV8“异常级别”表示:
例如,qemu默认为el1,但可以使用命令行选项启用el2和el3: qemu-system-aarch64 entering el1 when emulating a53 power up |
![]() |
7
1
什么 基本上,内核模式和用户模式之间的区别不依赖于操作系统,只有通过硬件设计来限制某些指令只能在内核模式下运行才能实现。像内存保护这样的所有其他目的只能通过这种限制来实现。 怎么用? 这意味着处理器要么处于内核模式,要么处于用户模式。使用一些机制,体系结构可以保证每当它切换到内核模式时,都会提取操作系统代码以运行。 为什么? 有了这个硬件基础设施,可以在通用操作系统中实现这些功能:
|
![]() |
Denis · 在C、linux中同步进程 1 年前 |
![]() |
ridhomblr · 如果DI>32767,VGA输出不显示 1 年前 |
![]() |
dmgzh · 如何根据所使用的系统更改变量值?(Python) 2 年前 |
|
gitm_248 · Ubuntu安装和关闭的问题:寻求解决问题的指导 2 年前 |
![]() |
Adriana · 尝试创建文件列表时出错 2 年前 |