关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。
想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。
7年前关闭。
Improve this question
哪些指令(针对 x86 芯片)只能在内核模式下运行?我试图了解用户模式和内核模式之间的实际区别。到目前为止,我知道只有在内核模式下才能访问一部分地址空间。该内存空间包含驱动程序等,应保护其免受用户程序的影响。另外,内核模式是如何在 CPU 中实际实现的? CPU 中是否有某个位变为 1 或发生类似情况?
编辑 : 之后
答案已在下面提供。
我只是在这里添加从答案中提到的链接复制的部分答案。
特权级别说明
指令说明
LGDT 将 GDT 的地址加载到 GDTR
LLDT 将 LDT 的地址加载到 LDTR
LTR 将任务寄存器加载到 TR
MOV 控制寄存器 复制数据并存储在控制寄存器中
LMSW 加载新机器状态字
CLTS 清除控制寄存器 CR0 中的任务切换标志
MOV Debug Register 复制数据并存储在调试寄存器中
INVD 使缓存无效,无需回写
INVLPG 使 TLB 条目无效
WBINVD 使用回写使缓存无效
HLT 暂停处理器
RDMSR 读取模型特定寄存器 (MSR)
WRMSR 写模型特定寄存器 (MSR)
RDPMC 读取性能监控计数器
RDTSC 读取时间戳计数器
最佳答案
这个问题更多地针对那些处理非常低级硬件细节的人(比如内核程序员),而不是那些处理通常被称为软件开发人员的高级问题的人。我会回答,因为我认为这仍然是计算机科学!
您不会想要运行用户应用程序,它会突然删除屏幕上的所有内容、删除硬盘驱动器中的所有数据、拒绝对任何硬件的任何访问、完全控制 CPU 资源等等,并且以非常不愉快的方式进行。内核是控制用户访问系统实用程序的主人。此外,如果一个用户应用程序失败,那么它将“独自”平静地死去!所以病毒经常以内核为目标,从而造成有意义的破坏。
这种保护不能通过软件有效地完成。这将要求操作系统检查用户应用程序的每条指令,确保没有恶意!一个例子是试图直接写入内核内存空间。例如,尝试访问地址 0 处的内存将产生一个称为 General Protection Fault 的中断。转至 the link below并搜索文本“特权级别说明”。
内核模式是通过配置系统寄存器来实现的,比如 GDTR(全局描述符表寄存器)。转至 the link below并搜索标题“全局描述符表”。根据该寄存器的配置,当违反特权级别时会生成通用保护故障中断。
链接:http://www.brokenthorn.com/Resources/OSDev23.html
关于x86 - 哪些指令只能在内核模式下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21958244/