Linux 代码段寄存器在系统调用中的作用

Linux 代码段寄存器在系统调用中的作用,linux,Linux,进行系统调用时,是否使用代码段寄存器或控制寄存器检查预校验级别 英特尔CPU中的代码段寄存器用于分段。我不清楚linux中如何处理分页和英特尔x86机制 如果有人解释了当系统调用时cpu中发生的与级别变化相关的事情,这将非常有帮助。Linux从未使用286样式的分段来分隔进程,或者以其他方式将虚拟内存有趣地分段,而是从一开始就使用386样式的分页。转移到内核模式(syscall)过去是一条简单的int指令,它根据中断表转移执行,并使CPU进入内核模式(保护级别0)。然而,CPU仍然必须重新加载段

进行系统调用时,是否使用代码段寄存器或控制寄存器检查预校验级别

英特尔CPU中的代码段寄存器用于分段。我不清楚linux中如何处理分页和英特尔x86机制


如果有人解释了当系统调用时cpu中发生的与级别变化相关的事情,这将非常有帮助。

Linux从未使用286样式的分段来分隔进程,或者以其他方式将虚拟内存有趣地分段,而是从一开始就使用386样式的分页。转移到内核模式(syscall)过去是一条简单的
int
指令,它根据中断表转移执行,并使CPU进入内核模式(保护级别0)。然而,CPU仍然必须重新加载段描述符才能“了解”新的保护级别和新段的位置(尽管它始终是CPU“不知道”的同一虚拟内核模式段)

AMD和Intel提出了加快这一过程,而这正是该平台上所有操作系统实际使用的

然后,内核代码必须做更多的工作来保存堆栈上的寄存器并将它们初始化为新值,而这一点并没有改变。但这通常不理解为系统调用过程的一部分

在进行系统调用时,是否使用代码检查预归档级别 是否使用段寄存器或控制寄存器

特权级别是通过中断表引用的新代码段获得的,而不是检查的,或者在优化的情况下,是预加载到MSR(非内核代码无法访问的CPU寄存器)中的


另一种说法是,在CPU级别上自动切换到0级,但是段描述符和/或MSR需要由内核预先安排,这样才能真正导致内核执行陷阱处理程序,而不仅仅是一般的保护错误。

我还有一个双重错误。linux中的内核模式是在使用系统调用进入内核模式的同一进程地址空间中,还是内核代码完全是不同的进程?@vindhya-进程和地址空间是不同的东西。地址空间主要由CPU提供。进程由操作系统提供;每个进程由地址空间、内核模式堆栈空间、打开文件表等组成。两个进程的地址空间完全重叠(如果它们只是您称之为“同一进程”的线程),或者部分重叠,所有内核内存始终映射到相同的地址,但无法从用户模式访问。系统调用不会更改进程,也不会更改地址空间。