Grundlegendes zum Abrufen des task_struct-Zeigers vom Prozesskernelstapel

Im Moment lese ich das Buch "Linux Kernel Development 3d Edition" von Robert Love. Dort schreibt er über die thread_info-Struktur, die den Zeiger auf die task_struct-Struktur enthält und sich, wie ich verstanden habe, am unteren oder oberen Rand des Kernel-Stapelprozesses befindet (abhängig von der Architektur). Ich war bis vor kurzem nicht mit der Linux-Kernel-API vertraut und wusste nichts über die Existenz der aktuellen () -Methode. Es gibt einen Auszug aus dem Buch, der sich darauf bezieht, wie die current () -Methode tatsächlich funktioniert:

Auf x86 wird der Strom berechnet, indem die 13 niedrigstwertigen Bits des Stapelzeigers ausgeblendet werden, um die thread_info-Struktur zu erhalten. Dies erfolgt mit der Funktion current_thread_info (). Die Assembly wird hier gezeigt: movl $ -8192,% eax andl% esp,% eax Dies setzt voraus, dass die Stapelgröße 8 KB beträgt. Wenn 4 KB-Stapel aktiviert sind, wird 4096 anstelle von 8192 verwendet.

Meine Fragen sind:

Soweit ich weiß, gibt es nur ein niederwertiges Bit in der Menge, wenn ein Dezimalwert als Satz von Bits dargestellt wird, nicht wahr?Was ist die magische Zahl 13?

Für Tausende, die dieses Thema lesen werden, können die Fragen, die ich gestellt habe, zu dem Schluss führen, dass der Autor den Prozess der Speicherzuweisung und -verwaltung nicht richtig versteht. Ok, das mag richtig sein, weil ich den für den Stack zugewiesenen Speicher als das Band voller Bits (oder Bytes) darstellen kann. Alle diese Bytes, auf die über eine bestimmte Speicheradresse zugegriffen werden kann, werden als Dezimalwert dargestellt. Der Ursprung des Stapels ist die niedrigste Speicheradresse und die Finne des Stapels ist der höchste Wert der Speicheradresse. Aber WIE, WIE können wir den Zeiger auf die thread_info - Struktur erhalten, die sich beispielsweise am Ende des Stapels befindet, indem wir 13 niedrigstwertige Bits des ARBITRARY - lokalisierten Stapelzeigers maskieren (wenn ich das richtig verstanden habe, maskieren wir Bits des Stapelzeiger ADRESSE als Dezimalwert dargestellt).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage