私はこれを見ました:ユーザーレベルのスレッドパッケージの実装とそれは適用されません。
スレッドを割り当ててスタックを作成するThread_new (int func(void*)) の実装中に、私が正しい場合、プログラム カウンター (%eip) を設定する方法を考えることができないため、スレッドがスケジューラによって開始されると、指定された関数の (func) エントリ ポイントから開始されます。
多くの c のみ (アセンブリなし) の実装を見てきましたが、次のコード (x86) が提供されています。
_thrstart:
pushl %edi
call *%esi
pushl %eax
call Thread_exit
%edi をスタックにプッシュする特定の理由はありますか? バイトコピー以外にesi/ediの別の用途が見つからないようです。
*%esi への間接呼び出しは、おそらく新しいスレッドのコンテキストから関数を呼び出すために使用されることを認識していますが、それとは別に、%esi が有効な関数であることをどのように (または何を) 指しているのか理解していないようです。 Thread_new から _thrstart を呼び出したときのアドレス
ノート:
Thread_exit は、c で実装されたクリーンアップ スレッドです。
これは宿題です