【发布时间】:2015-04-21 14:55:12
【问题描述】:
我正在尝试在 xv6 中实现内核级线程。
我目前的主要问题是了解CPU如何获取有关当前进程的信息以及如何修改它以指向当前线程。
我知道它与这条线有某种联系:
extern struct proc *proc asm("%gs:4");
在proc.h,但我不完全理解它的工作原理和原因。
【问题讨论】:
-
我不知道 xv6 是什么,但它看起来像 x86 代码。在 x86 上,gs 是一个段寄存器。它通常指向包含有关当前thread 的信息的固定位置。 4 表示该位置的偏移量 4 个字节。所以引用这个变量会将4字节的数据引用到线程数据中。 gs 的数据格式是特定于操作系统的。在 Windows 上,查看 winnt.h 中的 NT_TIB。不知道在哪里可以在 linux 上找到此信息。