CPU 从用户模式切换到内核模式:它到底是做什么用的?它是如何实现这种转变的?
修改
即使它依赖于架构,请给我一个答案。该架构取决于您。告诉我你所了解的架构。
我想知道所有事情将涉及到什么。
答案 0 :(得分:29)
注意:这主要与x86架构有关。这是一个有点简化的解释。
转换通常由以下原因之一引起:
通常发生的是系统检查中断描述符表(IDT)。每个异常(中断,故障等)都有一个与之关联的数字,用于索引此表。
从该表中,CPU可以确定要运行的中断处理程序。
作为转换的一部分,以下更改(通常)生效:
您现在处于内核模式。
希望有所帮助:)
答案 1 :(得分:4)
这是系统依赖的,但通常的机制是一些用户态操作导致软件中断。该中断使处理器切换模式并跳转到内核代码,然后内核代码检查程序尝试执行的操作(系统调用?),然后执行请求的操作并跳转回用户模式代码。除了软件中断之外的其他机制也可能导致转换;例如,在抢占式多任务系统中,定时器中断可能会触发调度程序运行。
答案 2 :(得分:3)
我的理解是,任何段寄存器具有两个LSB为零的程序将以内核模式运行,而其段寄存器具有两个LSB = 1的任何程序将在用户模式下运行。实际上,段rgeisters的两个LSB定义了Priviledge Level(0最高到3最低)
因此,要使prgram在内核模式下运行,您必须将段寄存器设置为0010 hex(我相信)。我不确定如何在不重写其他内容的情况下将程序放在该内存空间中 - 换句话说,链接器如何确保? 此外,如果要从用户模式代码调用内核模式代码,则必须弄清楚如何传递参数 - 它们不使用相同的内存空间,因此无法通过内存引用传递数据。我想你必须把它传递给寄存器。
如果任何人都能填补上述空白,我将非常感激。
答案 3 :(得分:1)
在Windows中,当您进行系统调用时,库例程会调用驻留在操作系统地址空间中的内核入口点。它通过执行特定于此目的的指令(例如 sysenter )将CPU带入管理程序模式。它的作用主要是在标志寄存器中设置一个位。这使操作系统能够使用特权指令。