私は現在Linuxを学んでいます。私はスレッドがLinux上の軽いプロセスであることを知っています。しかし、スレッドスタックスペースがどこから出てくるのか知りたいです。
スレッドのスタックはプライベートです。これはプロセススタックとは無関係です。私の検索によると、一部の人々はスレッドスタックですmmap()
。スタックとヒープの間にあります。したがって、スレッドスタックはプロセスのメモリマップされたセグメントから来ます。そうですか?mmap()
heap
答え1
Linuxカーネルに関する限り、スレッドははいいつもより共有プロセスが増えました(例えばアドレス空間、信号処理、およびプロセスID(実際にはスレッドグループID)。
プロセスが開始されると、スレッド、スタックなどがあります。そのスレッドが別のスレッドを起動するときに新しいスレッドにスタックを提供することは、生成スレッドに依存します。これは、割り当てられたメモリがスタックとして使用するのに適していることを確認するのに役立つさまざまなフラグがサポートされているmmap
ためです。mmap
バラよりサンプルプログラムman 2 clone
。ただし、これを使用する必要はなく、mmap
スタック要件を満たす割り当てられたメモリブロックを使用できます。
スレッドに設定されたスタックはプライベートではありません。同じアドレス空間を共有する別のスレッドに表示されます。ただし、シングルスレッドがスタックとして使用するようにスケジュールする必要があります。単一のスタックを共有する複数のスレッドはうまく機能しません。
バラよりLinuxのスレッドはプロセスとして実装されていますか?背景と歴史の詳細をご覧ください。