複数のプロセスまたはスレッドを使用するプログラムを作成する方法を理解できます。新しいプロセスを fork() して IPC を使用するか、複数のスレッドを作成してそのような通信メカニズムを使用します。
コンテキストの切り替えも理解しています。つまり、CPU が 1 つしかない場合、オペレーティング システムは各プロセスの時間をスケジュールします (そして、スケジューリング アルゴリズムは無数にあります)。これにより、複数のプロセスを同時に実行することができます。
マルチコア プロセッサ (またはマルチプロセッサ コンピュータ) を使用できるようになったので、2 つの別々のコアで 2 つのプロセスを同時に実行できます。
私の質問は、最後のシナリオに関するものです。カーネルは、プロセスが実行されるコアをどのように制御しますか? 特定のコアでプロセスをスケジュールするシステム コール (Linux または Windows) はどれですか?
私が尋ねている理由: 私はコンピューティングの最近のトピックを調査する学校のプロジェクトに取り組んでおり、マルチコア アーキテクチャを選択しました。そのような環境でプログラミングする方法 (デッドロックや競合状態を監視する方法) に関する資料はたくさんあるようですが、個々のコア自体の制御に関する資料はあまりありません。いくつかのデモンストレーション プログラムを作成し、アセンブリ命令または C コードを提示して、「2 番目のコアで無限ループを実行しています。その特定のコアの CPU 使用率のスパイクを見てください。」 .
コード例はありますか? それともチュートリアル?
編集:明確にするために-これはOSの目的であり、OSにこれを任せるべきだと多くの人が言っています。同意します!しかし、私が求めている (または感触を得ようとしている) のは、オペレーティング システムがこれを行うために実際に行っていることです。スケジューリング アルゴリズムではありませんが、「コアが選択されたら、そのコアが命令のフェッチを開始するには、どの命令を実行する必要がありますか?」