マルチプロセッサとプロセス
提供: UnixClassWiki
2018年9月19日 (水) 18:02時点におけるHironobu (トーク | 投稿記録)による版 (ページの作成:「=== マルチプロセッサとプロセス === プロセスが複数のCPUに割り当てられる 複数のプロセッサ...」)
マルチプロセッサとプロセス
複数のプロセッサの話題に移りますが、ここでの複数プロセッサといってもスーパーコンピュータのように超並列とかは、この話題の範囲ではないので除外した上で話を進めます。
さて、我々が現在利用の対象としているタイプのハードウェアは、対称マルチプロセッサ(SMP: Symmetric Multi-Processor) と呼ばれるタイプのものです。SMPの特徴で覚えておかなければならない点は各々のプロセッサが各々独自の入出力を持っていないのと、そして、どのプロセッサもシステム内のすべての構成部分に対して同等にアクセスできることの2点です。
さらにそのSMPを構成しているハードウェア上で対称型マルチプロセッシング(Symmetric multiprocessing)を実現しているのもSMPです。
ハードウェアがSymmetric Multi-Processorでもソフトウェアでは(Symmetric multiprocessingではないOSの実装もありえます[1]。
まずはSMPとはプロセッサの数が増えただけで、あとは構成要素を共有していると理解するのが良いでしょう。ですからSMPの良い部分は単一プロセッサと同じプログラムのモデルが使用できる点です。考えた方として単純にプロセッサが複数あると考えて構いません。単純化したスケジュールのモデルで考えてみましょう。たとえばラウンドロビンのスケジュールを用いて、CPU(ここでの説明はプロセッサと同じということで捉えてください)が1つだったのを2つにしたときを考えてみると下のようになります。
カーネルがSMPの複数CPUに対し処理を割り当てる方法はいくつかあります。それはプロセス単位での割り当てとスレッド単位の割り当てです。
- 補足
- ここではプロセス (1タスク/1スレッド) と タスク ( 1タスク / 複数スレッド ) とし、前者が「プロセス単位で」、後者が「スレッド単位」でという意味です。
- ↑ ありえますが、筆者はそのような実装はみたことはありません。