CPUとメモリを使えば簡単です。
プロセスには大きな仮想アドレス空間があり、物理メモリに部分的にマップされています。現在のプロセスが物理メモリにないページにアクセスしようとすると、OS が介入し、スワップするページを選択し (たとえば、ラウンド ロビンを使用)、ディスクにスワップし、スワップから必要なページを読み取り、制御が行われます。プロセスに戻りました。そのページがないとプロセスを続行できないため、これは簡単です。
GPU カーネルは別の話です。
ユースケースを考えてみましょう:
優先度の高い [cpu] プロセス、つまりXがカーネルを呼び出します (これはブロッキング呼び出しです)。現時点では、OS がコンテキストを切り替えて、CPU を別のプロセス、つまりZに割り当てることは合理的です。例として、プロセスZも GPU で重い処理を行うとします。
では、GPU ドライバーは何をするのでしょうか。[優先度の高い] Xに属するカーネルを停止しますか? ZがXのカーネルをオフロードするのに十分なほど優先されていないことを OS に通知しますか? 一般に、2 つのプロセスが GPU リソースを必要としているが、利用可能な GPU メモリが一度に 1 つしか処理できない場合はどうなるでしょうか?