プロセスはカーネルへのシステムコールを介してCPUとメモリにアクセスしますか?

プロセスはカーネルへのシステムコールを介してCPUとメモリにアクセスしますか?

私の言葉が正しい場合、デバイスへのアクセスはカーネルへのシステムコールを介して処理されます。

CPUとメモリもデバイスだ。

  1. プロセスが実行を開始したら、カーネルへのシステムコールを介してCPUとメモリを取得しますか?
  2. プロセスが他のプロセスと同時に実行されると、カーネルはインタリーブ方式で実行をスケジュールします。プロセスがCPUとメモリを別のプロセスに引き渡して再取得すると、プロセスはカーネルへのシステムコールも呼び出しますか?
  3. プロセスの実行が終わると、カーネルへのシステムコールによってCPUとメモリも解放されますか?

ベストアンサー1

ただCPUでしか動作しないので、CPUをあまり「得られない」ことがあります。カーネルは、プロセスが実行されるコア、実行時期、実行期間を決定します。各プロセスがCPUからその時間を取得するようにタスクをスケジュールします。しばらく実行された次のタイムスライスが期限切れになるか、システムコールが発生した後、コンテキストは別のプロセスに切り替わります。プログラムの状態は、スイッチの前に保存されており、カーネルが追加の時間が必要であると判断した場合に復元されるため、時間差さえも認識されません。スケジューリングはさまざまです。固定タイマー(通常はミリ秒)があるか、ティックがない可能性があります。カーネルはまた、niceプロセスの優先順位()に従ってスケジューリングを管理します。プロセスが特定のコア(taskset)にロックされている可能性があります。マルチスレッドプログラムの場合、スレッドは独立してスライスを取得し、同時に実行できます。カーネルはプログラムを完全に中断してから後で再起動できます(SIGSTOPとSIGCONTによってトリガーされます)。

メモリが仮想化されました。プログラミング言語で見られるポインタは、物理メモリブロックではなく、物理層に再マップされる仮想アドレスです。カーネルはページ単位でRAMを提供したり(4kBなど)、少し混ざったりします(ページはハードディスクに置き換えられ、アクセスされたときにのみRAMに復元できます)。mmap新しいページをアドレスにマップする方法(ページはメモリにマップされたハードドライブ上のファイルを参照できます)。ただし、メモリ(mallocおよびその他のアロケータ)を動的に割り当てる場合、アロケータが実行する操作はアロケータによって異なります。通常、メモリプールまたはより大きなブロックsbrkのためのより多くのスペースを要求するためにシステムコールを呼び出します。実装は異なる場合があります。mmap

要約すると、プロセスの優先順位とCPUの優先順位を設定できますが、スケジューラはどのような方法でもカーネルと対話せずにプログラムの実行方法とタイミングを担当します。メモリはページ単位で提供され、システムコールを介して要求されます。メモリが割り当てられると、カーネルの介入なしに仮想アドレス空間を介して簡単にアクセスできます。

おすすめ記事