システムコールABCを作成したとします。システムコール内でプロセスを中断できますか?
syscall ABC()
{
int mask = disable(); // to disable interupt
....
pid // pid of calling process
if(some condition){
suspend(pid);
}
....
restore(mask); // restore interupts
}
私たちのプログラムからABCを呼び出す場合、いくつかの基準によって、ABCシステムコールはsuspendを呼び出す必要があります。それから何が起こるでしょうか? 割り込みが無効になっているため、他のプロセスはコンテキスト切り替えができず、現在のプロセスはサスペンド状態です。単一のコアプロセッサでは、ハング状態ですか?現在のプロセスを再開するプロセスがないためです。 私が間違っている場合は私を修正してください。
代わりの一時停止は、我々は睡眠を使用することができます。変更を加えている間に違いはありますか?現在のプロセスを中断
プロセスを中断するために使用するAPIを教えてください。 – jlliagre
実際、OSについては言及していませんでした。これはLinuxに非常によく似ていますが、拡張可能ではない(主に学術目的のための) "Xinu"です。そして、私はXinuシステム(カーネル)で作業していますので、サスペンド機能(プロセステーブルに直接アクセスしてそのエントリにアクセスする)を含むsuspend.cファイル(API)があります。 – Django