gpt4 book ai didi

linux-kernel - 内核如何知道 CPU 处于用户模式还是内核模式?

转载 作者:行者123 更新时间:2023-12-03 21:04:20 25 4
gpt4 key购买 nike

由于CPU在用户/内核模式下运行,我想知道这是如何由内核决定的。我的意思是,如果调用 sys 调用,内核会代表进程执行它,但是内核如何知道它是在内核模式下执行的呢?

最佳答案

您可以通过代码段寄存器 (CS) 中设置的权限级别来判断您是处于用户模式还是内核模式。从 RIP 或 EIP 寄存器(指令指针寄存器分别取决于您是 x86_64 还是 x86)指向的内存中加载到 CPU 中的每条指令都将通过当前代码从全局描述符表 (GDT) 中描述的段中读取- 段描述符。代码段描述符的低两位将决定代码正在执行的当前特权级别。当进行系统调用时(通常通过软件中断完成),CPU 将检查当前的特权级别,如果它处于用户模式,则将当前的代码段描述符交换为内核级别的描述符,具体如下:系统调用的软件中断门描述符,以及进行堆栈切换并将当前标志、用户级 CS 值和 RIP 值保存在这个新的内核级堆栈上。当系统调用完成时,用户模式 ​​CS 值、标志和指令指针(EIP 或 RIP)值从内核堆栈中恢复,并且堆栈切换返回到当前正在执行的进程的堆栈。

关于linux-kernel - 内核如何知道 CPU 处于用户模式还是内核模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5223813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com