複数のプロセスやスレッドを使用するプログラムの作成方法を理解できます。新しいプロセスをfork()してIPCを使用するか、複数のスレッドを作成してこれらの種類の通信メカニズムを使用します。プロセスが実行されているコアを制御する方法は?
コンテキスト切り替えも分かります。つまり、CPUは1回だけで、オペレーティングシステムは各プロセスの時間をスケジューリングします(スケジューリングアルゴリズムがたくさんあります)。これにより複数のプロセスを同時に実行することができます。
マルチコアプロセッサ(またはマルチプロセッサコンピュータ)が完成したので、2つの別々のコアで同時に2つのプロセスを実行できます。
私の質問は最後のシナリオです:どのコアがプロセスを実行するかをカーネルがどのように制御するのですか?どのシステムコール(LinuxやWindowsでさえ)が特定のコアでプロセスをスケジュールするか?
私が求めている理由:私は、コンピューティングの最近の話題を探究しようとしている学校のプロジェクトに取り組んでいます。私はマルチコアアーキテクチャを選択しました。そのような環境(デッドロックや競合状態を監視する方法)でプログラムする方法には多くの資料があるようですが、個々のコア自体を制御することはあまりありません。私はいくつかのデモンストレーションプログラムを書いて、「第2のコアで無限ループを実行しています。具体的なコアがあるのCPU使用率のスパイクを見ています。 "。
コード例はありますか?またはチュートリアル?
編集:明確にするために、多くの人がこれがOSの目的であり、OSがこれを世話するべきだと述べています。同意します!しかし、私が求めているのは、オペレーティングシステムがこれを行うために実際にやっていることです。スケジューリングアルゴリズムではなく、「コアを選択したら、そのコアで命令をフェッチするためにはどの命令を実行する必要がありますか」
ここに可能な答え:http://stackoverflow.com/questions/980999 CPUコアからチップセットAPICに送信されているスタートアッププロセッサ間割り込みを記述し、別のCPUを初期化してそのコードを実行するために使用できる答えの1つは、マルチコアアセンブリ言語のようなものです特定のアドレスにあるCPU –
私たち自身のOSでSMPを起動する最小の例:http://stackoverflow.com/a/33651438/895245その+同期メモリを使って遊ぶことが必要です。 –