Я пытаюсь реализовать потоки уровня ядра в xv6.Реализация потоков уровня ядра в xv6
Моя основная проблема на данный момент заключается в том, чтобы понять, как ЦП получает информацию о текущем процессе и как его модифицировать, вместо этого указывая на текущий поток.
Я знаю, что это каким-то образом связан с этой линии:
extern struct proc *proc asm("%gs:4");
в proc.h
, но я не в полной мере понять, как и почему это работает.
Я не знаю, что такое xv6, но это выглядит как код x86. На x86 gs является регистром сегментов. Он обычно указывает на фиксированное местоположение, которое содержит информацию о текущей [нить] (http://stackoverflow.com/a/10810340/2189500). 4 указывает на смещение 4 байта в это место. Поэтому ссылка на эту переменную будет ссылаться на данные 4 байта на данные потока. Формат данных в gs зависит от ОС. В Windows посмотрите на NT_TIB в winnt.h. Не знаете, где найти эту информацию в Linux. –