エンベデッドシステムスペシャリスト 2018年 午前2 問07
問題文
スレッドとプロセスに関する記述のうち、適切なものはどれか。
選択肢
ア:スレッドとプロセスは同一のアドレス空間で実行され、スレッドとプロセスの間でコンテキストの切替えが高速に行われる。
イ:スレッドはプロセスのサブルーチンとして、プロセスとは別のアドレス空間で実行される。
ウ:同一アドレス空間に含まれている各スレッドは、プロセスと共通のスタックとコンテキストをもつ。
エ:同一アドレス空間に含まれているスレッド間の通信は、プロセス間の通信と比較して効率的に行われる。(正解)
🔒 解説は解答すると表示されます
スレッドとプロセスの違い【午前2解説】
正解の理由
エが適切です。同じプロセスに属するスレッドは、プロセスのアドレス空間を共有します。そのため、スレッド間では共有メモリを通じてデータをやり取りしやすく、一般に、別々のアドレス空間で動作するプロセス間の通信より効率的です。
ただし、スレッドごとに実行状態は異なります。各スレッドは、それぞれのスタックやプログラムカウンタなどを持ちます。
解法ステップ
- プロセスは、実行中のプログラムとその実行環境を管理する単位です。プロセスごとに、原則として独立したアドレス空間を持ちます。
- スレッドは、プロセス内で実際に命令を実行する単位です。同じプロセスに属するスレッドは、アドレス空間やデータ領域などを共有します。
- 選択肢の「アドレス空間を共有するか」「スタックや実行状態を共有するか」「通信の効率はどうか」を確認します。
- 同一プロセス内のスレッド間通信は効率的という説明に合うため、エを選びます。
選択肢別の誤答解説
- ア:誤りです。 同じプロセス内のスレッドはアドレス空間を共有しますが、別々のプロセスは原則として異なるアドレス空間で実行されます。なお、スレッド間の切替えはプロセス間の切替えより軽い場合が多いものの、この選択肢は「スレッドとプロセスが同一のアドレス空間で実行される」としている点が誤りです。
- イ:誤りです。 スレッドはプロセス内で動作し、プロセスのアドレス空間を利用します。プロセスとは別のアドレス空間で実行されるわけではありません。
- ウ:誤りです。 スレッドはプロセスのアドレス空間などを共有しますが、スタックや実行状態をスレッド同士で共通にするわけではありません。各スレッドが独自のスタックや実行状態を持ちます。
- エ:適切です。 同一プロセス内のスレッドはメモリ領域を共有するため、別プロセス間の通信と比べて、データの受け渡しを効率よく行えます。
よくある誤解
- 「スレッドはプロセスと同じもの」と考えてしまうこと
プロセスは実行環境を含む単位、スレッドはその中で処理を実行する単位です。 - 「同じプロセス内なら、スレッドはすべての情報を共有する」と考えてしまうこと
アドレス空間などは共有しますが、スタックや実行状態はスレッドごとに持ちます。 - 「スレッド間通信は常にプロセス間通信より高速」と断定すること
一般には効率的ですが、共有データの同期や排他制御にかかる処理も考慮が必要です。
補足コラム
同じメモリ領域を複数のスレッドから利用すると、データの受け渡しを効率化できます。一方で、複数のスレッドが同時に同じデータを書き換えると、意図しない結果になることがあります。そのため、スレッド間でデータを共有するときは、排他制御などによってアクセスを適切に管理します。
FAQ
Q. スレッドごとに異なるものは何ですか?
A. 主にスタックやプログラムカウンタ、レジスタなどの実行状態です。これらによって、各スレッドは別々の処理を進められます。
A. 主にスタックやプログラムカウンタ、レジスタなどの実行状態です。これらによって、各スレッドは別々の処理を進められます。
Q. プロセス間でもメモリを共有できますか?
A. 共有メモリ機構を使えば可能です。ただし、通常は独立したアドレス空間を持つため、共有メモリの設定や同期が必要です。
A. 共有メモリ機構を使えば可能です。ただし、通常は独立したアドレス空間を持つため、共有メモリの設定や同期が必要です。
関連キーワード: プロセス、スレッド、アドレス空間、コンテキストスイッチ、共有メモリ、排他制御

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

