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