プロセスがシステムコールを行い、カーネルモードにある場合、2つのスレッドが作成されます。
a) カーネル内の各スレッドのスタックはどのように生成されますか?
b)スレッドの1つがユーザーモードに戻り、他のスレッドがカーネルモードに残った場合、親スレッドが割り当てたカーネルデータ(ローカル)は失われますか?
c)生成された2つのスレッドのPIDが異なるのはなぜですか?
答え1
カーネルをたくさん調査し、同じトピックに関連するプロジェクトを進めた後、次のことがわかりました。
a) はい、各 kthread には 8k、4k などのアーキテクチャに依存するスタックがあります。
b)はい、カーネルスタックが空のときにユーザースペースに戻すと、スレッドの1つのローカル権限が失われます。ただし、グローバル変数を宣言してその変数を実行すると、そのスレッドを別のスレッドで使用できるようになります。 。もう1つ注目すべき点は、カーネル全体に1つのデータセグメントしかないことです。
c) 2 つのスレッドはカーネルのコンテキストで異なる 2 つのプロセスであり、ps で [] で表されるため、2 つのスレッドの pid が異なります。