哪些指令(对于x86芯片)只能在内核模式下运行?我试图了解用户和内核模式之间的实际区别。到目前为止,我了解地址空间的一部分只能在内核模式下访问。此内存空间包含应受到保护以免受用户程序影响的驱动程序等。内核模式如何在CPU中实际实现?在CPU中有一点转1或类似的事情发生?
编辑:之后 答案已在下面提供。
我只是在这里添加从答案中提到的链接中复制的部分答案。
特权级别说明
指令说明
LGDT将GDT的地址加载到GDTR
LLDT将LDT的地址加载到LDTR
LTR将任务寄存器加载到TR
MOV控制寄存器复制数据并存储在控制寄存器中
LMSW加载新的机器状态字
CLTS清除控制寄存器CR0中的任务切换标志
MOV调试寄存器复制数据并存储在调试寄存器中
INVD使高速缓存无效回写
INVLPG使TLB条目无效
WBINVD使用回写无效缓存
HLT暂停处理器
RDMSR读模型特定寄存器(MSR)
WRMSR写入模型特定寄存器(MSR)
RDPMC读取性能监控计数器
RDTSC读取时间戳计数器
答案 0 :(得分:4)
这个问题更多地针对那些处理非常低级别硬件细节(比如内核程序员)的人,而不是那些处理通常被称为软件开发人员的高级问题的人。我会回答,因为我认为这仍然是计算机科学!
您不希望运行用户应用程序,它会突然删除屏幕上的所有内容,删除硬盘中的所有数据,拒绝任何硬件访问,完全控制CPU资源等等。不愉快的方式。内核是控制用户访问系统实用程序的主服务器。此外,如果一个用户应用程序失败,那么它将“孤军奋战”!所以病毒通常以内核为目标,从而造成有意义的伤害。
这种保护不能通过软件有效地完成。这将要求操作系统检查用户应用程序的每条指令,确保没有任何恶意!一个例子是试图直接写入内核内存空间的例子。例如,尝试访问地址0处的内存将生成称为“一般保护错误”的中断。转到the link below并搜索“特权级别说明”文本。
通过配置GDTR(全局描述符表寄存器)等系统寄存器来实现内核模式。转到the link below并搜索标题“Global Descriptor Table”。根据该寄存器的配置,在违反特权级别时会产生一般保护错误中断。