Memory 将寄存器文件保存和恢复到内存中是否需要特权指令?

Memory 将寄存器文件保存和恢复到内存中是否需要特权指令?,memory,operating-system,kernel,cpu-registers,Memory,Operating System,Kernel,Cpu Registers,我猜不会,因为用户进程应该能够保存和恢复自己的寄存器(例如用户级线程),并且不会损害任何其他进程和操作系统。然而,在进行上下文切换时,为什么我们需要先切换到内核模式,然后保存和恢复寄存器?我很困惑。有人能帮忙吗?谢谢大家! 它取决于使用的处理器以及需要保存和恢复的寄存器列表 否→ 称为的典型保存/恢复场景不需要任何特殊的东西。您可以在您喜爱的C++编译器附带的运行时库的源代码中研究它的实现,从而找到更多关于它内部的信息 是→ 在上像CR0一样进行恢复肯定是一项特权操作,因为篡改寄存器可能会破坏所

我猜不会,因为用户进程应该能够保存和恢复自己的寄存器(例如用户级线程),并且不会损害任何其他进程和操作系统。然而,在进行上下文切换时,为什么我们需要先切换到内核模式,然后保存和恢复寄存器?我很困惑。有人能帮忙吗?谢谢大家!

它取决于使用的处理器以及需要保存和恢复的寄存器列表

→ 称为的典型保存/恢复场景不需要任何特殊的东西。您可以在您喜爱的
C++
编译器附带的运行时库的源代码中研究它的实现,从而找到更多关于它内部的信息

→ 在上像
CR0
一样进行恢复肯定是一项特权操作,因为篡改寄存器可能会破坏所有安全保证,并让恶意代码对系统造成巨大危害

第5.9章“特权指令”将下列寄存器(及其保存/恢复指令)列为特权:

  • LGDT
    -加载GDT寄存器
  • LLDT
    -加载LDT寄存器
  • LTR
    -加载任务寄存器
  • LIDT
    -加载IDT寄存器
  • MOV
    (控制寄存器)-加载和存储控制寄存器
  • LMSW
    -加载机器状态字
  • CLTS
    -清除寄存器CR0中的任务切换标志
  • MOV
    (调试寄存器)-加载和存储调试寄存器
  • RDMSR
    -读取特定于型号的寄存器
  • WRMSR
    -写入特定于型号的寄存器
另见: